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.).
   21   22   23   24   25   26   27   28   29   30   31