United States General Accounting Office Washington, D.C. 20548 Information Management and Technology Division B-251542 January 28, 1993 The Honorable John P. Murtha Chairman, Subcommittee on Defense Committee on Appropriations House of Representatives Dear Mr. Chairman: The Department of Defense (DOD) estimates that expenditures for developing and maintaining software for its weapons, command and control, and other automated information systems currently exceed $24 billion a year. In an attempt to better manage these costs and improve its ability to develop and maintain high quality software, Defense has initiated a comprehensive effort to incorporate software reuse practices into its software development efforts. Software reuseÑthe practice of developing new applications from existing softwareÑoffers the potential to greatly reduce the time, cost, and effort needed to develop and maintain high quality software. As requested by your office, this report provides background information on software reuse, including an overview of issues that can inhibit effective software reuse and information on Defense's strategy to implement a departmentwide software reuse program. Appendix I further details our objectives, scope, and methodology. Appendix II provides information on Defense's initiatives to incorporate software reuse into its software development process. Results in Brief Developing and maintaining software in organizations such as the Department of Defense is very costly. According to many experts in the software community, software reuse is a possible solution to reduce these costs, as well as to increase software productivity and reliability. Although these benefits and savings are compelling, achieving, them will require the resolution of significant technical, organizational, and legal issues. Even while proclaiming the potential of reuse, many software experts have questioned the maturity of software reuse. These experts indicate that methodologies to implement reuse have not been fully developed, tools to support a reuse process are lacking, and standards to guide critical software reuse activities have not been established. Page 1 GAO/lMTEC-93-16 Issues Facing Software Reuse B-251542 Beyond such technical difficulties, organizations also face numerous challenges to effectively implement and practice software reuse. An organization must make a significant commitment to reuse because fundamental changes in the organization's software development approach will be needed and significant up-front costs for training and tools will be required. Further, uncertainties in legal policies, such as liability and intellectual property rights that currently hinder software reuse, need to be addressed, and acquisition policies need to be modified to better promote reuse. Background Software reuse is the practice of using existing software components to develop new applications. Reusable software components can be executable programs, code segments, documentation, requirements, design and architectures, test data and test plans, or software tools. They may also be knowledge and information needed to understand, develop, use, or maintain the component. Figure 1 shows examples of the different types of reusable software components. Page 2 GAO/lMTEC-93-16 Issues Facing Software Reuse B-251542 Figure 1: Examples of Reusable Software Components Code | Executable | Documentation programs \ | / \ | / \ | / Software ------------ Reusable --------- Software tools Software requirements / Components / | \ Knowledge and / | \ Designs and experience | \ architectures | Test data and test plans There are two basic forms of software reuseÑopportunistic and systematic. Opportunistic reuse is practiced in an ad-hoc fashion during software development. In opportunistic reuse, new applications are developed from software that has been salvaged from existing systems and modified to meet the specific needs of that application. Systematic reuse is planned and integrated into a well-defined software development process. In systematic reuse, new applications are developed from software that has been designed and developed to be reused specifically for other similar applications.(1) (1) In systematic reuse, new reusable software is also created as a by- product of applications development. Page 3 GAO/lMTEC-93-16 Issues Facing Software Reuse B-251542 Software reuse can be practiced vertically or horizontally. Vertical reuse is the reuse of software components within a single domain.(2) For example, a software component that implements procedures to withdraw federal taxes from a paycheck can be reused by different accounting systems within the payroll application domain. Horizontal reuse, on the other hand, is the reuse of software components across different domains. For example, software components, such as sort and merge procedures, can be reused by systems in many application domains. Software Reuse Process The software reuse process consists of three stages: component creation, component management, and component utilization, as shown in figure 2. Figure 2: Conceptual Framework of the Software Reuse Process Software Reuse Process ----------- |Component| |Creation |--->-- Components --- ---------- | ^ | | v | -------------- Feedback ---<----<- | Component | --------> Components | | management | | | -------------- | ^ | | --------------- | | Component | |----- Feedback -----<-----------<----- | Utilization | --------------- | v Application software systems and other software-related products Source: DARPA (2) A domain is a family of related systems that exhibit common objects and operations. Page 4 GAO/lMTEC-93-16 Issues Facing Software Reuse B-251542 This framework, established by the Defense Advanced Research Projects Agency's (DARPA) Software Technology for Adaptable Reliable Systems (STARS) program, presents the flow of information within the software reuse process and its products. During component creation, domains where reuse is possible are identified and reusable software components are developed. Once components are developed, they are stored and managed in a software repository, which is a library that allows users to access, search, and retrieve the components. Key functions of component management include certifying, classifying, and cataloguing components, as well as configuration control of the software components as a result of software upgrades and maintenance. Figure 3 illustrates the basic functions of component management. Figure 3: Key Functions of Component Management Reusable Certify component for Classify component software ----> quality, functionality ----> according to its component and completeness characteristics | | | ----------------- V | | Catalogue component | Repository | <---- and any related | | information ----------------- ^ | | | | V Maintain component and control its configuration In component utilization, components in the repository are searched, evaluated, selected, and integrated into the software product under development. Components can be used to either develop application software systems or create new reusable components and software-related products. Potential Benefits of Software Reuse Systematic reuse is viewed as a possible means to reduce software development costs while improving software quality. According to a number of software experts, reuse has the potential to Page 5 GAO/lMTEC-93-16 Issues Facing Software Reuse B-251542 - increase productivity by reducing the time and effort needed to develop software, - increase reliability because systems will be developed with thoroughly tested and proven components, - reduce costs by sharing knowledge and practices needed to develop and maintain software, and - establish a more standard and consistent approach to software development and maintenance by using common components and procedures. As an example, the Software Engineering Laboratory (SEL) at the National Aeronautics and Space Administration's (NASA) Goddard Space Flight Center achieved significant benefits by implementing software reuse in the development of software products in its Flight Dynamics Division. In a 1991 study, SEL reported - a 35-percent reduction in effort needed to deliver a line of code (from .65 to .42 staff hours), - a 53-percent increase in daily productivity (from 12.4 to 19 lines of code per day), and - an 87-percent increase in quality (from 3.9 errors to .5 errors per thousand lines of delivered code).(3) While the results of the SEL study appear promising, experts caution that the benefits of software reuse are not easily or quickly realized. The potential impact of software reuse remains questionable because of technical, organizational, and legal issues that need to be addressed. Technical Issues Establishing a systematic software reuse program is difficult. Few organizationsÑin either the private or public sectorsÑ have been able to incorporate software reuse into their software development practices because the technical knowledge to develop and apply software reuse methodologies, standards, and tools is still evolving. Table 1 summarizes the technical barriers to software reuse discussed in the following sections. (3) Proceedings of the Sixteenth Annual NASA/Goddard Software Engineering Workshop: Experiments in Software Engineering Technology, Software Engineering Laboratory, December 1991. Page 6 GAO/lMTEC-93-16 Issues Facing Software Reuse B-251542 Table 1: Summary of Technical Issues Domain analysis -lack of standard methods to process information on domains -lack of standard methods to represent the outputs of domain analysis Classification of software components -no accepted standards to classify components -classification depends upon a domain analysis Interoperability of software repositories -lack of standards for interoperation of repositories Adaptation of software components -adaptation depends upon the availability of information on component -more required adaptation can offset the savings and benefits of software reuse Reuse of systems designs and architectures -designs and architectures are harder to represent because they are more abstract -lack of standards to represent designs and architectures -lack of tools to represent, develop, and maintain designs and architectures Software metrics -lack of standard metrics -inconsistent interpretation of metrics -collecting metrics is expensive and time-consuming Domain Analysis Domain analysis involves systematically gathering and representing information on software applications. Experts in the software community generally agree that domain analysis is at the "heart of reuse." Its purpose is to generalize common features in similar application areas, identify the common objects and operations m these areas, and define and describe their relationships. Once collected, the information can be used to create reusable software components that support these areas. For example, in an airline reservation system domain, common objects are flights and seats, while common operations include flight scheduling and seat assignments. These objects and operations are related in specific ways to the airline reservation system domain. As such, software components that support these objects and operations could be reused by developers of other airline reservation systems. Domain analysis is a complex process that involves acquiring and representing knowledge on specific domains. Information on the domain must be identified, compiled, analyzed, and represented in a format so that it can be reused. The domain analyst needs to not only identify the objects and operations and their relationships in the domain, but also be able to explicitly represent that information so others can easily understand and reuse it. Page 7 GAO/lMTEC-93-16 Issues Facing Software Reuse B-2C1642 However, standard methods to process and represent information on a domain are lacking. Current domain analysis methodologies, such as the Software Engineering Institute's Feature Oriented Domain Analysis (FODA) and Dr. Ruben Prieto-Diaz's Top-Down, Bottom-up Approach, are still evolving and thus do not completely address these functions.(4) Classification of Software Components Classification is a process of systematically grouping reusable software components stored in a software repository. A classification scheme for a software repository is analogous to the Dewey Decimal System for a library. Its purpose is to provide the basic organization of a repository so users can easily access, search, and retrieve components in the repository. Establishing a classification scheme is knowledge-intensive and time- consuming. It requires combining the knowledge inherent in the components of the repository with the knowledge about the application domain where the components are going to be used. Common characteristics of the components are then grouped and organized into a structure that can be easily understood by repository users. While automated tools exist to catalogue software components (store and retrieve components in a repository), the key difficulty in classification is how to organize the overall repository because there are no accepted standards for classifying components. Interoperability of Software Repositories Interoperability is the ability of two or more systems to exchange information- It is an important capability in instances where multiple repositories exist because it permits software repositories to share components, reduce the number of redundant components in the different repositories, and make components available to all repository users. Development is currently underway, for example, in DARPA's STARS program to establish an architectural framework for repository interoperability. However, standards for interoperability of software repositories, such as nomenclature, communication protocols, and component exchange formats, do not exist. Currently the Reuse Library Interoperability Group (RIG) is addressing standards for interoperability and plans to submit (4) For more information on FODA, contact Dr. Sholom Cohen, Software Engineering Institute, Carnegie Mellon University, Pittsburgh, Pa For more information on the Diaz model, contact Dr. Ruben Prieto-Diaz, Reuse Inc., Fairfax, VA Page 8 GAO/lMTEC-93-16 Issues Facing Software Reuse B-251542 proposals to standards organizations, such as the Institute of Electrical and Electronics Engineering.(5) Adaptation of Software Components Adaptation involves modifying a software component to make it reusable in different software applications. It requires the software developer to determine what interfaces are needed and then tailor the component and/or application to make them operate together. Since the current state-of-practice is mainly opportunistic, most of the benefits that can be gained from software reuse are highly dependent on effective adaptation methods. However, adaptation is a difficult process because the developer has to understand - how the component currently functions, - how the new application works, and - what modifications are needed to make the component work in the new application. Without this information, a developer cannot easily adapt the software component for reuse. Even with the information, the adaptation process can be labor-intensive, potentially offsetting time and cost savings promised from software reuse. Reuse of Systems Designs and Architectures Although the current state-of-practice of software reuse has been mainly limited to the reuse of code, experts believe that the reuse of other software products, such as systems designs and architectures, can further increase the benefits of software reuse. They call this "higher- level reuse" because it involves reusing products that are from software development phases that occur prior to (or higher than) the one in which code is written.(6) According to these experts, the reuse of higher- level components will yield greater benefits because designs and architectures - are more flexible than code because they are independent of language, hardware platforms, and implementation-specific details - represent application solutions rather than implementation solutions; and (5) RIG is a volunteer organization composed of members from government, academia, and private industry. Membership is open to any organization interested in the interoperability of government-sponsored reuse libraries. (6) In the traditional software development process, there are four successive phases: planning, design, coding and testing, and integration and testing. In the planning phase, requirements are set; during the design phase, designs and architectures are developed; in the coding and testing phase, code is written and tested; and in the integration and testing phase, the coded components are combined and tested as a whole. Page 9 GAO/IMTEC-93-16 Issues Facing Software Reuse B-251542 - can be used to automatically create lower-level components, such as code. However, formally representing systems designs and architectures in a reusable form is very difficult because they are not as tangible as code. Further, standards and tools to represent and develop systems designs and architectures are lacking. Software Metrics Software metrics are quantifiable measures that are used to assess the products and processes of software development. Such metrics may include measures of usefulness, cost, and quality that could be used to better manage software development programs. However, identifying and establishing metrics is difficult because standard methodologies do not exist to collect data for software development and products in general, or for reuse in particular. As such, - current metrics are inconsistent, - interpretation of metrics can vary from individual to individual, and - collecting metrics is a very expensive and time-consuming process. Without effective metrics, organizations cannot adequately determine the costs and benefits of incorporating software reuse into their software development processes. Organizational Issues Software reuse will not happen merely because the technical means for achieving it become available. Software experts told us that top management must be convinced to make a business decision to incorporate systematic reuse into the software development process. Further, project managers and software developers must be willing to make fundamental changes in the way they develop software. Otherwise, software reuse will remain at the opportunistic level, and the potentially greater benefits of systematic reuse will not be realized. Gaining Management Support and Commitment Experts have stated that for a software reuse program to be successful, top management must decide and commit to implementing a systematic reuse program throughout the organization. They noted that top management needs to - incorporate software reuse practices into the software development process, Page 10 GAO/lMTEC-93-16 Issues Facing Software Reuse B-251542 - train and educate employees on software reuse, - develop and provide tools to practice software reuse, and - allocate the proper funds and resources to support a reuse program. However, experts generally agree that overall such management support is lacking. For example, at a jointly sponsored workshop by the Software Productivity Consortium, the Microelectronics and Computer Technology Corporation, the Software Engineering Institute, and the Rocky Mountain Institute on Software Engineering, attendees unanimously agreed that management generally has a shortsighted view on software development and is often not willing to commit resources to acquire needed tools and training in software reuse technology. In addition, some experts believe that top management is hesitant to invest in software reuse because the benefits of software reuse are not quickly realized and are uncertain. To illustrate, some experts estimate that the savings from reusing a component will not be realized until that component has been reused at least three times and believe that it initially costs about 20 to 55 percent more to develop reusable software. Gaining Support of Project Another common organizational issue is the unwillingness of project Managers and Developers managers and software developers to develop and use reusable components. As noted above, developing reusable software is more costly and time-consuming. As such, project managers, who are often pushed by limited funds and tight schedules, have little incentive to allocate the additional time and resources needed to develop reusable software components. Additionally, software developers are often reluctant to accept and use reusable components for fear that the components will not be as efficient, effective, or reliable as the software they write. Further, using reusable software components requires that the components be understood and adapted to meet the specific needs of a software system before it can be integrated. In either case, the reluctance of software developers to use reusable software and the lack of incentives for program managers to develop reusable software components remain issues that need to be addressed. Legal Issues The software community s hope for widespread reuse also brings about a number of challenging legal issues. The Institute for Defense Analysis (IDA) Page 11 GAO/lMTEC-93-16 Issues Facing Software Reuse B-261642 recently published the proceedings of a 1990 workshop on legal issues, sponsored by the Strategic Defense Initiative Organization.(7) The workshop reached the following conclusions: - Large-scale software reuse will likely cause more complex and more frequent encounters with legal issues. - Large-scale reuse will require a national registry that tracks the source of original development and modifications for each component. - A mechanism is needed to reward developers who modify and add value to existing components, while still protecting the rights of the original developer. - It is not good policy and may conflict with federal law if the government assumes all legal liabilities associated with a reuse repository. - Software patents and licensing policies need to be addressed. Our discussions with reuse experts in the software community corroborated these concerns. Most believed that strategies are needed to address intellectual property rights, liability, and acquisition policies of reuse. Intellectual Property Rights Software is protected legally as intellectual property through laws that control its dissemination and use. These laws relate to the exclusive ownership of the idea, the form of expression of the idea, and the use of the idea and its expression. There are three basic methods to protect software: patents, copyrights, and trade secrets. Patents protect the rights to the idea itself, while copyrights protect the rights to the expression of the idea. Trade secret laws protect the rights to confidential business information.(8) However, in many cases laws are not clear about the enforcement of intellectual property rights. As such, a major challenge facing software reuse is to balance these rights between software suppliers, repositories, and users. Several approaches have been proposed by various members of the software community to address intellectual property rights. For example, one approach proposed having repositories acquire full rights to software components. However, questions were raised about a repository's ability (7) Proceedings of the Workshop on Legal Issues in Software Reuse (IDA Document D-1004), Institute for Defense Analysis, July 1991. (8) Patents and copyrights are governed by federal law. Trade secrets are governed by state laws that may vary from state to state. Page 12 GAO/IMTEC-93-16 Issues Facing Software Reuse B-251542 to motivate suppliers to do this because the component supplier will lose exclusive rights to commercially market the component. Another approach proposed having software suppliers license limited software rights to a repository. However, issues were raised that if rights are transferred through a licensing agreement, future users of the component would need to be protected from breaching license agreements. Further, repositories would need to track all uses of software components to ensure that royalties and service fees are compensated to the component supplier and that licensing agreements are enforced. If the repository is unable to track software components and enforce licensing agreements, suppliers could be discouraged from giving up partial software rights to the repository. Liability Liability, in the context of software, refers to the legal responsibility for harm attributable to software components. Liability may affect not only the supplier of the component, but also the repository and user. For example, software suppliers could be liable for submitting defective software components that fail to meet performance standards or cause a software system malfunction. Repositories could be liable for marketing and distributing defective components or not properly enforcing the rights to software components. Users could be liable for infringing the intellectual property rights attached to a software component. However, the subject of liability for software is fairly new to the law. As a consequence, there are still questions, such as whether software is a product or service, that have left some uncertainty about the nature of liability that may accompany software. For this reason, experts believe that organizations interested in reuse need to address liability issues, otherwise - suppliers may be reluctant to submit components for reuse, - repositories may limit the availability of components, and - users may be unwilling to use the components in the repository. Acquisition Policies Many in the software reuse community acknowledge that changes need to be made in federal acquisition policies of software systems before software reuse can be effective. There are concerns that if industry is not involved in these efforts, reuse goals will not be achieved. Some of the issues that have arisen include how reuse should be considered in the Page 13 GAO/lMTEC-93-16 Issues Facing Software Reuse B-251542 request for proposals process, what criteria to use to evaluate proposals, how costs of reuse will be evaluated and estimated, and what incentives are needed in solicitation documents to promote reuse. These concerns have prompted the actions of groups such as the Special Interest Group Ada and Institute for Defense Analysis, which sponsored a workshop to determine how and what to incorporate into the procurement process to encourage and promote reuse. As requested, we did not provide a draft of this report to the Department of Defense. Instead, we discussed the facts of this report with officials from the Office of the Director for Defense Information; the Defense Information Systems Agency's Center for Information Management; the Air Force, Army, and Navy; and with software experts in industry. These officials generally agreed with the facts as presented. We have incorporated their views in the report as appropriate. We conducted our review between April 1992 and December 1992, in accordance with generally accepted government auditing standards. As agreed with your office, unless you publicly announce the contents of this report earlier, we plan no further distribution until 30 days from the date of this letter. We will then send copies of this report to other interested committees; the Director for Defense Information; the Director for Defense Research and Engineering; and other interested parties. Copies will also be made available to others upon request. If you or your staff have any questions concerning this report, please contact me at (202) 512-6240. Other major contributors are listed in appendix III. Sincerely yours, Samuel W. Bowlin Director, Defense and Security Information Systems Page 14 GAO/lMTEC-93-16 Issues Facing Software Reuse Contents Letter Appendix I 18 Objectives, Scope, and Methodology Appendix II 19 Department of Defense Reuse Initiative Appendix III 21 Major Contributors to This Report Table Table 1: Summary of Technical Issues 7 Figures Figure 1: Examples of Reusable Software Components 3 Figure 2: Conceptual Framework of the Software Reuse Process 4 Figure 3: Key Functions of Component Management 5 Abbreviations ASDC3I Assistant Secretary of Defense for Command, Control, Communications and Intelligence CARDS Central Archive for Reusable Defense Software DARPA Defense Advanced Research Projects Agency DDRE Director for Defense Research and Engineering DISA Defense Information Systems Agency DLA Defense Logistics Agency DOD Department of Defense GAO General Accounting Office FODA Feature Oriented Domain Analysis IDA Institute for Defense Analysis IMTEC Information Management and Technology Division NASA National Aeronautics and Space Administration RIG Reuse Library Interoperability Group SEL Software Engineering Laboratory STARS Software Technology for Adaptable Reliable Systems Page 16 GAO/lMTEC-93-16 Issues Facing Software Reuse Appendix I Objectives, Scope, and Methodology On February 7, 1992, the Chairman of the Subcommittee on Defense, House Appropriations Committee, requested that we provide background information on software reuse, including an overview of issues that can inhibit effective software reuse, and information on Defense's strategy to implement a departmentwide software reuse program. To meet our objectives, we - met with reuse experts in private industry, government, and academia to discuss the concepts of reuse, including benefits and issues of effective reuse; - attended the 5th Annual Software Reuse Workshop in Palo Alto, Ca., and reviewed papers to identify the state of reuse; - observed and discussed reuse experiences with private industry, private organizations, and special interest groups; - met with Defense officials to identify roles, responsibilities, and strategies for Defense's departmentwide software reuse initiative; and - examined reuse activities and research and development efforts underway in Defense. We performed our work at the Office of the Director for Defense Information, Arlington, Va.; Center for Information Management, Arlington, Va.; Defense Advanced Research and Projects Agency, Arlington, Va.; Software Engineering Institute, Pittsburgh, Pa.; U.S. Army Software Reuse Center, Washington, D.C.; U.S. Navy Information Systems Management Center, Washington, D.C.; U.S. Air Force Systems and Software Design, Hanscom Air Force Base, Ma.; Defense Logistics Agency's Systems Automation Center, Columbus, Oh.; and National Aeronautics and Space Administration's Goddard Space Flight Center, Greenbelt, Md. We also visited the offices of International Business Machines Corporation in Gaithersburg, Md., Manassas, Va., Rockville, Md., and Owego, Ny; University of Maryland, College Park, Md.; Software Productivity Consortium, Herndon, Va.; Reuse, Inc. Fairfax, Va.; Raytheon Missile Systems Division, Bedford, Ma.; Mitsubishi Electric Research Laboratories, Cambridge, Ma.; Westinghouse Electric Corporation, Baltimore, Md.; Massachusetts Institute of Technology, Boston, Ma; and Hewlett-Packard, Palo Alto, Ca. Page 18 GAO/lMTEC-93-16 Issues Facing Software Reuse Appendix II Department of Defense Reuse Initiative Over the last few years, software reuse has gained increased attention throughout the Department of Defense as a way to reduce software costs and improve productivity and software quality. A draft of Defense's software technology strategy states that the greatest estimated Defense cost savings over the next 16 years will come from reusing software assets a savings of $11.3 billion in constant 1992 dollars by the year 2008. Other Defense documents note that the benefits of reuse go beyond cost savings to include substantial increases in productivity from avoidance of rework, and added software quality through the use of tested components. Responsibility for software within the Department of Defense is divided between the Director for Defense Research and Engineering (DDR&E), who is responsible for embedded systems and information technology research, and the Assistant Secretary of Defense for Command, Control, Communications and Intelligence (ASDC3I), who carries responsibility for information systems and command and control systems. The Defense Software Reuse Initiative A Memorandum of Agreement between ASDC3I and DDR&E, effective November 26, 1991, established a cooperative partnership for implementing software and other information technology initiatives for the Department of Defense. On the basis of this agreement, the Director for Defense Information proposed a Defense software reuse initiative to provide a "single, consistent departmentwide software reuse strategy, with associated policies, practices, approaches, and programs." The initiative sought to build partnerships among users of reusable components, suppliers of these components, and the research and development community. The Defense software reuse initiative is a voluntary and cooperative alliance of individual DOD reuse activities with active participation from the three major software reuse programs: Air Force's Central Archive for Reusable Defense Software (CARDS), DARPA's Software Technology for Adaptable Reliable Systems (STARS), and the Defense Information Systems Agency's (DISA) Software Reuse Program. It is guided by a software reuse executive steering committee representing the ASDC3I, DDR&E, Joint Staff, Army, Navy, Air Force, DISA, Defense Logistics Agency (DLA), Defense Intelligence Agency, and the National Security Agency. The steering committee reports to both ASDC3I and DDR&E, and is supported by working groups responsible for addressing technical and management issues. DISA's Center for Information (1) Draft of Department of Defense Software Technology Strategy, Director of Defense Research and Engineering, December 1991. Page l9 GAO/lMTEC-93-16 Issues Facing Software Reuse Appendix II Management is managing the initiative and providing a focal point for coordination. Initiative's Vision and Defense's software reuse initiative holds a vision, "to drive the DOD Strategy software community from its current 'reinvent the software cycle' to a process-driven, domain-specific, architecture-centric, library-based way of constructing software." The strategy for achieving this vision lies in systemizing the reuse process by identifying opportunities for reuse and establishing a process to capitalize on those opportunities. Defense details 10 elements of this strategy: - Specify the domains where reuse opportunities exist and identify criteria to prioritize, qualify, and select domains for application of reuse techniques. - Define the types of products suitable for reuse and develop criteria to validate these components for new applications. - Determine what ownership criteria pertain to these components and require conscious decisions regarding their ownership. - Modify the current acquisition process so reuse is integrated into each phase of the acquisition process and into the overall system/software life cycle. - Define models that may suggest novel strategies and require tailored acquisition approaches to support reuse, in order to guide business decisions. Establish procedures to collect metrics that (l) measure the payoff from the reuse initiative and (2) aid developers in the selection of reusable components. - Define standards for the various types of components that will permit their certification for reuse. - Pursue a technology-based investment strategy that identifies, tracks, and transitions appropriate reuse-oriented process and product technologies. - Conduct comprehensive training to ensure that practitioners and policymakers capitalize on the initiative. - Exploit near-term products and services that facilitate movement to a reuse-based paradigm. Page 20 GAO/lMTEC-93-16 Issues Facing Software Reuse Appendix III Major Contributors to This Report Information Management and Technology Division, Washington DC Frank W. Deffer, Assistant Director David Chao, Technical Adviser Joseph J.H. Cho, Evaluator-in-Charge Colleen M. Phillips, Senior Evaluator Wiley E. Poindexter,Jr., Senior Evaluator