The best approach is thorough testing at each of the early stages of design and coding to reduce the probability of errors escaping and surfacing during system field use.
Begin testing software at the unit level (maximum 150 lines of code) rather than at the level recommended by 2167-A.
The cost of correcting a software design error after the system is operational is 100 times greater than the cost of an error corrected during design, and many times greater than the cost of correcting a hardware error found in an operational system.
No techniques currently exist to exercise the software completely with all combinations and permutations of the logic and data which would be experienced throughout operational use.
As the complexity of systems increases, it becomes more imperative that the user provides guidance during the early design planning and test phases of the software.
Test to support validation of software requirements; document the procedures for and results of these tests.
Review the verification test procedure prior to conducting final testing.
Prepare a version description document for each release of the software.
Control the configuration of test documentation and of tested and integrated software.
Conduct an audit of the software and software products after completion of testing and review test results.
Use automated tools to support testing and validation of requirements, to increase productivity during testing, and to ensure repeatability of testing.
Apply verification techniques over the whole span of the software life cycle.
Obtain assurance of software/hardware interface compatibility by exhaustively testing the software in a total system test bed, which will allow the simulation of actual operational exercises with the system under test.
Conduct a functional configuration audit (FCA) on several units of completed code by checking the unit test requirements and the unit test reports to learn what kind of testing took place and if the software does all it is supposed to do.
Conduct a physical configuration audit on several units of completed code by checking the detailed design specs, interface document, and maintenance manual to determine if what is written corresponds to the software and/or system.
Have small teams of experts conduct frequent "walk-throughs" to ensure that detailed design and coding are consistent with the design specifications and to uncover potential interface problems among modules.
Conduct developer tests prior to system integration.
Every test plan must describe the expected results.
Develop tests for unexpected conditions as well as for expected conditions.
As the number of detected errors increases, the probability that more errors exist, also increases.
Assign the most creative programmers to the test group.
Testability must be designed into the program; do not alter the program to conduct tests.
Tracking requirements from system level to unit level PLUS complete testing from walk-throughs to system testing will result in defect-free code.