Software must change to remain useful. Most software budget in large organizations goes to evolving existing systems, not building new ones.
- Business and technology changes drive evolution.
- Development and maintenance phases are increasingly blurred.
- Most systems evolve. Complete rewrites are rare.
Life-Cycle Stages
- Evolution
System in operational use. New requirements proposed and implemented. - Servicing
Only bug fixes and environment adaptations. No new functionality. - Phase-out
Software may still be used but no further changes are made.
Types of Maintenance
- Fault repair
Correcting deficiencies in how the system meets its requirements. - Adaptive maintenance
Changing the system to operate in a different environment. - Perfective maintenance
Modifying the system to satisfy new or changed requirements.
Reengineering
Restructures or rewrites part or all of a legacy system without changing its functionality.
- Applied after maintenance costs have risen.
- Uses automated tools.
- Lower risk and cost than full redevelopment.
Refactoring
Improves code structure continuously throughout development and evolution. Slows structural degradation without adding functionality.
Common bad smells that prompt refactoring:
- Duplicate code.
- Long methods.
- Switch statements.
- Data clumping.
- Speculative generality.
Legacy System Strategy
| Quality | Business Value | Strategy |
|---|---|---|
| Low | Low | Scrap the system |
| Low | High | Re-engineer or replace |
| High | Low | Replace with COTS or scrap |
| High | High | Continue with normal maintenance |