Page 29 -
P. 29
12 Chapter 1 Introduction
in a company, travel expense claims may be submitted through a web application but
processed in a batch application for monthly payment.
You use different software engineering techniques for each type of system
because the software has quite different characteristics. For example, an embedded
control system in an automobile is safety-critical and is burned into ROM when
installed in the vehicle. It is therefore very expensive to change. Such a system needs
very extensive verification and validation so that the chances of having to recall cars
after sale to fix software problems are minimized. User interaction is minimal (or
perhaps nonexistent) so there is no need to use a development process that relies on
user interface prototyping.
For a web-based system, an approach based on iterative development and delivery
may be appropriate, with the system being composed of reusable components.
However, such an approach may be impractical for a system of systems, where
detailed specifications of the system interactions have to be specified in advance so
that each system can be separately developed.
Nevertheless, there are software engineering fundamentals that apply to all types
of software system:
1. They should be developed using a managed and understood development
process. The organization developing the software should plan the development
process and have clear ideas of what will be produced and when it will be com-
pleted. Of course, different processes are used for different types of software.
2. Dependability and performance are important for all types of systems. Software
should behave as expected, without failures and should be available for use
when it is required. It should be safe in its operation and, as far as possible,
should be secure against external attack. The system should perform efficiently
and should not waste resources.
3. Understanding and managing the software specification and requirements (what
the software should do) are important. You have to know what different customers
and users of the system expect from it and you have to manage their expectations
so that a useful system can be delivered within budget and to schedule.
4. You should make as effective use as possible of existing resources. This means
that, where appropriate, you should reuse software that has already been devel-
oped rather than write new software.
These fundamental notions of process, dependability, requirements, management,
and reuse are important themes of this book. Different methods reflect them in dif-
ferent ways but they underlie all professional software development.
You should notice that these fundamentals do not cover implementation and pro-
gramming. I don’t cover specific programming techniques in this book because these
vary dramatically from one type of system to another. For example, a scripting lan-
guage such as Ruby is used for web-based system programming but would be com-
pletely inappropriate for embedded systems engineering.