The 4 Types of Software Maintenance
In this post we are continuing our deeper dive into the questions that we get about software maintenance. In our previous posts we have covered some of the basics of the subject in our “What is software maintenance?” and “Why is software maintenance important?”.
In this post we are going to look at the types of software maintenance which are:
Bug and error fixing maintenance
Maintenance based on changes to the development environment
Evolutionary changes based on changing requirements of the users of the software
Proactive maintenance done to improve the robustness of the software.
This is what most people think of when they think of software maintenance. Corrective maintenance is the process of fixing faults and errors (bugs) in the code as they are found by users in their use of the software. It is a reactive maintenance in that the bugs are reported, replicated and then fixed.
Why do they occur? In reality it boils down to human error which is almost impossible to eliminate and can only be minimised. For example, following best programming practices minimises this type of maintenance and also makes fixing the bugs an easier process.
The software you use is part of a much bigger environment which is constantly changing. The following are some of the major moving parts.
Over time both the hardware that the software runs on and the hardware that users use to interact with the software changes. This is normally quite a slow moving change to the environment.
The operating system will have frequent minor updates as part of its maintenance program. Major updates (typically requiring more major adaptive maintenance) will also occur less frequently.
Nearly all modern software will use a database for long term storage of data.
For example, we build a lot of our bespoke software on the .Net framework. These are constantly being updated. This page shows how often the .Net core framework has had major releases since version 1 in 2016.
Your actual software will have libraries that it relies on that will have their own release schedule.
How much of the development stack you control will define how much control of these updates you have. Even if you controlled everything in the stack it would not be very good practice to do no updates. Adaptive maintenance is the maintenance required to keep your software running as it should as the environment changes.
This type of maintenance could easily just be defined as bespoke development. They are not bugs just small features and tweaks to features that make the software better. Users will often confuse something that doesn’t work in the way they think it should but is working as it was designed to work as a bug. This “looks like but is not a bug” would also fall under category
Perfective maintenance also covers one of the most forgotten parts of maintenance. Removing features that are no longer used. Keeping your software as simple as it can be to meet your requirements reduces nearly all types of maintenance requirements.
Preventative maintenance is proactive maintenance in that the goal is to reduce the requirements for corrective maintenance before it is required. It can be for known issues. For example, you might build your application to be able to deal with 100 document uploads an hour and before you hit that limit you do the required work to handle 1000 document uploads an hour.
It can be on a specific part of the software. This is often done when you are working on part of the code. It is good practice to look at the current code and optimise and refactor to reduce complexity and therefore the chance of a bug.
It can also be by improving and increasing the automated test coverage of your software, increasing the chances of picking up bugs whilst testing before they make it to live code.
Finally, as best practice changes it is always a good idea to implement the changes required to your software.
Regular software maintenance is a vital part of the software life cycle and will reduce costs and increase usability over time. Full Metal are experts in all forms of software maintenance and if you don’t have a regular maintenance service in place then please get in touch so that we can access how we can make sure your software is running like clockwork.