Page 283 -
P. 283
266 Chapter 10 Sociotechnical systems
2. You understand how faults and failures in the non-software layers of the systems
stack may affect the software. You may also consider how checks may be built
into the software to help detect these failures, and how support can be provided
for recovering from failure.
As software is inherently flexible, unexpected system problems are often left to
software engineers to solve. Say a radar installation has been sited so that ghosting of
the radar image occurs. It is impractical to move the radar to a site with less interfer-
ence, so the systems engineers have to find another way of removing this ghosting.
Their solution may be to enhance the image-processing capabilities of the software to
remove the ghost images. This may slow down the software so that its performance
becomes unacceptable. The problem may then be characterized as a ‘software failure’,
whereas, in fact, it is a failure in the design process for the system as a whole.
This sort of situation, in which software engineers are left with the problem of
enhancing software capabilities without increasing hardware costs, is very common.
Many so-called software failures are not a consequence of inherent software prob-
lems but rather are the result of trying to change the software to accommodate mod-
ified system engineering requirements. A good example of this was the failure of the
Denver airport baggage system (Swartz, 1996), where the controlling software was
expected to deal with limitations of the equipment used.
Systems engineering (Stevens et al., 1998; Thayer, 2002; Thomé, 1993; White
et al., 1993) is the process of designing entire systems—not just the software in these
systems. Software is the controlling and integrating element in these systems and
software engineering costs are often the main cost component in the overall system
costs. As a software engineer, it helps if you have a broader awareness of how soft-
ware interacts with other hardware and software systems, and how it is supposed to
be used. This knowledge helps you understand the limits of software, to design bet-
ter software, and to participate in a systems engineering group.
10.1 Complex systems
The term ‘system’ is one that is universally used. We talk about computer systems, oper-
ating systems, payment systems, the education system, the system of government, and so
on. These are all obviously quite different uses of the word ‘system’, although they share
the characteristic that, somehow, the system is more than simply the sum of its parts.
Abstract systems, such as the system of government, are outside the scope of this
book. Rather, I focus on systems that include computers and that have some specific
purpose such as to enable communication, support navigation, or compute salaries.
A useful working definition of these types of systems is as follows:
A system is a purposeful collection of interrelated components, of different
kinds, which work together to achieve some objective.
This general definition embraces a vast range of systems. For example, a simple
system, such as laser pointer, may include a few hardware components plus a small