Metrics Suite
DV8 provides a state-of-the-art maintainability metrics suite, including the following metrics:
Decoupling Level (DL) [6] measures how well a design is decoupled into modules based on the Design Rule Hierarchy (DRH) clustering. If a module influences all other files directly or indirectly in lower layers, its DL is 0—this is the worst case where a system's files are fully connected. And if a system's files had no dependencies on each other, its DL would be 1. All real systems fall somewhere within this range. The more files a given file influences in lower layers, the lower its DL. The larger a module, the more likely it will influence more files in the lower layers, hence the lower its DL. Conversely, the more files in a lower layer are independent of files in the upper layers, the higher the DL.
Propagation Cost (PC) [6] was defined by MacCormack et al. PC is calculated based on a DSM representation of a system's dependencies and aims to measure how tightly coupled a system is. Given a DSM of a project's files and their dependencies, the algorithm first calculates its transitive closure to add indirect dependencies to the DSM until no more can be added. Given the final DSM with all direct and indirect dependencies, PC is calculated as the number of non-empty cells divided by the total number of cells. For example, the PCs of the three DSMs in Figure 1 are 25%, 37%, and 51%, respectively. The lower the PC, the less coupled the system.
The limitation of PC is that it is sensitive to the DSM's size: the greater the number of files, the smaller the PC. For example, from the 46 open-source projects with more than 1000 files we studied, 70% have PCs lower than 20%. However, for the other 62 projects with less than 1000 files, about 48% of them have PCs lowers than 20%. More importantly, a design can change drastically without significantly changing its PC.
Independence level [IL] [10] was proposed by our research group. Based on design rule theory [5], the more independent modules there are in a system, the higher its option value. We thus proposed Independence Level (IL) to measure the portion of a system that can be decoupled into independent modules within the last layer of its DRH. For example, the IL in the DSM of Figure 1a is 0.75 because 12 out of the 16 files are in the last layer.
The limitation with IL is that it doesn't consider the modules in the top layers of a DRH, nor does it consider its size. It is observed that there are cases where the lowest layer contained very large modules. Even though the IL appeared to be high in these cases, the system was not well modularized. In other cases, we observed that even though the number of files decoupled in the last layer was not large, the upper layers' modules had few dependents. In this case, a system may not experience maintenance problems, despite its low IL.
The Decoupling Level metric we propose here improves on the IL metric.
Please refer to the Measure Modularity section that explains how to use DV8 to assess software using this metrics suite.