ity, and (g) algorithm aspects. DO-178B
provides specifics for each of these topics. The “conformance to standards”
objective suggests that there are standards with which to conform. Indeed,
project planning documents will likely
include standards and development
guidelines for requirements, design
components, coding standards, test
development standards, and other aspects of software development. Having
these guidelines and standards documented provides a means for SQA to assess whether the applicable processes
are being followed and to demand corrective action if they are not.
The requirement development standards contain additional criteria. For
example, a requirement should have a
unique identifier so that it can be unambiguously referenced both in its review
and by other requirements or artifacts
through traceability. A requirement
should have some version identifier so
that a change can be recognized and impacted relationships can be assessed.
The requirement author must be identified or independence of review cannot
be guaranteed. The review of a requirement must identify the reviewer for the
same reason. A DO-178B objective often
generates a secondary group of implied
activities and objectives that must be
met to fulfill the original objective.
This might sound like an excessive
amount of work, and it certainly is a lot
of work to do correctly. The intent of
this system is to provide a set of solid
requirements with traceability between
those of the same level of abstraction
(where necessary) and between levels
of abstraction to ensure the absence of
unintended function. Only then can you
begin to assert the software is safe.
Waterfall
A software development process known
commonly as “the waterfall model” generally follows these steps: identify all the
requirements, complete the architecture and design documents, then write
the code. Virtually no system of significant size can be built this way. The guidance in DO-178B acknowledges this and
states the following in Section 3: “The
guidelines of this document do not prescribe a preferred software life cycle,
but describe the separate processes
that comprise most life cycles and the
interaction between them. The separa-
software should
do only what is
specified in the
requirements: no
more, no less. You
do not want to be
learning about
a hidden, extra
feature of the
software during
an emergency at
30,000 feet.
tion of the processes is not intended to
imply a structure for the organization(s)
that perform them. For each software
product, the software life cycle(s) is constructed that includes these processes.” Further, DO-178B Section 12. 1.4d
states, “Reverse engineering may be
used to regenerate software life cycle
data that is inadequate or missing in
satisfying the objectives of this document.” In short, it is important to meet
all the objectives specified by DO-178B,
but the order in which those objectives
are met is not dictated.
That said, the FAA had certain concerns about the practice of reverse engineering and commissioned George Romanski (Verocel, Inc.) and Mike De Walt
(then of Certification Services Inc.) to research the problem. (De Walt has since
returned to the FAA as chief scientific
and technical advisor for aircraft computer software.) The study, Reverse Engineering Software and Digital Systems,
determined that 68% of those surveyed
had used some sort of reverse engineering on a project. The report uncovered
a number of other interesting facts, but
the upshot for this discussion is that the
software development process need not
be “waterfall” to be successful.
2
Validation and Verification
Validation: “Are we building the right
product?” Verification: “Are we building
the product right?”
5 The FAA commissioned the reverse engineering study
because of the obvious concern that a
reverse engineering effort might simply
restate what the code was doing rather
than determine what the code should be
doing. Validation—determining if we
are building the right product—is still
an important component of the safety
process, and there are no shortcuts to
achieving this goal.
The reverse engineering study used
data provided by Verocel from 13 projects with a total of 250,000 e-LOC (
effective lines of code). (For C programs,
for example, an e-LOC excludes blank
lines, comment lines, lines with only a
single bracket, else, or other keyword.)
Problems reported within these projects were apportioned among the following categories: design error, comment error, documentation error,
error-handling problems, test errors,
structural coverage problems, modified
functionality, requirements errors, and