Page 26 -
P. 26
1.1 Professional software development 9
2. It is usually cheaper, in the long run, to use software engineering methods and
techniques for software systems rather than just write the programs as if it was a
personal programming project. For most types of systems, the majority of costs
are the costs of changing the software after it has gone into use.
The systematic approach that is used in software engineering is sometimes called
a software process. A software process is a sequence of activities that leads to the
production of a software product. There are four fundamental activities that are com-
mon to all software processes. These activities are:
1. Software specification, where customers and engineers define the software that
is to be produced and the constraints on its operation.
2. Software development, where the software is designed and programmed.
3. Software validation, where the software is checked to ensure that it is what the
customer requires.
4. Software evolution, where the software is modified to reflect changing customer
and market requirements.
Different types of systems need different development processes. For example,
real-time software in an aircraft has to be completely specified before development
begins. In e-commerce systems, the specification and the program are usually devel-
oped together. Consequently, these generic activities may be organized in different
ways and described at different levels of detail depending on the type of software
being developed. I describe software processes in more detail in Chapter 2.
Software engineering is related to both computer science and systems engineering:
1. Computer science is concerned with the theories and methods that underlie com-
puters and software systems, whereas software engineering is concerned with the
practical problems of producing software. Some knowledge of computer science
is essential for software engineers in the same way that some knowledge of
physics is essential for electrical engineers. Computer science theory, however, is
often most applicable to relatively small programs. Elegant theories of computer
science cannot always be applied to large, complex problems that require a soft-
ware solution.
2. System engineering is concerned with all aspects of the development and evo-
lution of complex systems where software plays a major role. System engineer-
ing is therefore concerned with hardware development, policy and process
design and system deployment, as well as software engineering. System engi-
neers are involved in specifying the system, defining its overall architecture,
and then integrating the different parts to create the finished system. They are
less concerned with the engineering of the system components (hardware,
software, etc.).