■ Software evolution 235
Chapter 9 ■ Software evolution 235
Software development does not stop when a system is delivered but continues throughout the lifetime of the system. After a system has been deployed, it inevitably has to change if it is to remain useful. Business changes and changes to user expec- tations generate new requirements for the existing software. Parts of the software may have to be modified to correct errors that are found in operation, to adapt it for changes to its hardware and software platform, and to improve its performance or other non-functional characteristics.
Software evolution is important because organizations have invested large amounts of money in their software and are now completely dependent on these sys- tems. Their systems are critical business assets and they have to invest in system change to maintain the value of these assets. Consequently, most large companies spend more on maintaining existing systems than on new systems development. Based on an informal industry poll, Erlikh (2000) suggests that 85–90% of organiza- tional software costs are evolution costs. Other surveys suggest that about two-thirds of software costs are evolution costs. For sure, the costs of software change are a large part of the IT budget for all companies.
Software evolution may be triggered by changing business requirements, by reports of software defects, or by changes to other systems in a software system’s environment. Hopkins and Jenkins (2008) have coined the term ‘brownfield software development’ to describe situations in which software systems have to be developed and managed in an environment where they are dependent on many other software systems.
Therefore, the evolution of a system can rarely be considered in isolation. Changes to the environment lead to system change that may then trigger further environmental changes. Of course, the fact that systems have to evolve in a ‘systems- rich’ environment often increases the difficulties and costs of evolution. As well as understanding and analyzing an impact of a proposed change on the system itself, you may also have to assess how this may affect other systems in the operational environment.
Useful software systems often have a very long lifetime. For example, large mili- tary or infrastructure systems, such as air traffic control systems, may have a lifetime of 30 years or more. Business systems are often more than 10 years old. Software cost a lot of money so a company has to use a software system for many years to get
a return on its investment. Obviously, the requirements of the installed systems change as the business and its environment change. Therefore, new releases of the systems, incorporating changes, and updates, are usually created at regular intervals.
You should, therefore, think of software engineering as a spiral process with requirements, design, implementation, and testing going on throughout the lifetime of the system (Figure 9.1). You start by creating release 1 of the system. Once deliv- ered, changes are proposed and the development of release 2 starts almost immedi- ately. In fact, the need for evolution may become obvious even before the system is deployed so that later releases of the software may be under development before the current version has been released.
This model of software evolution implies that a single organization is responsible for both the initial software development and the evolution of the software. Most
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.
Phaseout Figure 9.2 Evolution
Initial
Development and servicing
Evolution
Servicing
9.1 ■ Evolution processes 237
Change Identification Process
New System
Change Proposals
Figure 9.3 Change
Software Evolution
identification and
Process
evolution processes
At that stage, the software moves from evolution to servicing. During the servic- ing phase, the software is still useful and used but only small tactical changes are made to it. During this stage, the company is usually considering how the software can be replaced. In the final stage, phase-out, the software may still be used but no further changes are being implemented. Users have to work around any problems that they discover.