Importance of Software Evolution and Evolution processes - Agile methods and evolution


Software Evolution Overview

  • Software change
  • Importance of evaluation
  • Importance of evolution
  • Evolution processes
  • Change implementation
  • Urgent change requests
  • Agile methods and evolution
  • Types of maintenance
  • Modeling types in UML
  • Cost of maintenance
  • Maintenance cost factors
  • System re-engineering

1. Software change

Software change is inevitable
  • New requirements emerge when the software is used
  • The business environment changes
  • Errors must be repaired
  • New computers and equipment is added to the system
  • The performance or reliability of the system may have to be improved
A key problem for all organizations is implementing and managing change to their existing software systems.

2. Importance of evolution

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.

3. Evolution processes

4. Change implementation 

5. Urgent change requests

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 that disrupt normal operation.
  • If there are business changes that require a very rapid response (e.g. the release of a competing product).

6. Agile methods and evolution

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.

7. Types of Maintenance

  • Maintenance is modifying a program after it has been put into use.
  • Maintenance effort distribution is as follows.


The term is mostly used for changing custom software. Generic software products are said to evolve to create new versions.
Maintenance does not normally involve major changes to the system’s architecture.
Changes are implemented by modifying existing components and adding new components to the system

8. Cost of Maintenance

  • Usually greater than development costs.
  • Affected by both technical and non-technical factors.
  • Increases as the software are maintained.
  • Maintenance corrupts the software structure so makes further maintenance more difficult.

9. Maintenance Cost Factors

  • Team stability
  • Contractual responsibility
  • Staff skills
  • Program age and structure

Team stability

Maintenance costs are reduced if the same staff are involved with them for some time.

Contractual responsibility

The developers of a system may have no contractual responsibility for maintenance so there is no incentive to design for future change.

Staff skills

Maintenance staff are often inexperienced and have limited domain knowledge.

Program age and structure

As programs age, their structure is degraded and they become harder to understand and change

10. System re-engineering

  • Re-structuring or re-writing part or all of a legacy system without changing its functionality.
  • Applicable where some but not all subsystems of a larger system require frequent maintenance.
  • Re-engineering involves adding effort to make them easier to maintain. The system may be re-structured and re-documented.
There are several advantages of System re-engineering.
  • Reduced risk
  • Reduced cost

Reduced risk

There is a high risk in new software development. There may be development problems, staffing problems and specification problems.

Reduced cost

The cost of re-engineering is often significantly less than the costs of developing new software.


Comments