What differences are there between the different levels of tests? The focus shifts from early component testing to late acceptance testing. It is important that everybody understands this.
There are generally four recognized levels of tests: unit/component testing, integration testing, system testing, and acceptance testing. Tests are frequently grouped by where they are added in the software development process, or by the level of specificity of the test.
The most basic type of testing is unit, or component, testing.
Unit testing aims to verify each part of the software by isolating it and then perform tests to demonstrate that each individual component is correct in terms of fulfilling requirements and the desired functionality.
This type of testing is performed at the earliest stages of the development process, and in many cases it is executed by the developers themselves before handing the software over to the testing team.
The advantage of detecting any errors in the software early in the day is that by doing so the team minimises software development risks, as well as time and money wasted in having to go back and undo fundamental problems in the program once it is nearly completed.
Integration testing aims to test different parts of the system in combination in order to assess if they work correctly together. By testing the units in groups, any faults in the way they interact together can be identified.
There are many ways to test how different components of the system function at their interface; testers can adopt either a bottom-up or a top-down integration method.
In bottom-up integration testing, testing builds on the results of unit testing by testing higher-level combination of units (called modules) in successively more complex scenarios.
It is recommended that testers start with this approach first, before applying the top-down approach which tests higher-level modules first and studies simpler ones later.
The next level of testing is system testing. As the name implies, all the components of the software are tested as a whole in order to ensure that the overall product meets the requirements specified.
System testing is a very important step as the software is almost ready to ship and it can be tested in an environment which is very close to that which the user will experience once it is deployed.
System testing enables testers to ensure that the product meets business requirements, as well as determine that it runs smoothly within its operating environment. This type of testing is typically performed by a specialized testing team.
Finally, acceptance testing is the level in the software testing process where a product is given the green light or not. The aim of this type of testing is to evaluate whether the system complies with the end-user requirements and if it is ready for deployment.
The testing team will utilise a variety of methods, such as pre-written scenarios and test cases to test the software and use the results obtained from these tools to find ways in which the system can be improved.
The scope of acceptance testing ranges from simply finding spelling mistakes and cosmetic errors, to uncovering bugs that could cause a major error in the application.
By performing acceptance tests, the testing team can find out how the product will perform when it is installed on the user’s system. There are also various legal and contractual reasons why acceptance testing has to be carried out.
The testing sequence
These four testing types cannot be applied haphazardly during development. There is a logical sequence that should be adhered to in order to minimise the risk of bugs cropping up just before the launch date.
Any testing team should know that testing is important at every phase of the development cycle.
By progressively testing the simpler components of the system and moving on the bigger, more complex groupings, the testers can rest assured they are thoroughly examining the software in the most efficient way possible.
The four levels of tests shouldn’t only be seen as a hierarchy that extends from simple to complex, but also as a sequence that spans the whole development process from the early to the later stages. Note however that later does not imply that acceptance testing is done only after say 6 months of development work. In a more agile approach, acceptance testing can be carried out as often as every 2-3 weeks, as a part of the sprint demo. In an organization working more traditionally it is quite typical to have 3-4 releases per year, each following the cycle described here.
Testing early and testing frequently is well worth the effort.
By adopting an attitude of constant alertness and scrutiny in all your projects, as well as a systematic approach to testing, the tester can pinpoint any faults in the system sooner, which translates in less time and money wasted later on.
Detecting software errors early is important since it more effort is needed to fix bugs when the system is nearing launch, and — due to the interactive nature of components in the system — one small bug in a particular component hidden deep within layers of code can result in an effect that is magnified several times over on a system-level.