SOFTWARE REUSE: METHODS, MODELS, COSTS TABLE OF CONTENTS CHAPTER 1 WHAT IS SOFTWARE REUSE? 1 1.1 Origins of Software Reuse 3 1.2 Reuse and the Software Life Cycle 5 1.3 Software Reuse, Rapid Prototyping, and Evolving Systems 14 1.4 Typical Duties of Members of a Reuse Team 15 1.5 Reengineering and Reuse 17 1.6 Library Issues 20 1.7 Potential Disadvantages of Reuse 21 1.8 Legal and Contractual Issues with Software Reuse 24 1.9 The Current Status of Software Reuse 27 Summary 32 Further Reading 33 Exercises 34 CHAPTER 2 TECHNIQUES 37 2.1 Domain Analysis 37 2.2 An Example - Domain Analysis of the Linux Operating System 41 2.3 Domain Analysis Revisited 51 2.4 Object-Oriented Approaches 54 2.5 Standard Interfaces 61 2.6 Designing for Reuse 65 2.7 Using Reuse to Drive Requirements Analysis 68 2.8 Metrics for Reuse 71 Summary 79 Further Reading 80 Exercises 81 CHAPTER 3 REUSE LIBRARIES 83 3.1 General Reuse Library Issues 84 3.2 Organizational Issues for Reuse Libraries 88 3.3 Managerial Issues for Reuse Libraries 92 3.4 Research Issues in Reuse Library Organization 96 3.5 Reuse Libraries for Ada Software 96 3.5.1 The Public Ada Library 97 3.5.2 The Ada Software Repository 97 3.5.3 The STARS and CARDS Programs 98 3.5.4 The Asset Program 99 3.5.5 Other Sources 100 3.6 Reuse Libraries for C++ Language Software 101 3.7 Reuse Libraries for C Language Software 107 3.8 Reuse Libraries for Higher Level Language Software 110 Summary 112 Further Reading 113 Exercises 113 CHAPTER 4 CERTIFICATION OF REUSABLE SOFTWARE COMPONENTS 115 4.1 The Need for Certification 116 4.2 The Difference Between Certification and Testing 118 4.3 Suggested Standards and Practices for Certification of Software Artifacts 122 4.3.1 Code Certification 123 4.3.2 Requirements Certification 125 4.3.3 Design Certification 126 4.3.4 Test Plan and Test Results Certification 127 4.3.5 Documentation Certification 128 4.3.6 System Certification 129 4.4 The Role of Metrics 130 4.5 An Overview of Software Reliability 133 4.6 Certification, Testing, and Reliability Modelling 139 4.7 Certification of Potentially Reusable Software Components is not Always Necessary 143 Summary 145 Further Reading 146 Exercises 147 CHAPTER 5 THE ECONOMICS OF SOFTWARE REUSE 149 5.1 Life Cycle Leverage 152 5.2 Cost Models for Reuse Using the Classic Waterfall Life Cycle 154 5.2.1 Reuse in the Requirements or Specification Phase 156 5.2.3 Reuse in the Design phase 159 5.2.3 Reuse in the Coding phase 161 5.2.4 Reuse in the Testing and Integration phase 164 5.2.5 Reuse in the Maintenance phase 166 5.3 A Cost Model for Reuse Using the Rapid Prototyping Model 166 5.4 A Cost Model for Reuse for a System Developed Using the Spiral Model 170 5.5 A Cost Model for Reuse for a System Using Only COTS 173 5.6 Other Reuse-Based Cost Estimation Models 177 5.7 Estimation of Other Resources in Reuse-based Environments 179 5.8 The Economic Reuse Quantity 180 Summary 183 Further Reading 185 Exercises 185 CHAPTER 6 REENGINEERING 187 6.1 Program Translation 188 6.2 An example of semantic reasoning in reengineering 190 6.3 Transitioning to an Object-Oriented System 198 6.4 Specifications for a File System Simulation 199 6.5 Procedurally-based System Design 203 6.6 Implementation Details for a Procedurally-based Disk Simulation 212 6.7 Source Code for Procedural System (Optional) 225 6.7 Reengineering a Procedurally-based System into an Object-Oriented One 236 6.8 An Object-Oriented Disk Simulation Program 238 6.9 Source Code for an Object-Oriented Solution 238 6.10 Comparison of Object-Oriented and Procedural Solutions 250 Summary 251 Further Reading 251 Exercises 252 CHAPTER 7 CASE STUDIES 255 7.1 Some Reuse Activities at NASA 255 7.1.1 Introduction 256 7.1.2 Methodology Used for the Collection of Metrics Data 259 7.1.3 Results 261 7.1.4 Recommendations 268 7.2 Some Reuse Activities at AT&T 270 7.3 Some Reuse Activities at Battelle Laboratory 274 7.4 Some Reuse Activities at Hewlett-Packard 276 7.5 A Hypothetical Failed Software Reuse Program 280 Summary 281 Further Reading 282 Exercises 282 CHAPTER 8 TOOLS FOR SOFTWARE REUSE 283 8.1 The InQuisiX System of Reuse Tools 283 8.2 A Simple Text-Based System 288 8.3 The AT&T BaseWorX Application Platform 291 8.4 A Knowledge-Based Tool for Reuse 295 8.5 Issues with Network-based Tools for Software Reuse 298 Summary 298 Further Reading 299 Exercises 300 REFERENCES 301 Appendix 1 Metrics 325 Appendix 2 Sources 335 Appendix 3 Glossary 345 Appendix 4 Suggested Term Projects 347 Appendix 5 Checklist for Software Reuse in a Changing Environment 351