Application testing is the process of testing whether an application functions according to various functional and non-functional requirements. There are many techniques that you can use to perform application testing, including:
- Manual methods
- Automation tools
- A combination of both
The purpose of application testing is to identify errors and bugs, and requirements that application development did not meet.
There are three types of application testing:
Each type of testing has different tests associated with it, which have specific objectives and strategies.
Functional testing verifies whether the application meets its functional requirements, and consists of two processes:
- White Box testing
- Black Box testing
White Box testing
White Box testing focuses on the internal functioning of the application. It involves various testing techniques that emphasize validating application code to ensure that statements, methods, conditions and any other logic is functioning properly. To perform White Box testing, it is important to have a knowledge of the application's internal structure.
White box testing is further classified into more specific types of testing:
- Unit testing
- Integration testing
Unit testing involves testing of individual units, or components of the source code, to determine if they perform as expected. Each unit is tested in isolation by eliminating its dependency on other units or components of the code. Unit testing is mainly done on specially-created copies of objects that are created for dependent components or units, to ensure that testing at the unit level functions correctly.
JUnit is an example of an open-source Unit testing tool.
Integration testing combines different software components, or units, to verify the communication across the integrated components. Stubs and drivers play a key role in integration testing. These are dummy programs that are used to facilitate a software testing activity.
Stubs are called by the module that is being tested, while drivers call the module that is being tested.
Additionally, integration testing also includes testing various Application Programming Interfaces (APIs).
Integration testing often happens incrementally, either in the Top-down or Bottom-up model, depending on the requirements.
- Top-down model: In this model, testing starts at the higher-level modules and expands by incrementally integrating the lower-level modules. Stubs are generally used in place of modules that are not ready.
- Bottom-up model: In this model, testing starts at the lower-level modules and expands by incrementally integrating the higher-level modules. Drivers are generally used to call the lower-level modules.
Some examples of integration testing tools are:
Black box testing
Black box testing concentrates on the behavior and outcome of the software application, rather than its internal structure. Black box testing involves testing methods that ensure that the testing process considers the complete application as a system, and consists of an End-to-end testing process. Knowledge of requirement specifications of the application is necessary to perform Black box testing.
Some examples of Black box testing are:
- System testing
- Acceptance testing
System testing involves testing a complete and fully integrated software product. The purpose of a system test is to mimic production-like scenarios, in order to evaluate end-to-end system requirements with established dependencies, data integrity, and communication with other systems.
Acceptance testing determines whether a system satisfies the acceptance criteria. It also helps stakeholders decide whether to accept the system. It is typically customers who perform acceptance testing.
Some examples of end-to-end testing tools are:
- IBM Rational Functional Tester
Check your knowledge with the following interactions:
Non-functional testing verifies the non-functional requirements of a software application.
Typical non-functional test types include:
- Performance: Measures the responsiveness and speed of a system.
- Load: Verifies system behavior and stability under different volumes.
- Usability: With the help of representative users, evaluates application interactions and user friendliness.
- Compatibility: Validates the behavior of the system in different environments.
- Portability: Determines how easy or difficult it is to transfer the application from one environment to another.
- Disaster recovery: Shows how well a system recovers from a crash or an unexpected situation.
- Scalability: Evaluates the system behavior under growing requirements.
- Security: Finds loopholes or vulnerabilities in the application that must be fixed to prevent malicious attacks and information loss.
Check your knowledge with the following interaction:
Regression testing verifies whether introducing new code or changing existing code has affected existing features which were already working properly.
In Regression testing, either all existing test cases or a portion of them are re-run, to ensure that nothing fails because of the new changes.
Changes to the code are analyzed carefully, to identify test cases for Regression testing. During Regression testing, do not run all of the test cases every time, because of the large amount of time and effort required.
Ideally, regression testing is performed for both functional and non-functional testing, depending on the changes introduced.
Check your knowledge with the following interaction: