Software testing is conducted throughout the entire life cycle of its development and support. The procedure is necessary to make sure that the product works the way it should, and it is the key to successful project implementation and delivery.
The testing level determines what tests are carried out on — an individual module, a group of modules, or the system as a whole. There are four such levels in total:
- Unit/Component Testing
- Integration Testing
- System Testing
- Acceptance Testing.
Let us have a look at each of these levels individually and find the difference between them.
Unit testing is performed to make sure that each separate system component works correctly. At this stage, testers check whether a certain component performs its designated function or not. The main advantage of code snippet independent testing is that if the test fails, developers can easily detect and fix the error.
Unit testing is often carried out by the developers themselves and allows them to detect and fix errors at the earliest stages of project development. In some way, unit testing serves as documentation for the code and a guide to it. Indeed, such testing puts in the picture of how one function or another should respond to different input parameters.
The next level of testing uses the “top-to-down” or “down-to-top” approach based on the architectural structure (for example, from low-level modules to high-level ones). Integration testing is intended to test connections among components, as well as the interaction among various parts of the system.
Integration testing allows developers to make sure that all modules function efficiently in conjunction with each other. This process includes the following steps:
- test plan preparation;
- test case compilation;
- use case compilation;
- testing after modules were integrated;
- error detection;
- re-testing after the errors were corrected.
This approach allows verifying correct interaction among system components, as well as coherent data exchange and processing.
As the name implies, all software components are tested as a cohesive whole to ensure that the entire product meets the functional and non-functional requirements for the entire system.
Besides, system testing includes functional and non-functional requirements testing, adaptation testing, load and stress testing, usability testing, compatibility testing, user interface testing, and performance testing.
System testing is conducted providing that:
- unit and integration testing were completed successfully;
- software development is completed in compliance with specification requirements;
- an appropriate test environment for system testing has been created.
System testing is typically the final test performed to ensure that the system meets the requirements set by the customer.
Acceptance testing is the final test conducted before the software is deployed. Its purpose is to determine whether the system meets the acceptance criteria, namely the requirements raised by the customer.
As soon as the developers come to the decision that the product is completely ready to be launched, acceptance testing has to confirm it is ready. Based on the acceptance testing results, a decision is made either to release the product or to improve it.
The system approach described allows detecting any system faults at an early level. This approach will minimize the development time and costs in the future. The multilevel testing purpose is to release a product that fully meets customer requirements.