Software maintenance is one of the integral phases of the software development cycle. It includes the activities required to effectively support operating the software in its various aspects and utilization cycles. Maintenance activities are performed competitively with other development activities even before the delivery of the software. Before delivery, all future maintenance activities are planned and the software is designed to ensure its maintainability. However, most of the effort is done after the software is delivered. These activities include all changes to the software that are made to ensure its value and quality.
Software maintenance classification
Successful software systems can be in use for many years with occasional changes and the introduction of new versions and releases. There are various reasons for software changes, such as changes in the business environment, user expectations, bug fixes, adapting to a new platform, improving performance, etc. One consequence of the continuity of changes is the constant increase in maintenance costs in absolute terms and relative relation to the total costs of investment in software, as shown in the following figure.
The results of various studies show that today 60% – 90% of total software costs are related to maintenance costs. This fact has a major impact on the distribution of jobs and the structure of the workforce in the industry. According to recent research, an average of 75% of software engineers work on maintenance tasks, along with working on normal development activities.
Due to their scope in the general software development cycle and different types of tasks, it is clear that there are different types of maintenance in terms of their purpose in ensuring the usefulness of the software in its operational use. In the previous article on software maintenance costs and best practices, we listed only two basic types of maintenance. However, there are also broader classifications that provide a more precise grouping of different jobs and maintenance tasks. The most accepted is the maintenance classification described in the ISO/IEC/IEEE 14764 standard, which lists the following types:
- Adaptive – Modification of a software product made after delivery to preserve the usability of the software product in a changed or changing environment.
- Corrective – Correcting observed errors, which may be errors in coding, design, or specification.
- Perfective – Covers post-delivery software modifications to improve performance or add new features.
- Preventive – Modification of a software product after delivery to identify and correct persistent/latent software errors before any damage is done to the system.
Although the definitions of these types are relatively clear, it is often difficult to determine which type of maintenance is involved when a maintenance request is received. For example, when software is adapted to a new operating environment, e.g. operating system or server platform, new functionality can be added to take advantage of the new environment. In such a case, it is about adaptive and perfective maintenance at the same time.
The classification of software maintenance is crucial as it provides guidelines for activities and responsibilities within the maintenance team. It also impacts maintenance costs, determining which costs are covered by the developer and which by the client. Additionally, a detailed sub-classification is necessary, especially for corrective maintenance, including the classification of software failures and defects using schemes such as the IEEE 1044-2009 Standard Classification for Software Anomalies.
Maintenance prediction and metrics
Maintenance prediction involves estimating the extent of changes in the software system and identifying the parts of the system that will be the most expensive to maintain. This prediction helps in estimating the total costs of maintaining the system over a certain period and provides a budget for software maintenance.
To perform maintenance prediction, it is essential to understand the connection between the system and its environment. Some systems have complex relationships with their environment, such as information systems involving different users with prescribed roles and procedures. Changes in the environment may require changes in the software system, as well. Additionally, it is important to identify the components most likely to need changes over time, as this assessment can be seen as an investment in improving such components to limit future maintenance costs.
The following process metrics related to system maintenance are used for maintenance prediction:
- Number of requests for corrective maintenance
- Average time needed to analyze the impact on the system
- Average time required to implement change requests
- Number of pending change requests.
By closely monitoring these metrics, we can gain a clear understanding of the system’s long-term sustainability. If any of these values show a significant increase within a specific time frame, it is a clear indication that the system’s sustainability is decreasing, and it may be necessary to initiate a system re-engineering process.
If multiple software installations are used by different customers, each metrics should be calculated twice. The first way is individually, once for each deployment/installation, following with the total average for each metrics.