Given the diverse software development ecosystem where each software product has different characteristics and scope, what is actually maintainability and how can we measure it?
Based on the quality standard ISO/IEC 25010:2011, maintainability is defined as "the degree of effectiveness and efficiency by which a product or system can be modified by the intended maintainers".
The importance of maintainability as a software quality attribute is indicated by Robert L. Glass, who argues that maintaining software consumes about 40% to 80% of software costs. As a result of the conclusion mentioned above, it is of vital importance to design and implement maintainable software that can be modified based on the always-changing needs of end-users while at the same time staying on time and on budget. But, given the diverse software development ecosystem where each software product has different characteristics and scope, what is actually maintainability, and how can we measure it?
The answer to this question relies on the power of metrics!
Assessing maintainability is a non-trivial task considering that there are numerous and diverse criteria that influence the maintenance effort required for a software project. The need for setting a common ground towards understanding maintainability has led to its standardization as a set of high-level characteristics. Going back to ISO/IEC 25010:2011, maintainability is a composition of five characteristics: Modularity, Reusability, Analyzability, Modifiability, and Testability.
- Modularity: The degree to which a piece of software is composed of discrete components, such that a change to one component has minimal impact on the others
- Reusability: The degree to which a software component can be used in more than one system
- Analyzability: The degree of effectiveness and efficiency with which it is possible to assess the impact of an intended change on a software project to one or more of its parts
- Modifiability: The degree of effectiveness with which a software project can be modified without introducing defects or degrading the existing quality
- Testability: The degree of effectiveness and efficiency with which test criteria can be established for a system and can be performed to determine whether those criteria have been met
But how can we measure such characteristics? The answer is simple and relies on software metrics. So, let’s think of an example. Assuming that we want to quantify modularity, various metrics provide us with valuable information regarding the coupling level of our source code. The more coupled our source code is, the less modularity we have achieved. Making use of different metrics that quantify additional properties (i.e. complexity, cohesion, documentation, size, etc…) enable us to set multiple hierarchical pipelines. These pipelines can be used as a way to quantify all characteristics related to maintainability and thus assess the extent to which a software component is maintainable.
Having discussed the benefits of monitoring quality along with using software metrics towards assessing software maintainability raises an important question. When should one check the software under development for maintainability or quality-related issues?
To my perspective, the answer is from day one. And the reason is simple… Non-maintainable software is not the outcome of a single change, but the consequence of a series of changes throughout the development process. To that end, monitoring software evolution from early development stages provides several benefits:
- Early Identification of Technical Debt: Identifying non-maintainable software at a late stage is both time and resources demanding, given that major refactoring is needed. Of course, this has a great impact on development costs. On the other hand, knowing your product’s characteristics from day one enables optimizing the effort put in quality-related improvements. Of course, long before it is too late!
- Enable Predictive Ability: Monitoring software evolution except for providing valuable feedback regarding the current state of the characteristics of the software project, also enables monitoring their trends. This fact offers the ability to predict problematic cases long before they occur and thus constitutes actionable feedback regarding the software parts that need better attention.
In the next to come,