DO-178C’s requirement for Object Code Verification is very clear.
Section 126.96.36.199 of the DO-178C standard describes Structural Coverage Analysis as follows:
“…The requirements-based tests cases may not have completely exercised the code structure, including interfaces, so additional structural coverage analysis is performed and additional verification produced to provide structural coverage”
Sub-section 188.8.131.52b (Structural Coverage Analysis) qualifies that point for object code:
“Structural coverage analysis may be performed on the Source Code, Object Code or Executable Object Code. Independent of the code form on which the structural coverage analysis is performed, if the software level is A and a compiler, linker or other means generates additional code that is not directly traceable to Source Code statements, then additional verification should be performed to establish the correctness of such generated code sequences.”
So – if
- the software is of level A, and
- there is additional code that is not traceable to source code, and
- requirements-based test cases have not completely exercised that additional code
then that object code verification needs to be completed by
- identifying that untraceable additional object code, and
- generating test cases to completely exercise that additional object code.
The inherent one-to-one relationship between statements in the compiler-generated intermediate assembler source code and subsequent object code means that an approach which validates the relationship between the application source code and this assembler code may be used to satisfy this OCV requirement.
- Encapsulates the entire test environment, defining, running and monitoring the test cases through initial test verification and then subsequent regression analysis.
- The uniform test process for source and assembler code highlights any discrepancies.
- Supports the ability to define additional test cases to generate appropriate assembler code coverage.
- Encourages the application of corrective action during the early development stages.
- Significantly increases the quality of the code and the overall test process.