A comprehensive list of software testing levels
There are four levels of software testing: unit testing, integration testing, system testing and acceptance testing. In addition, there are different types of testing and in this article Shreyasi Paul tries to cover and explain them all.
- Unit testing: The smallest testable part of the programme (units) are tested known as unit testing. Done on the developer side, it can be manual or automated.
- Integration testing: Here small units are integrated and tested to check whether or not they are working properly after integration.
- System testing: This is the third level of testing where testing is done on complete integrated system.
- Acceptance testing: This is the final level testing which is done on a completed product before delivery. There are two types: alpha testing and beta testing.
Some types of testing are explained below.
Black box testing
A method of testing in which the functionality of an application being tested is based on the specifications without knowing its internal structure or working. It is also known as behavioural testing, data-driven or input/output driven testing. It is usually functional.
This testing can done in every level (unit, integration, system and acceptance) of testing.
White box testing
A method of testing where the tester has a good knowledge about the internal structure and design of the application. It is also known as clear box testing, open box testing, glass box testing, transparent box testing, code-based testing or structural testing.
This is testing to ensure compatibility of an application or web site with different browsers, OSs, and hardware platforms. Compatibility testing can be performed manually or can be driven by an automated functional or regression test suite.
It is a non-functional testing. It tests whether or not the application or product is compatible with hardware, OS, database, software version, mobile or other supportive system software.
This verifies implementation conformance to industry standards. It is a testing methodology which ensures that the behaviour of an implementation, process, product or system meets the standard.
Validating an application or Web site conforms to its specifications and correctly performs all its required functions. This entails a series of tests which perform a feature by feature validation of behaviour, using a range of normal and erroneous input data.
This testing is specially used to test the functionality of the system or software.
This can involve testing of the product's user interface, APIs, database management, security, installation and networking.
Testing can be performed on an automated or manual basis using black box or white box methodologies.
Load testing is a generic term covering performance testing and stress testing. Load testing is done to measure system’s behaviour under normal and estimated peak load.
Performance testing can be applied to understand your application or web site's scalability, or to benchmark the performance in an environment of third party products such as servers and middleware for potential purchase. This sort of testing is particularly useful to identify performance bottlenecks in high use applications. Performance testing generally involves an automated test suite as this allows easy simulation of a variety of normal, peak and exceptional load conditions.
Similar in scope to a functional test, a regression test allows a consistent, repeatable validation of each new release of a product or website. Such testing ensures reported product defects have been corrected for each new release and that no new quality problems were introduced in the maintenance process. Though regression testing can be performed manually an automated test suite is often used to reduce the time and resources needed to perform the required testing.
A test that the major functions of a piece of software work without bothering with finer details. Originated in the hardware testing practice of turning on a new piece of hardware for the first time and considering it a success if it does not catch on fire.
Testing conducted to evaluate a system or component at or beyond the limits of its specified requirements to determine the load under which it fails and how. A graceful degradation under load leading to non-catastrophic failure is the desired result. Stress testing is often performed using the same process as performance testing but employs a high level of simulated load.
In this testing technique user enter random inputs to check system/application behaviour or point of crash.
It is final testing before the product release in market. It is done in level acceptance testing. It is done in two phases:
- Done by in-house developer team
- Done by QA team
This testing done on the customer side. Selected users are sent the application/product in order to test it in real-world working conditions. It is a second stage of acceptance testing.
Recovery testing determined how well an application is able to recover from crashes. Recovery testing is the forced failure of the software in a variety of ways to verify that recovery is properly performed.
Fail-over testing verifies the ability of an IT system to continue operations while the processing capability is being transferred to a backup system. This type of testing ensures if a system is able to allocate extra resources, for example additional CPU, if required.
This testing determines whether the flow of an application is as expected or not from start to finish.
The purpose of this testing is to know the system dependencies and ensure data reliability is maintained between various system component and system.
Installation testing is done to verify that the software is installed with all the necessary component and whether the application works as per expectation or not.
Installation testing will check and inspect whether the installed feature are working in a proper manner – including icons, buttons, support documentation, the file, and registry keys. This test also checks that the system creates the right type of directories and correct system files copied in respective directories.
Uninstallation testing verifies all the components are remove during the uninstallation process or not.
Security testing verifies the data protection level of the information system/application.
Security testing is done to ensure that the system/application is free from any loopholes which may cause a big loss. This testing is about to find all possible loopholes, data leakage which might result of unwanted loss of information.
The six basic security concepts that need to be covered by security testing are: confidentiality, integrity, authentication, availability, authorisation and non-repudiation.
Mutation testing designs a new software test to evaluate the quality of existing software. This testing done by introducing a fault into the system (mutation). Once the fault is introduced, the programme becomes a mutant programme.
Then a test case is applied to both the original programme and mutant programme and the result is compared. The test suite is executed on each one of mutants. If there is an error or failure during the execution of the test suite, the mutant is regarded as killed. On the other hand, if all tests pass, it means that the test suite could not catch the fault and the mutant has survived.
Sanity testing is a surface level testing. It is done when there is not enough time for testing. This testing verifies that all menus, functions, commands available in the product/system are working properly.