To capitalize upon the benefits of software reuse, an efficient selection among candidate reusable assets should be performed in terms of functional fitness and adaptability. The reusability of assets is usually measured through reusability indices. However, these do not capture all facets of reusability, such as structural characteristics, external quality attributes, and documentation. In this paper, we propose a reusability index (REI) as a synthesis of various software metrics and evaluate its ability to quantify reuse, based on IEEE Standard on Software Metrics Validity. The proposed index is compared to existing ones through a case study on 80 reusable open-source assets. To illustrate the applicability of the proposed index we performed a pilot study, where real-world reuse decisions have been compared to decisions imposed by the use of metrics (including REI). The results of the study suggest that the proposed index presents the highest predictive and discriminative power; it is the most consistent in ranking reusable assets, and the most strongly correlated to their levels of reuse. The findings of the paper are discussed to understand the most important aspects in reusability assessment (interpretation of results) and interesting implications for research and practice are provided. 1
Keywords-reuseability; quality model; metrics; validation
I. INTRODUCTIONSoftware reuse is considered as a key solution to increase software development productivity and decrease the number of bugs [6], [24]. The process of software reuse entails the use of existing software assets to implement new software systems or extend existing ones [23]. Reuse can take place at multiple levels of granularity, ranging from reusing a few lines of code (usually through the whitebox reuse process) to reusing complete components / libraries (usually as black-box reuse). The process of reusing software assets consists of two major tasks: Reusable Asset Identification. The reuser has to identify an asset (i.e., a piece of source code such as method, class, package or a component / library), which implements the functionality that he/she wants to reuse. This task is challenging since the available amount of assets (either in-house or open source) that can be reused is vast, offering a large variety of candidates. In many cases, the candidate reusable assets are not well organized and documented. The assets that are identified as functionally fitting are then evaluated, based on some criteria, and one is selected for reuse.