Software Testing Strategies
Overview
This chapter describes several approaches to testing software. Software testing must be planned carefully to avoid wasting development time and resources. Testing begins "in the small" and progresses "to the large". Initially individual components are tested using white box and black box techniques. After the individual components have been tested and added to the system, integration testing takes place. Once the full software product is completed, system testing is performed. The Test Specification document should be reviewed like all other software engineering work products. A sample Test Specification document appears on the SEPA web site.
Strategic Approach to Software Testing
Testing begins at the component level and works outward toward the integration of the entire computer-based system.
Different testing techniques are appropriate at different points in time.
The developer of the software conducts testing and may be assisted by independent test groups for large projects.
The role of the independent tester is to remove the conflict of interest inherent when the builder is testing his or her own product.
Testing and debugging are different activities.
Debugging must be accommodated in any testing strategy.
Make a distinction between verification (are we building the product right?) and validation (are we building the right product?)
Strategic Testing Issues
Specify product requirements in a quantifiable manner before testing starts.
Specify testing objectives explicitly.
Identify the user classes of the software and develop a profile for each.
Develop a test plan that emphasizes rapid cycle testing.
Build robust software that is designed to test itself (e.g. uses anitbugging).
Use effective formal reviews as a filter prior to testing.
Conduct formal technical reviews to assess the test strategy and test cases.
Unit Testing
Black box and white box testing.
Module interfaces are tested for proper information flow.
Local data are examined to ensure that integrity is maintained.
Boundary conditions are tested.
Basis path testing should be used.
All error handling paths should be tested.
Drivers and/or stubs need to be developed to test incomplete software.
Integration Testing
Top-down integration testing
Main control module used as a test driver and stubs are substitutes for components directly subordinate to it.
Subordinate stubs are replaced one at a time with real components (following the depth-first or breadth-first approach).
Tests are conducted as each component is integrated.
On completion of each set of tests and other stub is replaced with a real component.
Regression testing may be used to ensure that new errors not introduced.
Bottom-up integration testing
Low level components are combined in clusters that perform a specific software function.
A driver (control program) is written to coordinate test case input and output.
The cluster is tested.
Drivers are removed and clusters are combined moving upward in the program structure.
Regression testing (check for defects propagated to other modules by changes made to existing program)
Representative sample of existing test cases is used to exercise all software functions.
Additional test cases focusing software functions likely to be affected by the change.
Tests cases that focus on the changed software components.
Smoke testing