Software Evolution
Chapter 9 - Software Evolution
This chapter discusses software evolution, acknowledging that software change is inevitable due to new requirements, business environment changes, error repairs, new equipment, and the need for improved system performance and reliability. A key challenge for organizations is managing these changes to existing software systems.
Importance of Evolution
- Organizations invest heavily in software systems, making them critical business assets.
- These assets must be updated to maintain their value.
- A significant portion of software budgets in large companies is allocated to evolving existing software rather than developing new software.
A Spiral Model of Development and Evolution
The software development and evolution process can be visualized as a spiral model, encompassing specification, implementation, validation, and operation, with iterative releases (Release 1, Release 2, Release 3, etc.).
Evolution and Servicing
The software lifecycle includes:
- Initial development
- Evolution: Operational use with new requirements proposed and implemented.
- Servicing: The software remains useful, but changes are limited to bug fixes and environmental adaptations without adding new functionality.
- Phase-out: The software is still used, but no further changes are made.
Evolution and Servicing in Detail
- Evolution: This is the stage where the software system is in operational use. During this stage, new requirements are proposed and implemented into the system, allowing it to adapt and improve over time.
- Servicing: In the servicing stage, the software continues to be useful. However, modifications are restricted to essential changes needed to keep the system operational. This includes bug fixes and adjustments to reflect changes in the software's environment, but it excludes the addition of new functionalities.
- Phase-Out: Ultimately, the software may still be utilized, but it reaches a point where no further changes or updates are applied to it.
Evolution Processes
Software evolution processes depend on:
- The type of software being maintained.
- The development processes used.
- The skills and experience of the people involved.
Change proposals drive system evolution and should be linked to affected components to estimate cost and impact. Change identification and evolution continue throughout the system lifetime.
The Software Evolution Process
The software evolution process involves:
- Change requests
- Impact analysis
- Release planning
- Change implementation
- System release
This process includes fault repair, platform adaptation, and system enhancement.
Urgent Change Requests
Urgent changes may bypass standard software engineering processes when:
- Serious system faults must be repaired to maintain normal operation.
- Changes to the system's environment (e.g., OS upgrade) have unexpected effects.
- Business changes require a rapid response (e.g., a competing product release).
Agile Methods and Evolution
Agile methods facilitate a seamless transition from development to evolution due to incremental development and frequent system releases.
- Evolution is a continuation of the development process.
- Automated regression testing is valuable for changes.
- Changes can be expressed as additional user stories.
Software Maintenance
Software maintenance involves modifying a program after it has been put into use. It is mostly used for custom software. Generic software products evolve to create new versions.
Maintenance typically does not involve major changes to the system's architecture but is implemented by modifying existing components and adding new ones.
Types of Maintenance
- Maintenance to repair software faults: Correcting deficiencies in how the system meets requirements.
- Maintenance to adapt software to a different operating environment: Changing the system to operate in a different environment (computer, OS, etc.) from its initial implementation.
- Maintenance to add to or modify the system's functionality: Modifying the system to satisfy new requirements.
Maintenance Costs
- Maintenance costs are usually greater than development costs (from 2 to 100 times depending on the application).
- Affected by both technical and non-technical factors.
- Costs increase as software is maintained because maintenance corrupts the software structure, making further maintenance more difficult.
- Aging software can have high support costs (e.g., old languages, compilers, etc.).
Development and Maintenance Costs
Development costs are incurred initially, while maintenance costs accumulate over time, often surpassing the initial development investment.
Maintenance Cost Factors
- Team stability: Maintenance costs are reduced if the same staff are involved over time.
- Contractual responsibility: Developers may lack contractual responsibility for maintenance, reducing the 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 degrades, making them harder to understand and change.