After many months of development, you and your team are finally ready to deliver the software to the customer. You think this is the end of the development cycle, but in reality, it is just the beginning. The reason is that after the software has been delivered, the maintenance stage starts. In many cases companies do not provide the same attention and importance to this stage as they do to other development stages; nevertheless, its importance cannot be ignored because 60% to 80% of the software developer's time is spent doing software maintenance activities .
Welcome to this new series. In this first part, I will discuss the concept of software maintenance. Specifically, what it is, why it is important, and its challenges. In the second part of the series, I will discuss the concept of software comprehension and its relationship to software maintenance. Let's get started.
What is Software Maintenance?
Software maintenance is an activity that takes place once the software is delivered to the customer. This phase is characterized by being slow and costly. As mentioned before, 60% to 80% of the developer's time takes place doing maintenance-related activities .
But what is the aim of doing software maintenance? The aim is to perform the following activities : 1. Corrective: Fixing bugs in the system. 2. Preventive: Creating a more robust system to avoid future problems. 3. Perfective: Adding features based on new user requirements. 4. Adaptive: Modifying the system to comply with new technologies or policies. Studies suggest that adaptive and perfective activities incur 75% of the maintenance costs, while corrective actions consume 21% . These findings indicate that new user requirements are the main reason for doing software maintenance.
Why is software maintenance important?
Software that successfully satisfies the needs of its customers will inevitably stimulate requests for changes and improvements. Therefore, it is essential for companies to quickly and reliably adapt their systems to address the new needs of the market. Failing to do so may result in loss of market opportunities.
From a financial perspective, software maintenance efforts have a high cost. Therefore, it is imperative for companies to plan and take this stage of development as serious as the earlier stages. Failing to reliably and effectively execute maintenance effort may result in taking too much time, and thus, spending too much money.
In essence, software maintenance is essential to ensure that software continues to satisfy customer's needs; i.e., remains relevant to the customer.
What are the Software Maintenance challenges?
As mentioned before, new user requirements highly motivate maintenance activities. Therefore, if engineers are capable of anticipating, at early stages of development, the changes that will be made to the system, such a system can be built in a way that allows for easy modification when needed. However, this is easier said than done: Customers frequently do not know what they want, their needs change over time, technology changes at a fast pace, and much more.
The second challenge is associated with the technologies used to build the software. The usage of the latest technologies and programming paradigms has many benefits but if not used with caution it could difficult the maintenance efforts. For example, the object-oriented paradigm was considered to be the solution to software maintenance. Although it has a lot of benefits, it has also introduced its set problems. For example, to ensure an object-oriented software is not hard to maintain, developers have to assure classes are not highly coupled and avoid creating deep levels of inheritance. Using new technologies and paradigms without taking into account their impact on the software, may result in increasing the maintenance costs.
The lifecycle of software does not end when it is shipped to the customer. After the software is shipped, the maintenance phase starts. Changes in the environment, new user requirements, new technologies, error correction, and internal quality improvement are some of the factors that motivate maintenance efforts. It is essential for companies to quickly and reliably adapt their systems to new user requirements to stay relevant. Finally, when using new technologies and paradigms, it is necessary to take into account the effect that their usage could have on the maintenance efforts.
To maintain a software system, it is crucial to comprehend such a system to a certain extent. Moreover, it is likely that at some point in your career you will be maintaining a system that you did not create. Therefore, how do you effectively do maintenance tasks on a system that is entirely unknown to you? How do you reliably maintain a highly sophisticated software that has no documentation and has low-internal quality? In the second part of this series, I will answer those questions by discussing the concept of software comprehension as well as software comprehension techniques.
If you enjoyed this article, please recommend and share. Don't forget to subscribe and follow me on Twitter to stay up-to-date with my latest posts. See you in part 2.
References Software Maintenance and Evolution: A Roadmap by K.H. Bennett and V.T. Rajlich.
How would you rate this article?