A Software Maintenance Foursome
These days it’s rare to build a system from scratch. Software maintenance gets more important every day. Let’s take time to talk about the different types of software maintenance. The types of Corrective and Preventive Maintenance are for corrections on the software. Adaptive and Perfective Maintenance are the types for Enhancements on the software.
Corrective Maintenance is the easiest one to explain. This type of maintenance is about fixing defects. But what are defects?
Depending who you ask you get one of the following answers:
The software does something else that I want the software to be doing.
The ITIL Service Desk:
A registered and open problem in our ITSD Tool connected to incidents registered by one or more users.
A defect is a condition in a software product, which does not meet a software requirement (as stated in the requirement specifications) or end-user expectations (which may not be specified but are reasonable). In other words, a defect is an error in coding or logic that causes a program to malfunction or to produce incorrect/unexpected results.
The Software Architect:
A defect is an error in the software design documentation, the software architecture or code.
Defect? It works on my machine!
So what we can say is: Corrective Maintenance is change the software in such a way it meets customer functional and non-functional requirements and is documented accordingly. So the disrupted service to the end users is restored.
Preventive Maintenance is the most optimal kind of maintenance in case of correcting behaviour of software. The goal is to prevent any disturbance with the live system.
The easiest is to monitor a system for resource usage like bandwidth, CPU or memory. Other performance data that the system generates can be used too. Any abnormal activity can be analysed and adapted and rolled out before it becomes a real problem with disrupted service to the end-users.
The goal of Adaptive Maintenance is changing the software in such a way the software meets the new requirements so it can be used in the future. These are change requests from the customer, but also change in architecture as the environment of the software changes.
Perfective Maintenance is interesting type of maintenance. The official ISO 14764 defines Perfective Maintenance as follows: “the modification of a software product after delivery to detect and correct latent faults in the software product before they are manifested as failures”. This is very close to Preventive Maintenance.
In my opinion Perfective Maintenance is perfecting the software after earlier versions are taken into production. This contains resolving Technical Debt, optimising performance, improve the quality of the software or clean up code due old functionality is no longer needed.
In a further posts I’d like to talk about planning / road mapping and how the types will help you prioritising the needed changes. If you have questions or comments, please let me know!