Per IEEE STD 610.12-1990, IEEE Standard Glossary of Software Engineering Terminology, a "unit" is defined as:
(1) A separately testable element specified in the design of a computer software component.
(2) A logically separable part of a computer program.
(3) A software component that is not subdivided into other components.
Given the low-level nature of a unit of code, the person most able to fully test that unit is the developer who created it.
Projects ensure that the appropriate test environment, test materials, and personnel training (SWE-017), are in place and then conduct unit tests per the approved plans (Software Test Plan), according to the schedule (SWE-016), and with proper monitoring per the software assurance plan, making sure that:
- Criteria for a successful test are established prior to the test.
- Test environment represents inputs, output, and stimulus the unit will experience in operation.
- Capture weaknesses or differences between unit test environment and actual target environment.
- In accordance with the approved plans for unit testing:
- Unit test results are captured.
- Issues are identified and documented (some minor issues, such as typos, as defined by the project, may simply be corrected without documentation).
- Unit test issues are corrected; these may include:
- Issues found in the code.
- Issues found in test instruments (e.g., scripts, data, procedures).
- Issues found in testing tools (e.g., setup, configuration).
- Unit test corrections are captured (for root cause analysis, as well as proof that the unit test plans were followed).
- Unit test results are evaluated by someone other than the tester to confirm the results, as applicable and practical; evaluation results captured.
- Unit test data, scripts, test cases, procedures, test drivers, test stubs are captured for reference and any required regression testing.
- Notes captured in software engineering notebooks or other documents are captured for reference.
- Objective evidence that unit tests were completed and unit test objectives met is captured in the Software Development Folders (SDFs) or other appropriate project location as called out in the project documentation (e.g., Software Development Plan (SDP)/ Software Management Plan (SMP), Configuration Management (CM)Plan).
- Unit test metrics captured, as appropriate and defined for the project.
Per NASA-STD-8719.13, NASA Software Safety Standard; and NASA-GB-8719.13, NASA Software Safety Guidebook, software assurance is to "Verify unit testing and data verification is completed before the unit is integrated." Either software assurance or Independent Verification and Validation (IV&V) personnel "Verify unit tests adequately test the software and are actually performed." When less formal confirmation of unit testing is needed, a software team lead or other designated project member may verify completeness and correctness of the testing by comparing the results to the test plan to ensure that all logic paths have been tested and verifying the test results are accurate.
Unit testing tools and some integrated development environments (IDEs) can auto-generate unit tests based on the code. These tools provide a quick method to generate unit tests, but may not completely exercise the unit of code. Rerun units tests each time the unit is updated to ensure the code continues to work as expected. When continuous integration is part of the life cycle, all of the unit tests are rerun each time the code is updated to ensure only working code is integrated.
Documented test results, results evaluations, issues, problem reports, corrections, and tester notes can all serve as evidence that unit tests were completed. Comparing those documents to the software test plans for unit testing can ensure the tests were completed in accordance with those documented procedures.
Make sure evidence of all test passes is captured.
NASA-GB-8719.13, NASA Software Safety Guidebook, further states in the section on safety-critical unit test plans that "documentation is required to prove adequate safety testing of the software." Therefore, unit test results can play an important role in supporting reviews of safety-critical software.
Consult Center PALs for Center-specific guidance and resources related to unit testing.
Additional guidance related to unit testing may be found in the following related requirements in this handbook: