Verification activities are not to be confused with validation activities as each has a specific goal. Verification is designed to confirm the product is being produced correctly while validation is designed to confirm the right system is being produced. Specific to a software project's implementation, verification involves confirming that the implementation (code) correctly, completely, consistently, and accurately includes each software requirement. Verification methods can include testing, analysis, demonstration, and inspection.
The NASA Independent Verification and Validation Technical Framework (IVV 09-1) document states that "It is important to recognize that requirements cannot be evaluated in isolation. Requirements must be evaluated as a set in order to determine that a particular goal or behavior is being met."
Confirmation of software requirements implementation needs to occur at various times in the project life cycle to ensure that any issues are found and corrected as early as possible:
- Completion of units of code.
- Integration testing.
- System testing.
Verification of requirements implementation includes the following objectives:
- Ensure that the source code reliably performs capabilities stated in the requirements under nominal and off-nominal conditions, as applicable to the software classification (NASA IV&V Technical Framework , Revision M)
- Ensure that the source code provides the reliability and fault tolerance stated in the requirements, as applicable to the software classification (NASA IV&V Technical Framework , Revision M)
- Ensure that the source code satisfies functional, performance, and other requirements (Software Development Process Description Document , Revision R)
While the primary means of implementation verification is testing, the following analysis techniques are also useful (Software Development Process Description Document, Revision R). Note that these techniques are useful for detecting coding problems/issues and may not necessarily be required for verifying that the software properly implements the requirements unless the requirements include statements related to the complexity, memory usage, coding standards, etc.
- McCabe complexity analysis (measures the number of linearly independent paths through a program's source code).
- Memory analysis.
- Static analysis.
- Code standards checking.
Requirements implementation verification activities need to be planned and documented (SWE-104) and verification techniques can be included in the bidirectional requirements traceability matrix (SWE-072) to ensure that all requirements are verified in the implementation. Results of this activity are to be documented (SWE-069), evaluated (SWE-068), and defects corrected.
Consult Center Process Asset Libraries (PALs) for Center-specific guidance and resources related to implementation verification.
Additional guidance related to software testing, including specifics of plan, procedure, and report contents may be found in the following related requirements in this handbook:
Evaluate Test Results
Document Defects and Track
Bidirectional Traceability Between Software Test Procedures and Software
Software Test Plan