Functional and Non Functional testing
Tags: testing
Published: 2023-10-23 11:02:42

Testing is performed to obtain a better quality software application by reducing the errors ,the defects and the requirement gaps.
**Testing can be majorly classified into two types:**

- Functional Testing 
- Non - Functional Testing 

**Functional Testing :**

1.Functional testing majorly concentrates on the black box testing which verifies the functionality of the software application.
2.Functional testing covers the validation of user interface , APIs and Data base by providing appropriate input and verifying the expected output as a net outcome.
3.The Main purpose of the Functional testing is to cover each and every unit of the software , all the Entry points and exit points of the software  and finally the end to end flow check for the entire application. 

**Functional Testing is classified into various types , where a few important once are listed below:**

- Unit testing
- Integration testing 
- Interface testing
- Regression testing 
- User Acceptance testing
 
**Unit testing :** Unit testing is the first initial level of testing. Unit testing is performed to validate the individual unit or component of software separately. It isolates the section of code and finds the bugs at early stage of development by testing against the requirement and reduces the cost.

**Illustration :** Validation of Display picture upload functionality in Linked in application.
Uploading a picture to the profile is one of the testing component in the entire Linked in application.
Test case 1 : Validate that user is signed in to the linked in application successfully 
Test case 2 : Validate that user is able to navigate to profile setting menu
Test case 3: Validate that user is able to click on profile picture edit menu 
Test case 4: Validate that user is able to upload a PNG and a JPEG file under 4 Mb 
Test case 5: Validate that user is displayed with a validation message "File can not be greater than 4 Mb" if size is greater and "File type should be PNG or JPEG" if file is of different format.
Test case 6: Validate that user is able to upload the picture successfully and save the changes 

**Integration testing:**  Integration testing is performed to validate the integration and data flow between components or units of the software. It ensures the compatibility of the component and the accurate data flow between components.

**Illustration:** Validation of ignition and exhaust system of a car. Ignition is a separate unit and exhaust is a separate unit but integrally we are testing both system of car.
Test case 1:Validate that user is able to ignite the car by starting the engine 
Test case 2:Validate that user is able to start the car and shift the gear from neutral to one using gear rod 
Test case 3:Validate that user is able to move the car after the shift of gear and by accelerating 
Test case 4:Validate that fuel consumption is done for the short distance covered 
Test case 5:Validate that exhaust is functioning well by calculating the fuel consumption for the total distance travelled 

**Interface testing:** Interface testing mainly focuses on the interface of components based on the requirements and the specifications. It is crucial if the components of the software communicate with one another.

**Illustration:** Validation of the ATM Machine's Withdrawal portal and the balance enquiry portal. Both the portals are interdependent and should communicate after each transaction.
Test case 1:Validate that user is able to check the balance before withdrawal . Let us assume that total account balance is 1000.
Test case 2:Validate that user is able to withdraw 300 from the account balance.
Test case 3:Validate that user is able to again check the balance after withdrawal of money. Account's current balance should be 700.

**Regression Testing:** Regression testing is performed to ensure that newly introduced or deployed code is not breaking the existing functionality of the software. Often Regression is performed after every new code change deployment, enhancement and bug fixes.

**Illustration:** Validation of password update functionality in a banking login portal that already contains numeric input password and now it has been upgraded along with biometric option of password to login the site. Both should work individually without breaking each other functionality 
Test case 1:Validate that user is able to view the login page containing two options for password : one is the Numeric text input field and other one is the biometric (fingerprint)
Test case 2:Validate that user is able to set both numeric password and biometric password in the profile security setting menu.
Test case 3:Validate that both credential input ways are working as expected without breaking one another.

**User Acceptance Testing:** UAT is the final phase of testing which is conducted after the completion of development .It is a kind of end user testing , where the entire software is tested against the requirement and business flow before entering the production use.
**Illustration:** Validation of Hardware parts of the mobile device which include power button, volume button , fingerprint login sensor , speakers and touch screen.
Test case 1:Validate that device is switching on and off on click of power button 
Test case 2:Validate that device volume is controlled using volume buttons based on which the speakers of the device is tested in the integrated manner
Test case 3:Validate that device is waking up while using the finger print sensor for login 
Test case 4:Validate that device is touch screen is responsive for every touch , tap and scroll of fingers over the screen

**Non - Functional Testing:**
1.Non - Functional testing is carried out to test the non- functional behavior of the software as per requirement.
2.Non-Functional testing validates the usability , efficiency , optimization of installation to reduce the production risk and cost. 
3.Non-Functional testing is equally important to Functional testing. 

**Non - Functional Testing is classified into various types , where a few important once are listed below:**

- Documentation Testing
- Installation Testing
- Performance Testing
- Reliability Testing
- Security Testing

**Documentation Testing:**Documentation testing involves the review and validation of the requirement document , user manual and design specification documents throughout the testing phase. It verifies the correctness and completeness of the document.

**Illustration:**Validation of a User manual of fan.
Test case 1:Validate that requirement document contains all the data to check the hardware parts and functional working of the fan
Test case 2:Validate that user manual document aids the user for installation of fan. 
Test case 3:Validate that user manual document contains step by step instruction to check the oscillation , speed control and disassembling of fan.
Test case 4:Validate that user is able to operate the fan using the user manual guide.

**Installation Testing:**Installation testing ensures that the software is installed in various system without any flaw irrespective of the configurations. Mainly it concentrates on the installation of system without disturbing the functionality of the system to improve user experience and enhance the quality and compatibility of the software application.

**Illustration: ** Validation of customer feedback UI form in various devices , various Operating system and different browsers.
Test case 1:Validate that UI customer feedback form is loading and opening in all the browsers 
Test case 2:Validate that No UI aspect in disturbed in different device screen resolution , hence the customer feed back form should be responsive to the screen without latency.
Test case 3:Validate that Customer feedback UI is compatible in multiple operating system.

**Performance Testing:** Perform testing concentrates over the performance, reliability and speed and scalability of the software. Sub category of performance testing also includes Load test , Stress test and scalability testing. It is conducted during later stages of development.
**Illustration:** Validate that an shopping kart application is able to load the page within a few seconds though it has multiples components in UI and more that 10000 users are using the application.
Test case 1: Validate that application is launching its home page within few seconds though multiple users are logged in 
Test case 2:Validate that application is not crashing due to over usage of the server by multi user 
Test case 3:Validate that software application is responsive without any latency.

**Reliability Testing:** Reliability testing is performed to verify the ability of the application to  perform consistently and accurately overtime. It is performed to identify and rectify the issues caused due to prolonged usage , data corruption and few unexpected behavior.

**Illustration:** Validation of the power button of an induction stove.
Test case 1:Validate that on and off functionality of induction stove is consistently working even after testing it over 300 on and off of the switch.

**Security Testing:** Security testing is carried at the last phase of development. It is to verify that software is secure against the malicious actors and potential threats.

**Illustration:** Validation of Banking portal login page.
Test case 1:Validate that user is able to login page using credential and the password is encrypted and has a pattern.
Test case 2:Validate that on click of cancel or sudden hang of page after login takes user back to login page (It should not leak the login credentials)
Test case 3:Validate that in the inspect window no user credentials are stored or sent in API calls.