Page 253 -
P. 253

236   Chapter 9   Software evolution








                                                        Specification      Implementation

                                                                 Start
                                          etc.
                                                            Release 1
                                                         Operation           Validation

                                                            Release 2
                  Figure 9.1  A spiral                      Release 3
                  model of development
                  and evolution
                                    packaged software products are developed using this approach. For custom software,
                                    a different approach is commonly used. A software company develops software for a
                                    customer and the customer’s own development staff then take over the system. They
                                    are responsible for software evolution. Alternatively, the software customer might
                                    issue a separate contract to a different company for system support and evolution.
                                       In this case, there are likely to be discontinuities in the spiral process. Requirements
                                    and design documents may not be passed from one company to another. Companies
                                    may merge or reorganize and inherit software from other companies, and then find
                                    that this has to be changed. When the transition from development to evolution is not
                                    seamless, the process of changing the software after delivery is often called ‘soft-
                                    ware maintenance’. As I discuss later in this chapter, maintenance involves extra
                                    process activities, such as program understanding, in addition to the normal activi-
                                    ties of software development.
                                       Rajlich and Bennett (2000) proposed an alternative view of the software evolution
                                    life cycle, as shown in Figure 9.2. In this model, they distinguish between evolution
                                    and servicing. Evolution is the phase in which significant changes to the software
                                    architecture and functionality may be made. During servicing, the only changes that
                                    are made are relatively small, essential changes.
                                       During evolution, the software is used successfully and there is a constant stream
                                    of proposed requirements changes. However, as the software is modified, its struc-
                                    ture tends to degrade and changes become more and more expensive. This often hap-
                                    pens after a few years of use when other environmental changes, such as hardware
                                    and operating systems, are also often required. At some stage in the life cycle, the
                                    software reaches a transition point where significant changes, implementing new
                                    requirements, become less and less cost effective.


                                        Initial          Evolution         Servicing         Phaseout
                  Figure 9.2  Evolution  Development
                  and servicing
   248   249   250   251   252   253   254   255   256   257   258