Functional and Non-functional testing
Tags: functionaltestin, nonfunctional
Published: 2023-10-25 11:30:31

Software testing can be conducted in two different levels - functional and non-functional tests.
 
Functional testing is a type of software testing where the basic functionalities of the application are checked against a predetermined set of specifications. It uses black box testing techniques to check if the given input generates the desired output.

Non-functional testing verifies the application’s performance, reliability and user experience match the requirements. 

**Difference between functional and non-functional testing:**

- In simple terms, functional testing checks the functions and features of the application while non-functional testing checks the performance of these functions.
- Functional testing checks if the key functions are operating and non-functional testing checks how the key functions are performing. 
- Functional testing verifies that the software meets the expectations of the end-user. Non-functional testing verifies that the application is easy to use and reliable.


**Examples of Functional Testing:**

In an application that is developed for online shopping, the following needs to be checked:
- Correct username and password that pull the customer’s details.
- Items displayed based on search.
- The number of items and total cost of the items added to the shopping cart.
- Interaction of the application with the payment portal.
- Delivery options, dates and confirmation of address.

Testing is done in phases where all possible inputs are evaluated first to test their functionality. Next the tests are executed manually or automatically and finally check if the output matches the desired output. This is done through various testing methods. 

- The first level of testing is _Unit testing_ and it is usually done as and when a single block of code is developed. It verifies that every small input generates a desired output. For example, the ‘Continue’ button should be disabled until both the user name and password are entered.
- In _integration testing_, the interaction between the different components are tested to verify that they work well together. For example, when the user enters into their account, their address, preferences and other user preferences are accessible and are correct.  
- In _interface testing_ the tester checks the interface of the system or components and how they work together. For example, when a user has selected the items and now proceeds to payment and delivery, the payment portal is checked for accuracy and security.
-_ User acceptance testing_ is the final stage of testing before the application is deployed and it validates if the software aligns with user expectation and business needs. 

**Examples of non-functional testing:**

Under this type of testing, all the non-functional aspects of the software are tested. This includes:

-_ Documentation testing_ is a type of black-box testing that verifies all the documents, user manuals, etc. It ensures that the documents on how to use the system matches with what the system does.
-_Installation testing _checks if the application is installable in different operating systems without any bugs or errors. 
-_Performance testing_ checks the responsiveness, speed and stability of the application under different work loads.
-_ Reliability testing _is the final stage of non-functional testing where the software is checked for stability and reliability during long-term usage. 
-_Security testing_ is done throughout the software development process and ensures that it is secure against potential security threats and attacks.


Both functional and non-functional testing are very important in delivering the best application to meet the requirements put forth.