Page 61 -
P. 61

44   Chapter 2   Software processes




                                        Define System   Assess Existing  Propose System     Modify
                                        Requirements       Systems         Changes         Systems


                                                        Existing                             New
                  Figure 2.8 System                     Systems                             System
                  evolution

                                       Change adds to the costs of software development because it usually means that
                                    work that has been completed has to be redone. This is called rework. For example, if
                                    the relationships between the requirements in a system have been analyzed and new
                                    requirements are then identified, some or all of the requirements analysis has to be
                                    repeated. It may then be necessary to redesign the system to deliver the new require-
                                    ments, change any programs that have been developed, and re-test the system.
                                       There are two related approaches that may be used to reduce the costs of rework:

                                    1.  Change avoidance, where the software process includes activities that can antic-
                                        ipate possible changes before significant rework is required. For example, a pro-
                                        totype system may be developed to show some key features of the system to
                                        customers. They can experiment with the prototype and refine their require-
                                        ments before committing to high software production costs.
                                    2.  Change tolerance, where the process is designed so that changes can be accom-
                                        modated at relatively low cost. This normally involves some form of incremen-
                                        tal development. Proposed changes may be implemented in increments that
                                        have not yet been developed. If this is impossible, then only a single increment
                                        (a small part of the system) may have to be altered to incorporate the change.

                                       In this section, I discuss two ways of coping with change and changing system
                                    requirements. These are:

                                    1.  System prototyping, where a version of the system or part of the system is developed
                                        quickly to check the customer’s requirements and the feasibility of some design
                                        decisions. This supports change avoidance as it allows users to experiment with the
                                        system before delivery and so refine their requirements. The number of require-
                                        ments change proposals made after delivery is therefore likely to be reduced.
                                    2.  Incremental delivery, where system increments are delivered to the customer for
                                        comment  and  experimentation.  This  supports  both  change  avoidance  and
                                        change tolerance. It avoids the premature commitment to requirements for the
                                        whole system and allows changes to be incorporated into later increments at rel-
                                        atively low cost.


                                       The notion of refactoring, namely improving the structure and organization of a
                                    program, is also an important mechanism that supports change tolerance. I discuss
                                    this in Chapter 3, which covers agile methods.
   56   57   58   59   60   61   62   63   64   65   66