Software Evolution

2 min read Updated Mon Jun 08 2026 01:02:45 GMT+0000 (Coordinated Universal Time)

Software must change to remain useful. The majority of software budget in large companies is devoted to evolving existing software, not developing new software.

  • Business and technology changes drive evolution.
  • Development and maintenance are increasingly blurred.
  • Most systems evolve rather than being completely new.

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.

Lehman’s Laws

LawDescription
Continuing ChangeA program in real-world use must change or become progressively less useful.
Increasing ComplexityAs a program evolves, its structure becomes more complex. Extra resources needed to preserve simplicity.
Large Program EvolutionProgram evolution is self-regulating: size, release intervals, and errors are approximately invariant per release.
Organizational StabilityDevelopment rate is approximately constant over lifetime, independent of resources devoted.
Conservation of FamiliarityIncremental change in each release is approximately constant over lifetime.
Continuing GrowthFunctionality must continually increase to maintain user satisfaction.
Declining QualityQuality declines unless the system is modified to reflect changes in the operational environment.
Feedback SystemEvolution processes are multiagent, multiloop feedback systems.

Reengineering

Re-structuring or rewriting 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

Continuous improvement 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

QualityBusiness ValueStrategy
LowLowScrap the system
LowHighRe-engineer or replace
HighLowReplace with COTS or scrap
HighHighContinue with normal maintenance
Was this helpful?