Evolution Processes • Legacy Systems • Software Maintenance
Topics Covered
Evolution Processes
Legacy Systems
Software Maintenance
Life-cycle vs Evolution
Evolution
"Small changes over many generations"
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
Performance or reliability may have to be improved
A key problem for all organizations is implementing and managing change to their existing software systems.
Importance of Evolution
Critical Business Assets: Organizations have huge investments in their software systems
Value Maintenance: Systems must be changed and updated to maintain business value
Budget Reality: The majority of software budget is devoted to changing and evolving existing software rather than developing new software
A Spiral Model of Development and Evolution
Specification
Implementation
Validation
Operation
Release 1
→
Release 2
→
Release 3
→
etc.
Evolution and Servicing
Software
Development
Software
Evolution
Software
Servicing
Software
Retirement
Time
Evolution and Servicing Stages
Evolution: New features or requirements are added to the system that results in a new version release.
Servicing: Only changes required to keep it operational (bug fixes, environmental changes). No new functionality is added.
Phase-out: The software may still be used but no further changes are made 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
Proposals for change are the driver for system evolution.
Change Identification and Evolution Process
Change identification process
Change proposals
Software evolution process
New system
The Software Evolution Process
Change Requests
→
Impact Analysis
→
Release Planning
→
Change Implementation
→
System Release
Release Planning Branches
Release Planning
Fault Repair
Critical fixes
Platform Adaptation
Environment changes
System Enhancement
New features
Change Implementation
Proposed Changes
→
Requirements Analysis
→
Requirements Updating
→
Software Development
Critical difference: The first stage may involve program understanding, especially if the original system developers are not responsible for the change implementation.
Urgent Change Requests
Urgent changes may bypass normal engineering process for:
Serious system faults requiring immediate repair
Environmental changes with unexpected effects (OS upgrades)
Business changes requiring rapid response (competing products)
The Emergency Repair Process
Change Requests
→
Analyze Source Code
→
Modify Source Code
→
Deliver Modified System
Bypasses normal validation and documentation processes
Agile Methods and Evolution
Seamless transition: From development to evolution based on incremental development
Continuous evolution: Simply a continuation of the development process
Automated regression testing: Particularly valuable when changes are made
User stories: Changes may be expressed as additional user stories
Handover Problems
Agile → Plan-based
Evolution team expects detailed documentation that agile processes don't produce
Plan-based → Agile
Evolution team must develop automated tests from scratch and deal with non-refactored code
Legacy Systems
Legacy systems are older systems that rely on languages and technology that are no longer used for new systems development.
May be dependent on older hardware (mainframes)
Associated legacy processes and procedures
Broader socio-technical systems including hardware, software, libraries, and business processes
Elements of a Legacy System
Application Software
Business policies and rules
Business processes
Support software
System hardware
Application data
Embeds knowledge of
Uses
Uses
Legacy System Layers
Business Processes
Application Software
Platform and Infrastructure Software
Hardware
Socio-technical System
Legacy System Replacement
Legacy system replacement is risky and expensive
Lack of complete system specification
Tight integration of system and business processes
Undocumented business rules embedded in the legacy system
New software development may be late and/or over budget
Why Legacy Systems are Expensive to Change
No consistent programming style
Obsolete programming languages with few skilled people
Inadequate system documentation
System structure degradation over time
Program optimizations make code hard to understand
Data errors, duplication and inconsistency
Legacy System Management Strategies
Scrap the system completely and modify business processes
Continue maintaining the system
Transform by re-engineering to improve maintainability
Replace with a new system
The strategy chosen should depend on system quality and business value.
Legacy System Categories
Business Value
System Quality
Recommended Action
Low
Low
SCRAP
Low
High
REPLACE with COTS
High
Low
RE-ENGINEER
High
High
MAINTAIN
Business Value Assessment
Assessment should take different viewpoints into account:
System end-users
Business customers
Line managers
IT managers
Senior managers
Interview different stakeholders and collate results
System Quality Assessment
Business Process Assessment: How well does the business process support current business goals?
Environment Assessment: How effective is the system's environment and how expensive is it to maintain?
Application Assessment: What is the quality of the application software system?
Software Maintenance
Modifying a program after it has been put into use.
The term is mostly used for changing custom software
Generic software products are said to evolve to create new versions
Does not normally involve major architectural changes
Changes implemented by modifying existing components and adding new ones
Types of Software Maintenance
Fault Repairs: Changing a system to fix bugs/vulnerabilities and correct deficiencies
Environmental Adaptation: Changing a system to operate in a different environment (computer, OS, etc.)
Functionality Addition/Modification: Modifying the system to satisfy new requirements
Maintenance Effort Distribution
Fault Repair (24%)
Environmental Adaptation (19%)
Functionality Addition/Modification (58%)
Maintenance Costs
Development
Initial Cost
Maintenance
2× to 100× Higher
Usually greater than development costs
Increases as software is maintained - structure degrades
Aging software can have high support costs
Maintenance Prediction
Predicting Maintainability
What parts will be most expensive to maintain?
What will be the lifetime maintenance costs?
How many change requests can be expected?
What parts are most likely to be affected by changes?
Process Metrics for Maintainability
Number of requests for corrective maintenance
Average time required for impact analysis
Average time taken to implement a change request
Number of outstanding change requests
Warning: If any or all of these metrics are increasing, this may indicate a decline in maintainability
Software Reengineering
Restructuring or rewriting part or all of a legacy system without changing its functionality.
Applicable where some but not all sub-systems require frequent maintenance
Goal: Make systems easier to maintain through restructuring and re-documentation
Benefits: Reduced risk and cost compared to complete replacement
Reengineering Approaches
Automated Program Restructuring
Automated Restructuring with Manual Changes
Program and Data Restructuring
Lower Cost
→
Higher Cost
Refactoring
The process of making improvements to a program to slow down degradation through change.
Think of refactoring as "preventative maintenance"
Involves improving structure, reducing complexity, making code easier to understand
Should not add functionality - concentrate on program improvement
Continuous process throughout development and evolution
'Bad Smells' in Program Code
Duplicate Code
Same code in multiple places
Long Methods
Methods that are too long
Switch Statements
Scattered case statements
Data Clumping
Same data groups repeated
Speculative Generality
Unnecessary future-proofing
Large Classes
Classes trying to do too much
Key Points
Software development and evolution can be thought of as an integrated, iterative process represented using a spiral model
For custom systems, maintenance costs usually exceed development costs
The process of software evolution is driven by requests for changes and includes impact analysis, release planning and implementation
Legacy systems are older software systems using obsolete technologies that remain useful for business
Key Points (continued)
It is often cheaper and less risky to maintain a legacy system than to develop a replacement
The business value and quality of legacy systems should be assessed to decide on replacement, transformation or maintenance
There are 3 types of maintenance: bug fixing, environmental adaptation, and implementing new requirements
Software re-engineering is concerned with restructuring and re-documenting to make systems easier to change
Refactoring is a form of preventative maintenance that preserves functionality