Software Reuse: Methods, Models, and Costs
Total Page:16
File Type:pdf, Size:1020Kb
SOFTWARE REUSE: METHODS, MODELS, AND COSTS Ronald J. Leach Copyright © 2011by Ronald J. Leach Leach, Ronald J. Software Reuse: Methods, Models, Costs/Ronald J. Leach p. cm. Includes bibliographical references ISBN: 1. Software (Computers) 2. Cost estimation (Computers) I. Title II. QA Books by Ronald J. Leach Using C in Software Design Advanced Topics in UNIX Object-Oriented Design and Programming in C++ Software Reuse: Methods, Models, Costs Software Engineering Why 2K? Relative Genealogy Genealogy for the Information Age Identity Theft in the Cyber Age Table of Contents To The Reader Preface Preface to the Electronic Edition CHAPTER 1 WHAT IS SOFTWARE REUSE? 1.1 Origins of Software Reuse 1.2 Reuse and the Software Life Cycle 1.3 Software Reuse, Rapid Prototyping, and Evolving Systems 1.4 Typical Duties of Members of a Reuse Team 1.5 Reengineering and Reuse 1.6 Library Issues 1.7 Potential Disadvantages of Reuse 1.8 Legal and Contractual Issues with Software Reuse 1.9 The Current Status of Software Reuse Summary Further Reading Exercises CHAPTER 2 TECHNIQUES 2.1 Domain Analysis 2.2 An Example - Domain Analysis of the Linux Operating System 2.3 Domain Analysis Revisited 2.4 Object-Oriented Approaches 2.5 Standard Interfaces 2.6 Designing for Reuse 2.7 Using Reuse to Drive Requirements Analysis 2.8 Metrics for Reuse Summary Further Reading Exercises CHAPTER 3 REUSE LIBRARIES 3.1 General Reuse Library Issues 3.2 Organizational Issues for Reuse Libraries 3.3 Managerial Issues for Reuse Libraries 3.4 Research Issues in Reuse Library Organization 3.5 Reuse Libraries for Ada Software 3.5.1 The Public Ada Library 3.5.2 The Ada Software Repository 3.5.3 The STARS and CARDS Programs 3.5.4 The Asset Program 3.5.5 Other Sources 3.6 Reuse Libraries for C++ Language Software 3.7 Reuse Libraries for C Language Software 3.8 Reuse Libraries for Higher Level Language Software Summary Further Reading Exercises CHAPTER 4 CERTIFICATION OF REUSABLE SOFTWARE COMPONENTS 4.1 The Need for Certification 4.2 The Difference Between Certification and Testing 4.3 Suggested Standards and Practices for Certification of Software Artifacts 4.3.1 Code Certification 4.3.2 Requirements Certification 4.3.3 Design Certification 4.3.4 Test Plan and Test Results Certification 4.3.5 Documentation Certification 4.3.6 System Certification 4.4 The Role of Metrics 4.5 An Overview of Software Reliability 4.6 Certification, Testing, and Reliability Modelling 4.7 Certification of Potentially Reusable Software Components is not Always Necessary_ Summary Further Reading Exercises CHAPTER 5 THE ECONOMICS OF SOFTWARE REUSE 5.1 Life Cycle Leverage 5.2 Cost Models for Reuse Using the Classic Waterfall Life Cycle 5.2.1 Reuse in the Requirements or Specification Phase 5.2.3 Reuse in the Design phase 5.2.3 Reuse in the Coding phase 5.2.4 Reuse in the Testing and Integration phase 5.2.5 Reuse in the Maintenance phase 5.3 A Cost Model for Reuse Using the Rapid Prototyping Model 5.4 A Cost Model for Reuse for a System Developed Using the Spiral Model 5.5 A Cost Model for Reuse for a System Using Only COTS 5.6 Other Reuse-Based Cost Estimation Models 5.7 Estimation of Other Resources in Reuse-based Environments 5.8 The Economic Reuse Quantity Summary Further Reading Exercises CHAPTER 6 REENGINEERING 6.1 Program Translation 6.2 An example of semantic reasoning in reengineering 6.3 Transitioning to an Object-Oriented System 6.4 Specifications for a File System Simulation 6.5 Procedurally-based System Design 6.6 Implementation Details for a Procedurally-based Disk Simulation 6.7 Source Code for Procedural System (Optional) 6.8 Reengineering a Procedurally-based System into an Object- Oriented One 6.9 An Object-Oriented Disk Simulation Program 6.10 Source Code for an Object-Oriented Solution 6.11 Comparison of Object-Oriented and Procedural Solutions Summary Further Reading Exercises CHAPTER 7 CASE STUDIES 7.1 Some Reuse Activities at NASA 7.1.1 Introduction 7.1.2 Methodology Used for the Collection of Metrics Data 7.1.3 Results 7.1.4 Recommendations 7.2 Some Reuse Activities at AT&T 7.3 Some Reuse Activities at Battelle Laboratory 7.4 Some Reuse Activities at Hewlett-Packard 7.5 A Hypothetical Failed Software Reuse Program Summary Further Reading Exercises CHAPTER 8 TOOLS FOR SOFTWARE REUSE 8.1 The InQuisiX System of Reuse Tools 8.2 A Simple Text-Based System 8.3 The AT&T BaseWorX Application Platform 8.4 A Knowledge-Based Tool for Reuse 8.5 Issues with Network-based Tools for Software Reuse Summary Further Reading Exercises REFERENCES Appendix 1 Metrics Appendix 2 Sources Appendix 3 Glossary Appendix 4 Suggested Term Projects Appendix 5 Checklist for Software Reuse in a Changing Environment INDEX To the Reader This book was originally published in 1997 by McGraw-Hill publishing company in New York. It has been out of print for several years. However, except for a few, easily spotted out-of-date references (such as one that describes floppy disks!) to specific software packages, and a few of the tools being superseded by newer versions and software packages, the basic ideas continue to be completely relevant to the needs of those who produce large software systems. In fact, the newest trend in software engineering in the defense arena is the development of what are called “systems of systems,” which cries out for systematic software reuse. In this troubled time period for the publishing industry, it makes little sense for an author to attempt to even consider publishing a book with a relatively small potential audience under the auspices of a major publisher. Instead of doing all the work for a second edition, with the strong probability that this effort will be for naught, it made more sense to simply reissue the book electronically. I hope this book is useful to you. Preface The primary intended audience for this book is software engineers and managers faced with practical problems in developing software, especially schedule, cost, and quality pressures. The book can be used as a secondary reference for additional reading in an upper-division or graduate-level software engineering or software engineering economics course. It can also be used as the primary text in an advanced software engineering course based primarily on software reuse. Both professionals and students can read the book profitably. The typical reader of this book will have had previous exposure to the development and maintenance of software systems that are too complex to be designed and implemented by a single person. Software reuse continues to be one of the hottest topics in software engineering. For the past few years, nearly every conference with a heavy focus on software engineering has included at least one paper session, panel discussion, or invited talk on some aspect of software reuse. Many larger conferences have tutorial sessions on software reuse. Software reuse is the software engineer's attempt to model the process by which an electrical engineer designs circuits by using standard components with well-defined, well-documented interfaces. Reusable components can be found at any place in the software life cycle: requirements, design, code, test, integration, documentation, and maintenance. Reuse often allows the software engineer to be much more productive since total life cycle costs frequently can be greatly reduced. While this book will provide a complete description of software reuse, it will focus on methods for reuse that are feasible without major investments in new software methodology, on cost estimation issues, and on certification of reusable software components. It will be based on experiences dealing with systems that are changing rapidly. This viewpoint is different from the perspective of many writers in this area who only consider systems that are stable over time. However, it is consistent with software development using the rapid prototyping or spiral models of the development process. This book emphasizes both theoretical and practical techniques for the reuse of software artifacts. Software artifacts include source code modules, requirements, designs, documentation, user manuals, test plans, test cases, test case results, and installation guides. The book is organized as follows: Chapter 1 is an introductory chapter. In it, we present a rationale for software reuse and briefly describe some of the early results and current trends. Disincentives to software reuse, including legal and security issues are also presented. Chapter 2 presents more detailed discussions of several essential techniques. The primary theoretical technique discussed is domain analysis. Domain analysis is the application of systems engineering principles to the determination of common components in an organization's collection of software artifacts. The practical techniques discussed will include the development of standard interfaces, object- oriented approaches, designing for reuse, setting requirements to meet reuse standards, and some appropriate metrics. We introduce the issue of reuse library management in Chapter 3. This chapter also includes a discussion of some of the more readily- available reuse libraries, with some description of software artifacts that are at a higher level than source code. These higher-level artifacts include some designs, complete subsystems, and software written in fourth generation languages. Chapter 4 is devoted to the certification of reusable software components. The term “certification” refers to a quality evaluation taken after the software artifact has passed through normal software testing and has been placed into service. An additional certification step is necessary, because software components may be used in contexts other than the one in which they were originally developed. There will also be recommendations for appropriate standards and practices to encourage the systematic employment of software reuse.