4 Chapter 1 ■ Introduction
We can’t run the modern world without software. National infrastructures and utili-
ties are controlled by computer-based systems and most electrical products include a
computer and controlling software. Industrial manufacturing and distribution is
completely computerized, as is the financial system. Entertainment, including the
music industry, computer games, and film and television, is software intensive.
Therefore, software engineering is essential for the functioning of national and inter-
national societies.
Software systems are abstract and intangible. They are not constrained by the
properties of materials, governed by physical laws, or by manufacturing processes.
This simplifies software engineering, as there are no natural limits to the potential of
software. However, because of the lack of physical constraints, software systems can
quickly become extremely complex, difficult to understand, and expensive to change.
There are many different types of software systems, from simple embedded sys-
tems to complex, worldwide information systems. It is pointless to look for universal
notations, methods, or techniques for software engineering because different types
of software require different approaches. Developing an organizational information
system is completely different from developing a controller for a scientific instru-
ment. Neither of these systems has much in common with a graphics-intensive com-
puter game. All of these applications need software engineering; they do not all need
the same software engineering techniques.
There are still many reports of software projects going wrong and ‘software failures’.
Software engineering is criticized as inadequate for modern software development.
However, in my view, many of these so-called software failures are a consequence of
two factors:
1. Increasing demands As new software engineering techniques help us to build
larger, more complex systems, the demands change. Systems have to be built
and delivered more quickly; larger, even more complex systems are required;
systems have to have new capabilities that were previously thought to be impos-
sible. Existing software engineering methods cannot cope and new software
engineering techniques have to be developed to meet new these new demands.
2. Low expectations It is relatively easy to write computer programs without using
software engineering methods and techniques. Many companies have drifted
into software development as their products and services have evolved. They do
not use software engineering methods in their everyday work. Consequently,
their software is often more expensive and less reliable than it should be. We
need better software engineering education and training to address this problem.
Software engineers can be rightly proud of their achievements. Of course we still
have problems developing complex software but, without software engineering, we
would not have explored space, would not have the Internet or modern telecommuni-
cations. All forms of travel would be more dangerous and expensive. Software engi-
neering has contributed a great deal and I am convinced that its contributions in the
21st century will be even greater.