Register your product to gain access to bonus material or receive a coupon.
Practical solutions for making software reuse really, truly work in your organization.
66100-9
Make software reuse work!
Step-by-step techniques, proven strategies.
Software reuse is the most important concept in software in the last twenty years. Software reuse can dramatically reduce the cost and complexity of software development. But few organizations are realizing the potential of reuse. What's missing? Specific techniques for incorporating reuse into the development lifecycle.
Software Reuse Techniques fills that gap. In this book, the world's foremost expert on reuse presents a step-by-step guide to implementing reuse—from planning through maintenance, for object-oriented, component-based, and Internet-enabled software application development. Carma McClure distills her unparalleled consulting experience into practical solutions for:
McClure shows how reuse changes the software development process, and “who does what” in organizations committed to reuse. She demonstrates how to reuse not just source code, but also requirements specifications, designs, test scripts, project plans, documentation, object frameworks and more. Next, she presents 16 different reuse techniques in detail, with case studies.
Organizations that have successfully implemented reuse have achieved powerful cost and quality advantages. Reuse works—and you can make it happen. This book contains the techniques—and the proof.
List of Figures.
List of Tables.
Preface.
Software Waste. Reusable Components. Reuse Benefits. Reuse Obstacles. Purpose of This Book. Structure of This Book.
I. INTRODUCTION TO REUSE.
1. Reuse: A Different Software Paradigm.Reuse Object-Technology Partnership. Reuse Experiences. Deferring to the Second System. Bigger Is Better. Making an Investment in Reuse. Reuse Is No Accident. Informal Reuse. Reuse as a Discipline. Reuse Starting from Business Processes. Reuse-Driven Software Development Process. Reuse-Driven Software Development Process. The Price of Reuse. Class-Library Management. A Few Good Megaclasses. Taking Small Bites with Domain-Level Reuse. Reorganizing for Reuse. How to Succeed with Reuse. References.
2. Reuse in Context.Reuse-Driven Methods Are the Missing Key. How Reuse Changes the Software Process. Reuse Themes. Reuse Requirements. Reuse Views. Evolutionary, Not Revolutionary Change. Where Reuse Fits into the Software Process. Extending Strategic Systems Planning to Include Reuse. Extending the System Life Cycle to Include Reuse. First Be a Reuse Consumer. Consumer Reuse Mini Life Cycle. Reuse-Driven Project Reviews. Reuse Project Plan. Final Reuse Evaluation. Introducing Producer Reuse into the System Life Cycle. Domain Engineering. Placement of Domain Engineering in the Software Process. Observations about a Reuse-Driven Software Process. Summary. References.
3. Introduction to Reuse Techniques.Adding Reuse Techniques to Software Methods. Management Techniques. Corporate-Level Reuse Management Techniques. Project-Level Reuse Management Techniques. Consumer Reuse Techniques. Producer Reuse Techniques. Reuse Technique Presentation.
II. REUSE TECHNIQUES.
4. Reuse Readiness Assessment.Overview. Purpose. Rationale. Critical Issues. Recommended Tools. Example. Example of the Executive Summary of a Reuse Assessment Report for the Company INVESTCO. Procedure. References.
5. Corporate Reuse Plan Creation.Overview. Purpose. Rationale. Critical Issues. Recommended Tools. Example. Initial Reuse Program Implementation Plan for the Company INVESTCO. Procedure References.
6. Organizing for Reuse.Overview. Purpose. Rationale. Critical Issues. Example. Telecommunications Company Begins Its Reuse Mission. Reuse Support Group. Start Small. Procedure. References.
7. Promoting Reuse.Overview. References. Purpose. Rationale. Critical Issues. Recommended Tools. Example. Midwest Insurance Company Aligns Reuse Strategy with Corporate Culture. Management Affirmation. Getting Reuse Acceptance. Reuse Assessment Survey. Procedure. References.
8. Project Reuse Plan Creation.Overview. Purpose. Rationale. Critical Issues. Recommended Tools. Procedure. Reference.
9. Reuse Cost/Benefit Analysis.Overview. Purpose. Rationale. Critical Issues. Recommended Tools. Example. A Financial Institution Begins Its Reuse Evolution. Reducing the Risk of Reuse Failure. Measuring Reuse Costs and Benefits. Procedure. References.
10. Project Reuse Evaluation.Overview. Purpose. Rationale. Critical Issues. Recommended Tools. Procedure. Reference.
11. Reuse Cost/Benefit Tracking.Overview. Purpose. Rationale. Critical Issues. Recommended Tools. Procedure. References.
III. REUSE TECHNIQUES, CONSUMER TECHNIQUES.
12. Application Package Selection.Overview. Purpose. Rationale. Critical Issues. Recommended Tools. Example. Software License Contract. General Software Clauses. Software Specific Clauses. Procedure. References.
13. Selecting Reusable Components.Overview. Purpose. Rationale. Critical Issues. Recommended Tools. Procedure. References.
14. Redundancy Checking.Overview. Purpose. Rationale. Critical Issues. Recommended Tools. Example. Flow Graphs. Complexity Metrics. McCabe Metrics. Halstead Metrics. Procedure. References.
15. Identifying Candidate Reusable Components.Overview. Purpose. Rationale. Critical Issues. Recommended Tools. Example. UPS Strategy for Selecting Components to Create for Reuse. DST Systems—Strategy for Selecting Components to Create for Reuse. Insurance Group—Strategy for Selecting Components to Create for Reuse. Lucent Technologies—Strategy for Selecting Components to Create for Reuse. Procedure. References.
IV. REUSE TECHNIQUES, PRODUCER REUSE TECHNIQUES.
16. Building a Reuse Library.Overview. Purpose. Rationale. Critical Issues. Recommended Tools. Example. Example of a Faceted Classification Scheme Based on Information Engineering. Example of a Faceted Classification Scheme for Object Oriented Development. Application Area. Procedure. References.
17. Configuration Management.Overview. Purpose. Rationale. Critical Issues. Example. Procedure.
18. Creating a Reusable Component.Overview. Purpose. Rationale. Critical Issues. Example. Procedure. References.
19. Domain Analysis.Overview. Purpose. Rationale. Critical Issues. Recommended Tools. Example. Domain Analysis Information Engineering Style. Steps of Domain Analysis. Business Area Analysis with Elements of Domain Analysis. Steps of Reuse-Driven Business Area Analysis. Procedure. References.
Epilogue.The Good News and the Bad News. Answering the Basic Reuse Question.
Glossary.Glossary of Terms.
Index. PREFACE
Software Waste
“Waste not, want not” has never been the motto of software developers. On the contrary, waste has been encouraged as a normal part of the one-of-a-kind system development philosophy advocated in most software projects. The software tradition is that the best way to serve the user/customer is by building each new system from scratch, without any notice or regard to the amount of “reinventing of the software wheel” that occurs.
What has not been realized is the extent of unnecessary reinventing and the enormous waste of resources that occurs in most software projects. Countless software projects have wasted resources developing software components that bear a great similarity to those that already exist. Software waste is a very common occurrence because software systems tend to be more alike than different from one another. Comparative analysis of software systems has shown that, in general, sixty to seventy percent of a system's functionality is common to more than one system.
Unless specific measures are taken, software waste will continue to occur regardless of the type of technology used or the type of application system built. Newer technologies such as software automation, object orientation and client-server do not change this fact. However, they do make it easier to take advantage of software similarities. Some software similarities can be predefined and built into software tools (such as reusable code patterns in generators); others can be created as reusable components which are stored in software reuse libraries and made available to develop new systems.
Because software systems typically are composed of similar parts, the majority of each new software system can and should be assembled from predefined reusable components. Although often overlooked, software reuse is the best answer to the decades-old software crisis.
Reusable Components
A reusable component may be program source code, but the bigger benefits from reuse often come from a broader and higher-level view of what can be reused. Software specifications, designs, test scripts, project plans, documentation, object frameworks, and subroutines are all examples of viable types of reusable components. In general, any software project deliverable could be produced from reusable components. High on the list of reusable component types should be reusable skeletons that can aid the production of every kind of project documentation, report, and plan. Since these skeletons can be provided as word processing template forms, they are fast and easy to create and make available in the reuse catalog. The benefit is not only saving time, but also ensuring that corporate standards are followed and consistency is enforced across software development processes and systems. This leads to better quality systems that are easier to understand, maintain and reuse. Finally, this type of reusable component is unlikely to offend the creative needs of system developers because documentation is not something they enjoy doing. Many of these skeletons are probably already in existence in some parts of the organization and should be made available to all software development groups.
The two other kinds of software components that should be high on the list of valuable reusable components are design components and test components.
Design components are important because the best place to maximize leverage from reuse is at design time. Design components are at a higher level of abstraction than code, making them less implementation-specific and, therefore, more portable and more reusable. Also, since design is a more expensive development task than coding, reusing designs can potentially provide greater savings than reusing code. In addition, reuse at the design level can lead to reuse at the code level if there is some traceability between the design and the code that implements it. Traceability can be handled automatically by CASE tools. Focusing on design components can solve some of the concern over differences and incompatibilities between components written in different programming languages.
Test components, such as test data, test scripts, test cases, and test plans, are also very important to consider. In some cases, although the code may not be reusable due to language or tool differences, the test components may be reusable. Reusing test components can ensure that a system is more thoroughly tested and this, of course, can result in a more reliable, easier-to-maintain system. Since testing, like design, is a very expensive task, reusing test components can save a great deal of project time and resources.
Reuse Benefits
Exploiting reuse opportunities enables significant software productivity, quality and cost improvements. The major benefits that reuse can deliver are to