Types of Testing

There are two broad categories of testing namely-Functional and Non-Functional Testing.Each of them has multiple types of testing as described in the below section.

Functional Testing:
In Functional testing, testing is performed  to verify if the functions or features of the system are working as per the requirements.Functional testing focuses on evaluating 'what' the system does.

Non-Functional Testing:
Non-Functional Testing refers to testing of non-functional requirements like responsiveness,reliability and other aspects.Non-Functional tests evaluate 'how' the system works.


Types of Functional Testing: 
1.Unit Testing: 
The entire application is made up of different units or modules.Each unit provides specific functionality to the entire application.The purpose of the unit testing is to ensure that the unit is able to deliver the functionality it is intended for.The goal is to isolate each part of the program,perform testing,find and fix defects.This is carried out for all the units of the application.This is a white box testing technique and is usually done by the development team.


2.Integration Testing:
It involves testing two or more modules or functions together with the purpose of finding defects when they interact with each other.Integration test execution is performed after completing unit test execution and before the system test execution.It focuses on testing the interfaces between the components.
Unit and Integration testing are typically performed by the developers.


3.System Testing:
It is a testing performed to check if the system/application as a whole is functioning as expected.The expected behavior is derived from the SRS.It is primarily aimed at testing the end to end scenarios of the application.It is carried out after the completion of the integration testing.

4.Regression Testing:
Reexecuting the test cases in order to check whether any bug fix/code change in the application has impacted other areas/functionalities.
Following are the three ways of code changes in any product.
a. Addition of new feature in the product
b. Modification of existing features.
c. Defect fixes.


5.Acceptance Testing:
The purpose of acceptance testing is to verify the system from the end-user perspective.This is the last stage of testing before deploying the product to the field.The system is checked w.r.t the acceptance criteria defined earlier.Following are two types of acceptance testing.
a. Alpha Testing: -Testing happens at the developers site and the testing team performs the testing.
b. Beta Testing: -  Testing happens at the client's site and the end users are involved in the testing.


Types of Non-Functional Testing:
Non-Functional Testing is also called 'Performance Testing'.
1.Load Testing:
It is used to observe the behavior of the system at the various levels of load. Load testing is used to determine at what point the system's response time degrades or fails.


2.Stress Testing:
It is a type of non-functional testing used to identify the load at which the system fails or breaks.

3.Endurance Testing:
It is used to identify any memory leaks that might appear after large number of transactions over long durations and to identify any other defect that may crop-up after executing over long duration.

4.Volume Testing:
 A typical load testing is performed with a large volume of data being populated on to the database.
This is done to study its impact on the application response time and database overall health.Purpose of volume testing is to observe the behavior of the application at various database volumes.