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.
   24   25   26   27   28   29   30   31   32   33   34