TASK 3 - FUNCTIONAL AND NON-FUNCTIONAL TESTING
Tags: testing, beginners, automation
Published: 2023-12-18 13:00:15

**FUNCTIONAL TESTING**
It is a type of software testing which verifies that each function of the software application tested against the functional requirements and specifications. Functional testing mainly involves **black box testing**, and it is not concerned about the source code of the software application.
Every functionality of the system is undergoing testing by providing **appropriate input, verifying the output and comparing the actual results with the expected results**. In this type of testing can be done manually.


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5w20m3xwtneyh85n64lt.jpg)

Functional testing is particularly concerned with the **result of processing**. It is performed before the non-functional testing. 
It verifies the operations and actions of an application than the behaviour of an application.

**Examples of Functional Testing Types**
    
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/l7h5wuv7zg2gs9n2z1ep.jpg)

**Unit testing**
      It is a type of software testing that focuses on **individual units or components**of a software system. The purpose of this testing is to validate each unit of the software works as properly and meets the user requirements.

**Smoke testing**
    This testing method that determines whether the employed **build is stable or not**. It acts as a confirmation of whether the quality assurance team can proceed the next step of testing. This testing is important in software development as it ensures the **correctness of the system in initial stages**.
 This Testing also called as **Confidence Testing or Build Verification Testing**.
It **carried out by quality assurance engineers**. Smoke testing measure the **stability of the software product** by performing testing.

**Integration Testing**
     In this testing where interaction between two or more different components within the software.
Multiple Components need to be tested together.
In this software modules are integrated logically and tested as a group.
The need of this level of testing is to **find out defects in the interaction between these software modules when they are integrated**.
This focuses on checking data communication among these modules. Hence it is also called as ‘String Testing’ and sometimes **‘Thread Testing’**.

**Interface Testing**
      This software testing that focuses on verifying the **interaction between different components, modules, or systems**.
It integrates the connection of two components is called interface. This interface in a computer may be anything like API’s, web services, etc.

**Regression Testing**
   It **ensures that new code changes in the software do not cause any effects on the existing functionalities. The previous code still works once the latest code changes are modified**.
For example, we make a little change to the source code for any reason like adding new functionality, optimization, etc. then our program may fail in the previously designed test suite for obvious reasons.

**User Acceptance**
   It is **performed by the end user or the client to verify the software system before moving the software to the business environment**. These are done in the final phase of testing after functional, integration and system testing are done.
This is also called as **End-User Testing**.

**NON-FUNCTIONAL TESTING**   
    It is type of Software testing to check non-functional aspects software application. It is designed to test the accessibility of a system as per nonfunctional parameters which are never addressed by functional testing. 
**Non-functional testing involves evaluating a system's performance, reliability, usability, efficiency, maintainability, and scalability**.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ibsujd31oc4322m1hu61.jpg)

Each software application has its own functionality. For **Example**, **we can't expect a food delivery app to deliver your favourite dishes when you click on “Order food**.” The role of a n**on-functional tester is to test if you can easily the user navigate to the “Order food” button**. They must also test if more than the ‘n’ number of users could place an order simultaneously from any browser/OS/device configuration it gives the results in a efficient time. 


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/c1vjjglqob5iepq9e2r4.jpg)


**Documentation Testing**
        It is a type of software testing that involves testing the documented test cases developed before or during the testing process begins. Like a **user manual** all the sequence of steps are documented clearly. 
It requires** Test Case document, Test description, Test case report, Test logs**. 

After the testing completed, the test summary remains which is a collective analysis of all test reports.

**Installation Testing**
      It is a type of software testing that verifies the installation process of software and verify that the software is installed correctly on various systems and configurations. 
This process helps to ensure that the software can be easily installed, configured, and uninstalled without any issues.

The main goal of installation testing is to verify that the **software installation correctly on different operating systems, hardware, and software configurations to ensure that it can be installed and configured correctly**, and that the software’s functionality is not compromised during in the installation process.

**Performance Testing**
      It is a type of software testing that verifies software applications perform properly under their expected workload. This testing technique carried out to **determine system performance in terms of speed, responsiveness, stability and scalability of a software application**.

The goal of performance testing is to measure system performance under various loads and conditions and ensure that the system can handle the expected number of users or transactions.

**Load Testing**
    This test ensures **the real-world load on the system to see how it performs under stress**. It helps to determine the maximum number of users or transactions the system can handle.

**Stress Testing**
    It is a type of load testing that tests any potential issues that may occur under heavy load conditions. Stress testing helps to **identify the breaking point of the system and ability to handle a high load**.

**Scalability Testing**
     It is a type of testing to ensures how the application scales with increasing workload and to measure at what point the software product or the system stops scaling and identify the reason behind it.
**Example** - Testing of a web page depends on the number of users, usage of CPU, network usage while scalability testing of a web server depends on the number of requests processed.

**Reliability Testing**
     It is a type of software testing that ensures the ability of a system to perform its **intended function consistently and without failure over an extended period of time**. 
The need of reliability testing is to identify and address issues that which situation can cause the system to fail or to become unavailable like **Data crashes**. 

**Security Testing**
  It is a type of software testing that mainly focuses on evaluating the security of a system or application. The need of security testing is to identify **vulnerabilities and potential threats** and to ensure that the system is protected against **unauthorized access, data breaches, and other security-related issues.**
It determines that the software system and application are free from any threats or risks that can cause a loss.

**Differences between Functional and Non-functional Testing**
   

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hncywbmn6j0ciym7jmbl.jpg)

Key Difference Between Functional Testing and Non-Functional Testing

 Functional testing verifies each function whereas Non-Functional testing verifies non-functional aspects like performance, usability, reliability, etc.

Functional testing can be done manually whereas Non-Functional testing is hard to perform manually.

Functional testing is based on **User’s requirements** whereas Non-Functional testing is based on **User’s expectations**.

Functional testing has a goal to validate software actions whereas Non-Functional testing has a goal to validate the performance of the software.

The Functional Testing example is to check the **login functionality** whereas a Non-Functional testing example is to check the dashboard should **load in 2 seconds**.

Functional testing is performed before the non-functional testing.