Nuances of Software Maintenance
The life of your software does not end when it finally launches. In reality, its life has just begun.
Software is always evolving and it is never finished as long as it is used; partly to accommodate for the ever changing world we live in. The evolution of your software might be motivated by a variety of reasons; to keep the software up and running, to upgrade to the latest release, enhance features or to rework the system for future maintainability. No matter the motivation, software change is vital for the evolution and success of it. Therefore, software will have to undergo changes, and understanding the different types of changes your software can go through is important to realize that software maintenance is more than just bug fixing. In fact, a study suggests that over 80% of software change is attributed to non bug related changes.
There are four categories of software change:
Corrective change, most commonly referred to as “bugs,” is the most typical change associated with maintenance work. Corrective changes address errors and faults in your software that could affect various areas of your software; design, logic or code. Most commonly, these changes are sprung by bug reports created by users. It is important to note that sometimes problem reports submitted by users are actually enhancements of the system not bugs.
Adaptive change is triggered by changes in the environment your software lives in. An adaptive change can be triggered by changes to the operating system, hardware, software dependencies and even organizational business rules and policies. These modifications to the environment can trigger changes within other parts of your software. For example, updating the server, compilers, etc or modifications to shipping carriers and payment processors can affect functionality in your software.
Perfective changes refers to the evolution of requirements and features in your existing system. As your software gets exposed to users they will think of different ways to expand the system or suggest new features that they would like to see as part of the software, which in turn can become future enhancements to the system. Perfective changes also includes removing features from a system that are not effective and functional to the end goal of the system. Surprisingly, 50-55% of most maintenance work is attributed to perfective changes.
Preventive changes refer to changes made to increase the understanding and maintainability of your software in the long run. Preventive changes are focused in decreasing the deterioration of your software in the long run. Restructuring, optimizing code and updating documentation are common preventive changes. Executing preventive changes reduces the amount of unpredictable effects a software can have in the long term and helps it become scalable, stable, understandable and maintainable.
Software Maintenance is an essential part of the software development life cycle; it is necessary for the success and evolution of your system. Maintenance on software goes beyond fixing “bugs”, which is one of the four types of software change. Updating the software environment, reducing its deterioration over time, and enhancing features to satisfy user needs are all examples of maintenance work. Next time you think about maintenance and software change keep in mind that it is much more than “bug” fixing.