Introduction to Software Maintenance
Understand the goals, types, processes, and best practices of software maintenance.
Summary
Read Summary
Flashcards
Save Flashcards
Quiz
Take Quiz
Quick Practice
What is the definition of software maintenance?
1 of 10
Summary
Software Maintenance Overview
Introduction
After software is deployed and put into production, it doesn't simply run unchanged. Software maintenance refers to all the activities performed after the system has been delivered and deployed to keep it working effectively. Understanding maintenance is crucial for software engineers because it represents the largest portion of a system's total cost and effort—often consuming the majority of resources over a software product's lifetime.
What is Software Maintenance and Why It Matters
Software maintenance is the set of activities performed to keep software useful, reliable, and efficient over time. The goal is straightforward: ensure that the software continues to serve its users well throughout its operational life.
Several key factors drive the need for ongoing maintenance:
Defects discovered after release: Users find problems that testing missed
New feature requests: After using the software, users request enhancements and additions
Environmental changes: Operating systems, hardware, libraries, and standards are constantly upgraded
Security threats: New vulnerabilities emerge and require updated protection
The Cost Reality of Maintenance
One of the most important concepts to understand is that most of a software system's total lifecycle cost is incurred during the maintenance phase, not during initial development.
As shown in the diagram, the Operations and maintenance phase accounts for approximately 67% of the total lifecycle cost. This contrasts sharply with development activities: requirements definition (3%), preliminary design (3%), detailed design (5%), implementation (7%), and testing (15%) combined only account for 33%. This means that investments in writing maintainable code during development pay enormous dividends later.
Four Types of Software Maintenance
Software maintenance activities fall into four distinct categories. It's important to understand these differences because each type requires different approaches and skills.
Corrective Maintenance
Corrective maintenance fixes defects discovered after the software is deployed. These are bugs that weren't found during testing or that appear only under specific conditions in production. Examples include:
Fixing a calculation error that only appears when processing certain data
Repairing a memory leak discovered by users after release
Correcting incorrect behavior in edge cases
Adaptive Maintenance
Adaptive maintenance modifies software to work with new technologies in the user's environment. The core functionality doesn't change—rather, the software is adapted to new platforms and standards. Examples include:
Updating code to run on a new version of the operating system
Modifying software to work with new hardware
Updating libraries to use newer versions
Updating a web application to support a new browser version or web standard
Think of adaptive maintenance as the software "keeping up" with its surroundings without gaining new capabilities.
Perfective Maintenance
Perfective maintenance improves the software based on user feedback. This includes both improving the user experience and extending functionality. Examples include:
Adding a new report feature users requested
Improving performance to make operations faster
Refactoring code to make it more readable and maintainable
Redesigning the user interface to be more intuitive
Perfective maintenance makes the software better from a user's perspective.
Preventive Maintenance
Preventive maintenance makes changes that reduce the likelihood of future problems. Rather than fixing existing issues or adding features, preventive maintenance improves the code's underlying structure and resilience. Examples include:
Refactoring poorly structured code to reduce technical debt
Adding logging and monitoring to simplify future troubleshooting
Updating security patches proactively
Improving error handling to prevent crashes
The key difference from perfective maintenance: preventive maintenance isn't driven by user requests or immediate problems. Instead, it's investment in the software's long-term health.
Maintenance Processes and Activities
To manage maintenance effectively, software organizations use several standard processes and activities:
Issue Tracking records all reported problems in a bug-tracking system. This creates a centralized record that helps prioritize work and track resolution status.
Effort Estimation determines how much work is required for each change. This is critical because maintenance resources are limited, and teams need to prioritize changes based on effort and impact.
Version Control manages code revisions and preserves the complete change history. This allows teams to track what changed, why it changed, and who made the change—essential for debugging and understanding how the system evolved.
Regression Testing verifies that modifications don't break existing functionality. When making changes, you must ensure that fixes or improvements don't inadvertently break features that already work.
Good Documentation and Design Practices simplify all maintenance activities. This includes:
Clear documentation describing system behavior, interfaces, and change procedures
Modular design that organizes code into independent components, limiting the scope of changes
Clear coding standards that define consistent styles and conventions, making code easier to understand
Best Practices for Reducing Maintenance Effort
Organizations can reduce maintenance costs significantly through proactive design and development practices:
Modular Design separates software into independent, self-contained units. When code is modular, a change needed in one component has minimal impact on others. This reduces testing requirements and the risk of introducing new bugs.
Regular Refactoring improves code structure and prevents technical debt from accumulating. Technical debt—poorly written or outdated code that's harder to maintain—grows over time. Regular refactoring prevents this buildup and keeps the codebase manageable.
Comprehensive Logging simplifies debugging and problem diagnosis. When something goes wrong in production, good logging provides detailed information about what happened, making it easier to identify and fix the root cause.
Prompt Security Patching prevents vulnerabilities from becoming exploitable problems. Security patches should be applied as soon as they're available to keep the system protected against known threats.
The underlying principle is simple: investing in code quality, maintainability, and documentation during development reduces the cost and difficulty of maintenance later. Given that maintenance consumes 67% of lifecycle costs, these investments have enormous returns.
Flashcards
What is the definition of software maintenance?
The set of activities performed after a system has been delivered and deployed.
What is the primary goal of software maintenance?
To keep the software useful, reliable, and efficient over time.
During which phase is most of a software system's total lifecycle cost incurred?
The maintenance phase.
What is the purpose of corrective maintenance?
To fix defects that were not discovered during testing or that arise after the software is in use.
What types of changes necessitate adaptive maintenance to ensure software continues to function?
New hardware
New operating systems
New libraries
New standards (e.g., updated browser versions)
What is the main goal of preventive maintenance?
To make changes that reduce the likelihood of future problems.
What is the purpose of effort estimation during the maintenance process?
To determine the amount of work required for each change.
What is the goal of regression testing after software modifications?
To verify that new modifications do not break existing functionality.
In the context of maintenance, what should good documentation describe?
System behavior, interfaces, and change procedures.
How does modular design facilitate easier software modification?
By organizing code into independent components to limit the impact of changes.
Quiz
Introduction to Software Maintenance Quiz Question 1: What is the main purpose of issue tracking in software maintenance?
- To record reported problems using a bug‑tracking system (correct)
- To estimate the effort required for changes
- To manage code revisions and history
- To verify new changes do not break existing functionality
Introduction to Software Maintenance Quiz Question 2: Which of the following is a common reason for performing software maintenance after a system has been deployed?
- Users discover defects that were not found during testing (correct)
- Developers need to learn a new programming language
- Project management wants to extend the schedule
- The software automatically updates itself
Introduction to Software Maintenance Quiz Question 3: How does adding comprehensive logging facilitate future maintenance activities?
- Simplifies debugging and problem diagnosis (correct)
- Prevents security vulnerabilities from arising
- Improves the execution speed of the software
- Eliminates the need for any further testing
Introduction to Software Maintenance Quiz Question 4: Which type of software maintenance involves modifying the software to work with new operating systems?
- Adaptive maintenance (correct)
- Corrective maintenance
- Perfective maintenance
- Preventive maintenance
Introduction to Software Maintenance Quiz Question 5: What does effort estimation determine in the context of software maintenance?
- The amount of work required for each change (correct)
- The total number of users affected by a change
- The frequency with which security patches must be applied
- The cost of acquiring new hardware
Introduction to Software Maintenance Quiz Question 6: Perfective maintenance that targets performance primarily seeks to achieve what?
- Increase the execution speed of the software (correct)
- Add new user interface themes
- Fix defects discovered after deployment
- Update the software to run on newer operating systems
Introduction to Software Maintenance Quiz Question 7: Clear coding standards are important in software maintenance because they:
- Define consistent coding styles and conventions (correct)
- Automatically generate test cases for new code
- Eliminate the need for version control
- Increase the runtime performance of the application
Introduction to Software Maintenance Quiz Question 8: What is the main purpose of preventive maintenance?
- Reduce the likelihood of future problems (correct)
- Fix defects discovered after release
- Add new features based on user requests
- Improve performance of existing functionality
Introduction to Software Maintenance Quiz Question 9: How does modular design affect software maintenance?
- It limits the impact of changes to isolated components (correct)
- It requires rewriting the entire codebase for any change
- It increases coupling between modules
- It eliminates the need for testing
What is the main purpose of issue tracking in software maintenance?
1 of 9
Key Concepts
Software Maintenance Types
Software maintenance
Corrective maintenance
Adaptive maintenance
Perfective maintenance
Preventive maintenance
Software Development Practices
Issue tracking
Effort estimation
Version control
Regression testing
Modular design
Definitions
Software maintenance
The set of activities performed after a system’s delivery to keep it useful, reliable, and efficient over time.
Corrective maintenance
The process of fixing defects discovered after software deployment that were not caught during testing.
Adaptive maintenance
Modifications made to software so it remains compatible with new hardware, operating systems, libraries, or standards.
Perfective maintenance
Enhancements that improve performance, usability, or add new functionality based on user feedback.
Preventive maintenance
Changes aimed at reducing future problems, such as refactoring, adding logging, and applying security patches.
Issue tracking
The systematic recording and management of reported problems using a bug‑tracking system.
Effort estimation
The practice of predicting the amount of work required to implement a software change.
Version control
A system for managing code revisions and preserving the history of changes.
Regression testing
Testing to verify that recent modifications have not introduced new defects into existing functionality.
Modular design
An architectural approach that organizes software into independent components to limit the impact of changes.