Sometimes, it is useful to make use of legacy code in systems that must have high dependability. Confidence in the dependability of the code
may come from extensive operating experience, but doubts over the relevance of the experience, the wish for diverse arguments for dependability,
and requirements imposed by standards or regulatory bodies may require other evidence to be produced. Where software has not been developed for
critical applications, it may be necessary to reverse engineer it to obtain this.
Within an application, some parts may be more critical than others. More critical components need stronger justification. A software
criticality analysis allows appropriate effort to be directed at each component of the software.
We have undertaken a software criticality analysis for a substantial legacy program written primarily in C with some assembler. We:
This gave a conservative view of the criticalities, since a procedure may call another but not use it to perform its most critical activities. The Hazops identifies what these critical activities are, so further analysis of the code can be used to refine the criticality assignment. Knowing the critical failure modes of the function also allows us to identify analyses and tests to determine if they are credible failure modes of the implementation, providing a reasoned basis for the next stage of the software qualification programme. A Safecomp 2002 paper on software criticality analysis is available for download.