Software Reuse: Survey and Research Directions
Journal of Management Information Systems
Software reuse is the use of software resources from all stages of the software development process in new applications. Given the high cost and difficulty of developing high quality software, the idea of capitalizing on previous software investments is appealing. However, software reuse has not been as effective as expected and has not been very broadly or systematically used in industry. This paper surveys recent software reuse research using a framework that helps identify and organize the
... ny factors that must be considered to achieve the benefits of software reuse in practice. We argue that software reuse needs to be viewed in the context of a total systems approach that addresses a broad range of technical, economic, managerial, organizational and legal issues and conclude with a summary of the major research issues in each of these areas. KEY WORDS AND PHRASES: software reuse, reuse metrics, reuse process, reuse technologies. Center for Digital Economy Research Stem School of Business IVorking Paper IS-97-12 markets, and the pressure to cut costs. This makes the need for successful investments in IT more acute. Unfortunately, the process of software development is plagued by cost overruns, delayed schedules, unsatisfied requirements, and a shortage of competent software professionals. Software reuse refers to the use of previously developed software resources in new applications. Because fewer total lines of code need to be written, software reuse can increase productivity, reduce development costs, and minimize schedule overruns. Since reusable software resources should be rigorously tested and verified, reuse also has the potential to improve software quality, reliability, maintainability and portability. Typically, software reuse involves the reuse of portions of code (e.g., library subroutines) by other programmers in the same organization. In this paper, we are concerned with a broader concept of reuse in which all of the products of the software life cycle are reused by developers within the same as well as different organizations on a broad spectrum of development tasks and across a variety of software application domains. We refer to this as "widespread software reuse." Software reuse has been the subject of numerous articles and books includmg [8, 39, 48, 861. In addition, there are a number of reports of successful industry experience [35, 38, 53, 601. Despite these successes, software reuse has had limited acceptance in industry [l, 2 I]. Barriers to achieving the promise of s o h a r e reuse include the paucity of tools to help catalog, refine, and compose resources 130, 761, the lack of a forma1 representation for reusable software resources [12, 811, and the lack of managerial and organizational support 135,641. In this paper we survey existing research on software reuse using a framework that encompasses a broad range of technical and non-technical issues. The objective is to suggest research directions for future studies that will examine often-overlooked issues and have a cumulative impact on our understanding of software reuse. Our basic argument is that economic, technical, behavioral, and organizational issues must all be addressed if sofiware reuse programs are to be successful. A Framework for Software Reuse FRAMEWORKS CAN BE USED TO ORGANIZE the existing literature on software reuse, to evaluate trends, and to point to areas needing further study. A number of conceptual frameworks for research on software reuse have been proposed in the literature. These frameworks fall into two groups: one that emphasizes the hfferent types of reusable resource and another that focuses on the different technologies to achieve reuse. In the former group, Freeman  developed a framework based on three dimensions: the artifact being reused, the manner in which it is reused, and the factors needed to enable successful reuse. For the first dimension, five levels of reusable information were distinguished: code fragments, logical structure (process and data architectures), functional architecture (user-oriented specifications of functions performed), external knowledge (software development knowledge and application domain knowledge), and environmental knowledge (technology transfer and how software is utilized in the organization). Note Center for Digital Economy Research Stem School of Business IVorking Paper IS-97-12 the progression of resource types from concrete to abstract, from specific to general and from later stages of the life cycle to earlier stages. In the same vein, Isoda [it11 defines three types of software reuse based on the life-cycle stage of the resource: (1) final products such as program code, requirements specifications, design, and test studies, (2) process information such as design rationales and (3) application domain knowledge. Data, test cases, and documentation are additional types of reusable resource that are included in some frameworks  . Most existing frameworks belong to the second group listed above, i.e., they organize the discussion around the different techniques for achieving software reuse. Frameworks in this class, for example, BiggerstafT and Richter , usually distinguish two major approaches: composition technologies and generation technologies. Composition technologies involve the reuse of software builcfing blocks such as code fragments, subroutines and objects. Generation technologies involve the reuse of programming constructs via high level languages or application generators. Using a finer partitioning scheme based on the level of "abstraction," Krueger  divides the technologies of software reuse into eight categories: high-level languages, design and code scavenging, source code components, software schemes, application generators, very high-level languages, transformational systems, and software architectures. Each software reuse approach is characterized in terms of its reusable resources and the way they are abstracted, selected, specialized, and integrated into the target system.