Lecture 15- Software Evolution
Lecture 15- Software Evolution
Software Evolution
Ayesha Kanwal
Software Evolution
Software development does not stop when a system is delivered
After a system has been deployed, it inevitably has to change if it is to
remain useful
Business changes and changes to user expectations 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
Or to improve its performance or other non-functional
characteristics.
Software Evolution is Costly!
Software evolution is important because organizations have invested large
amounts of money in their software
They are now completely dependent on these systems
Their systems are critical business assets
and they have to invest in system change to maintain the value of
these assets
What triggers Software Evolution?
Software evolution may be triggered:
When software defects are reported
Changing business requirements
Changes in other systems in a software system’s environment
Lifetime of Software Evolution
Useful software systems often have a very long lifetime.
For example, large military 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.
Evolution processes
Evolution Processes
Software evolution processes vary depending on:
The type of software being maintained
The development processes used in an organization
The skills of the people involved
System change proposals are the driver for system
evolution in all organizations
The process then iterates with a new set of changes proposed for the next
release.
Change requests
Change requests sometimes relate to system problems that have to be
tackled urgently. These urgent changes can arise for three reasons:
Failure
If a serious system fault occurs that has to be repaired to allow normal
operation to continue.
Ripples
If changes to the systems operating environment have unexpected
effects that disrupt normal operation
Business
If there are unanticipated changes to the business running the system,
such as the emergence of new competitors or the introduction of new
legislation that affects the system.
Change requests
In these cases, the need to make the change quickly means that you may
not be able to follow the formal change analysis process.
Rather than modify the requirements and design, you make an
emergency fix to the program to solve the immediate problem
However, the danger is that the requirements, the software design, and
the code become inconsistent.
Change requests
Agile methods and processes, may be used for program evolution as well
Evolution simply involves continuing the agile development process.
Change requests
However, problems may arise in situations in which there is a handover
from a development team to a separate team responsible for evolution.
There are two potentially problematic situations:
Fault repairs
Coding errors are usually relatively cheap to correct
Design errors are more expensive as they may involve rewriting
several program components
Requirements errors are the most expensive to repair because of the
extensive system redesign which may be necessary.
Software Maintenance
Environmental Adaptation
This type of maintenance is required when some aspect of the
system’s environment is changed such as:
The hardware
The platform operating system
Other support software
The application system must be modified to adapt it to cope with
these environmental changes
Software Maintenance
Functionality Addition
This type of maintenance is necessary when the system requirements
change in response to organizational or business change
The scale of the changes required to the software is often much
greater than for the other types of maintenance.
Software Maintenance
These types of maintenance are also generally recognized with different
names:
‘Corrective maintenance’ is universally used to refer to maintenance for
fault repair.
‘Adaptive maintenance’ means adapting to a new environment and
adapting the software to new requirements.
‘Perfective maintenance’ means perfecting the software by
implementing new requirements
It also means maintaining the functionality of the system by
improving its structure and its performance.
Software Maintenance
When you adapt the system to a new environment, you may add
functionality to take advantage of new environmental features.
Software faults are often exposed because users use the system in
unanticipated ways.
Changing the system to accommodate their way of working is the best
way to fix these faults.
Software Maintenance
It is usually cost effective to invest effort in designing and implementing a
system to reduce the costs of future changes.
Adding new functionality after delivery is expensive because you have to
spend time learning the system and analyzing the impact of the proposed
changes.
Therefore, work done during development to make the software easier
to understand and change is likely to reduce evolution costs.
Good software engineering techniques, such as precise specification,
the use of object-oriented development, and configuration
management, contribute to maintenance cost reduction.
Software Maintenance
It is usually more expensive to add functionality after a system is in
operation than it is to implement the same functionality during
development.
The reasons for this are:
Team stability
After a system has been delivered, it is normal for the development
team to be broken up and for people to work on new projects.
The new team or the individuals responsible for system maintenance
do not understand the system or the background to system design
decisions.
They need to spend time understanding the existing system before
implementing changes to it.
Software Maintenance
Poor development practice
The contract to maintain a system is usually separate from the system
development contract.
The maintenance contract may be given to a different company
rather than the original system developer.
This factor (along with the lack of team stability) means that there is
no incentive for a development team to write maintainable software.
If a development team can cut corners to save effort during
development it is worthwhile for them to do so
Even if this means that the software is more difficult to change in
the future.
Software Maintenance
Staff Skills
Maintenance staff are often relatively inexperienced and unfamiliar
with the application domain.
Maintenance has a poor image among software engineers.
It is seen as a less-skilled process than system development and is
often allocated to the most junior staff
Furthermore, old systems may be written in obsolete
programming languages.
The maintenance staff may not have much experience of
development in these languages and must learn these languages
to maintain the system.
Software Maintenance
Program age and structure
As changes are made to programs, their structure tends to degrade
Consequently, as programs age, they become harder to
understand and change.
Some systems have been developed without modern software
engineering techniques.
They may never have been well structured and were perhaps
optimized for efficiency rather than understandability.
System documentation may be lost or inconsistent.
Old systems may not have been subject to thorough configuration
management so time is often wasted finding the right versions of
system components to change.
Software Re-Engineering
Software Re-Engineering
The process of system evolution involves understanding the program that
has to be changed and then implementing these changes.
However, are difficult to understand and change.
The programs may have been optimized for performance or space
utilization at the expense of understandability,
Or the initial program structure may have been corrupted by a
series of changes
Software Re-Engineering
To make them easier to maintain, you can reengineer these systems to
improve their structure and understandability.
Reengineering may involve
Re-documenting the system
Refactoring the system architecture
Translating programs to a modern programming language
And modifying and updating the structure and values of the
system’s data.
The functionality of the software is not changed and, normally, you
should try to avoid making major changes to the system architecture.
Software Re-Engineering
There are two important benefits from reengineering rather than
replacement:
Reduced risk
There is a high risk in redeveloping business-critical software.
Errors may be made in the system specification or there may be
development problems.
Delays in introducing the new software may mean that business is
lost and extra costs are incurred.
Software Re-Engineering
Reduced cost
The cost of reengineering may be significantly less than the cost of
developing new software.
With modern software technology, the relative cost of
reimplementation is probably less than this but will still
considerably exceed the costs of reengineering
Reengineering Process Model