A software test tests and evaluates software for its fulfilment of the requirements defined for its use and measures its quality. The knowledge gained is used to detect and fix software errors. Tests during software development are used to ensure that the software is put into operation as error-free as possible.
The classification of the test stages (sometimes also called test cycles) follows the development status of the system according to the V-model. Its content is based on the development stages of projects. In each test stage, tests are carried out against the system designs and specifications of the corresponding development stage, i.e. the test objectives and test cases are based on the respective development results. However, this principle is only applicable if any changes made in later stages of development have been updated in the older specifications.
In reality, these characteristics are further subdivided depending on the size and complexity of the software product. For example, the tests for the development of safety-relevant systems in transport security technology could be subdivided as follows: unit test on the development computer, unit test on the target hardware, product integration tests, product testing, product validation tests, system integration tests, system testing, system validation tests, field tests and acceptance tests.
---

In practice, the test stages described below are often not clearly delineated from each other, but can run smoothly or via additional intermediate stages, depending on the project situation. For example, the acceptance of the system could be based on test results (reviews, test protocols) of system tests.
Unit test
The module test, also known as a unit test, is a test at the level of internal, definable individual parts of the software, such as modules, subroutines, units or classes. The test objective of these tests, which are often carried out by the software developer himself, is to prove the technical executability and correct (partial) results. By means of unit tests, an average of 30 percent of errors can be detected; 45% when using test-driven development. Due to the fact that unit tests detect the errors during the development phase, the error costs avoided by unit tests are many times higher than later test stages, according to the Rule of 10, making unit tests the most efficient test stage.
Integration test
The integration test or interaction test tests the cooperation of interdependent components. The test focus is on the interfaces of the components involved and is intended to prove correct results across complete processes. Integration tests can detect an average of 35% of errors.
System test
The system test is the test level where the entire system is tested against the entire requirements (functional and non-functional requirements). Usually, the test takes place on a test environment and is performed with test data. The test environment should simulate the customer’s production environment, i.e. it should be as similar as possible. As a rule, the system test is carried out by the implementing organization. System tests can detect an average of 40% of errors.
Acceptance test
An acceptance test, procedure test, acceptance test or user acceptance test (UAT) is the testing of the delivered software by the customer. The successful completion of this test stage is usually a prerequisite for the legally effective takeover of the software and its payment. Under certain circumstances (e.g., for new applications), this test can already be performed on the production environment with copies of real data.
The black box method is used especially for system and acceptance tests, i.e. the test is not based on the code of the software, but only on the behavior of the software in specified processes (user inputs, limit values in data acquisition, etc.).
The number of acceptance tests should be based on the scope of the software.