First do it, then do it right, then do it better
What are Software Testing Levels?
Software test levels are essentially a group of test activities that are carried out for particular software development lifecycle (SDLC) phases within a project or production support.
Determining which levels of testing are required on any given sdlc project is dependent on the type of software development model that has been determined. Other factors such as the systems criticality, budget, resources and time availability may also be a determining factor.
More popular methodologies include defined phases such as requirements gathering and analysis, design, development, testing and deployment. Test levels to be carried out are generally System, System Integration and Acceptance Testing.
Test levels that are generally carried out when following a standard methodology include Unit, Integration, System and Acceptance Testing.
Unit Testing
Unit testing is also commonly known as Component Testing. Its purpose is to search for faults in the software that has been developed whilst verifying the functioning of each component, program, object, class, etc. within the component’s code separately.
Unit testing is conducted in its own environment and is predominately performed in isolation from the rest of the system.
Defects are typically fixed as soon as they are found, without formally logging and managing them.
In practice, unit testing involves either the programmer/developer who wrote the code or another member of the Development Team.
Integration Testing
Integration testing tests integration or interfaces between components, interactions to different parts of the system such as an operating system, file system and hardware or interfaces between systems. Integration testing is conducted by a specific integration tester or test team.
Big Bang integration testing:
In Big Bang integration testing all the components or modules are integrated simultaneously, after which everything is tested as a whole. Big Bang testing has the advantage that everything is finished before integration testing starts. The major disadvantage is that in general it is time consuming and difficult to trace the cause of failures because of this late integration.
Incremental testing:
Another extreme is that all programmers are integrated one by one, and a test is carried out after each step. The incremental approach has the advantage that the defects are found early in a smaller assembly when it is relatively easy to detect the cause. A disadvantage is that it can be time-consuming since stubs and drivers have to be developed and used in the test.
System Testing
System testing is concerned with the behaviour of the whole system. The testing scope should be clearly addressed in the Master and/or Level Test Plan for that test level. The SYS test environment should correspond to the final target or production environment as much as possible.
System testing may include tests based on risks and/or on requirements specifications, business processes, use cases, or other high level text descriptions or models of system behaviour, interactions with the operating system, and system resources. System testing should investigate functional and non-functional requirements of the system, as well as data quality characteristics.
System testing of functional requirements starts by using the most appropriate specification-based (black-box) techniques for the aspect of the system to be tested.
An independent test team generally carries out system testing.
Acceptance Testing
After the system test has corrected all or most defects, the system will be delivered to the user or customer for acceptance testing.
Acceptance testing is usually conducted by the user or customer although other stakeholders may be involved as well. The goal of acceptance testing is to establish confidence in the system and is most often focused on validation type testing. Finding defects is not the main focus in acceptance testing. Acceptance testing may assess the systems readiness for deployment and use.
Typical types of acceptance testing include:
User Acceptance Testing
The User Acceptance testing focuses mainly on the functionality thereby validating the fitness-for-use of the system by the business user. The user acceptance test is usually performed by the users and application managers.
Operational Acceptance Testing
The Operational Acceptance testing is also known as Production acceptance testing or Production verification testing and validates whether the system meets the requirements for operation. In most of the organization the operational acceptance test is performed by the system administration before the system is released. The operational acceptance test may include testing of backup/restore, disaster recovery, maintenance tasks and periodic check of security vulnerabilities.
Independent Testing
The effectiveness of finding defects by testing and reviews can be improved by using independent testers. For large, complex or safety critical projects, it is usually best to have multiple levels of testing, with some or all of the levels performed by independent testers.
The benefits of independence include: