Software Design and Architecture Week 4
Software Design and Architecture Week 4
Week 4
Instructor: Ali Haider
Software change
► 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 organizational software costs
are evolution costs.
► Other surveys suggest that about two-thirds of software costs are evolution costs.
► Organizations have huge investments in their software systems - they are critical business assets.
► To maintain the value of these assets to the business, they must be changed and updated.
► The majority of the software budget in large companies is devoted to changing and evolving existing
software rather than developing new software.
► Evolution
► The stage in a software system’s life cycle where it is in operational use and is evolving
as new requirements are proposed and implemented in the system.
► Servicing
► At this stage, the software remains useful but the only changes made are those required to keep it
operational i.e. bug fixes and changes to reflect changes in the software’s environment. No new
functionality is added.
► Phase-out
► The software may still be used but no further changes are made to it.
► Iteration of the development process where the revisions to the system are designed,
implemented and tested.
► A critical difference is that the first stage of change implementation may involve
program understanding, especially if the original system developers are not
responsible for the change implementation.
► During the program understanding phase, you have to understand how the program is
structured, how it delivers functionality and how the proposed change might affect the
program.
► Urgent changes may have to be implemented without going through all stages of the
software engineering process
► If a serious system fault has to be repaired to allow normal operation to continue;
► If changes to the system’s environment (e.g. an OS upgrade)
► have unexpected effects;
► If there are business changes that require a very rapid response (e.g. the release of a
competing product).
► Agile methods are based on incremental development so the transition from development
to evolution is a seamless one.
► Evolution is simply a continuation of the development process based on frequent system
releases.
► Automated regression testing is particularly valuable when changes are made to a
system.
►Changes may be expressed as additional user stories.
► Where the development team have used an agile approach but the evolution
team is unfamiliar with agile methods and prefer a plan-based approach.
► The evolution team may expect detailed documentation to support evolution and this is not
produced in agile processes.
► Where a plan-based approach has been used for development but the evolution
team prefer to use agile methods.
► The evolution team may have to start from scratch developing automated tests and
the code in the system may not have been refactored and simplified as is expected in
agile development.