PART1 INTRODUCTION
1 Software Reuse and Software Engineering
1.1 Concepts and Terms
1.1.1 A Definition of Software Reuse
1.1.2 Software Reuse:Potentials and Pitfalls
1.1.3 Exercises
1.2 Software Reuse Products
1.2.1 Reusable Assets
1.2.2 Reuse Libraries:Vertical versus Horizontal Sets
1.2.3 Exercises
1.3 Software Reuse Processes
1.3.1 Organizational Structures
1.3.2 Domain Engineering
1.3.3 Application Engineering
1.3.4 Corporate Oversight
1.3.5 Exercises
1.4 Software Reuse Paradigms
1.4.1 Paradigms for Software Retrieval
1.4.2 Paradigms for Software Adaptation
1.4.3 Paradigms for Software Composition
1.4.4 Exercises
1.5 Further Reading
2 State of the Art and the Practice
2.1 Software Reuse Management
2.1.1 State of the Art
2.1.2 State of the Practice
2.1.3 Perspectives
2.1.4 Exercises
2.2 Software Reuse Techniques
2.2.1 State of the Art
2.2.2 State of the Practice
2.2.3 Perspectives
2.2.4 Exercises
2.3 Software Reuse Initiatives
2.3.1 Software Reuse Libraries
2.3.2 Software Reuse methodologies
2.3.3 Software Reuse Standards
2.3.4 Exercises
2.4 Further Reading
3 Aspects of Software Reuse
3.1 Organizational Aspects
3.1.1 Managerial Intrastructure
3.1.2 Technological Infrastructure
3.1.3 Reuse Introduction
3.1.4 Exercises
3.2 Technical Aspects
3.2.1 Domain Engineering Aspects
3.2.2 Component Engineering Aspects
3.2.3 Application Engineering Aspects
3.2.4 Exercises
3.3 Economic Aspects
3.3.1 Software Reuse Metrics
3.3.2 Software Reuse Cost Estimation
3.3.3 Software Reuse Return on Investment
3.4 Further Reading
PART II ORGANIZATIONAL ASPECTS
4 Software Reuse Organizations
4.1 Software Reuse Team Structures
4.1.1 Characteristic Features
4.1.2 Software Reuse Team Strustures
4.1.3 Determining Factors
4.1.4 Exercises
4.2 Reuse Skills
4.2.1 Librarian
4.2.2 Reuse Manager
4.2.3 Domain Engineer
4.2.4 Application Engineer
4.2.5 Component Engineer
4.2.6 Exercises
4.3 Further Reading
5 Support Services
5.1 Configuration Management
5.2 Quality Assurance
5.3 Testing
5.4 Verification and Validation
5.4.1 Domain-Level Tasks
5.4.2 Correspondence Tasks
5.4.3 Communicating Results
5.5 Risk Management
5.6 Certification
5.7 Exercises
5.8 Further Reading
6 Institutionalizing Reuse
6.1 Organizational Readiness
6.2 Barriers to Reuse
6.2.1 Cultural
6.2.2 Managerial
6.2.3 Technological
6.2.4 Infrastructural
6.3 Overcoming the Barriers to Reuse
6.3.1 Executive Support
6.3.2 Training
6.3.3 Incentives
6.3.4 Incremental Approach
6.4 Exercises
6.5 Further Reading
PART III DOMAIN ENGINEERING:BUILDING FOR REUSE
7 Building Reusable Assets:An Overview
7.1 Reusability
7.1.1 Usability
7.1.2 Usefuless
7.2 Acquiring Reusable Assets
7.2.1 Build Versus Buy
7.2.2 Building Reusable Assets in House
7.2.3 Building Application Generators
7.3 Domain Engineering Lifecycles
7.3.1 Issues
7.3.2 A Sample of Domain Engineering Lifecycles
7.3.3 Summary
7.4 Summary and Discussion
8 Domain Analysis
8.1 Basic Concepts
8.1.1 A Domain
8.1.2 Domain Analysis
8.1.3 Domain Models
8.1.4 Exercises
8.2 Domain Scoping
8.2.1 Scoping Criteria
8.2.2 Over-and Underscoping
8.2.3 Exercises
8.3 Domain versus Application Requirements
8.4 Anatomy of a Domain Component
8.4.1 A Model for Component Families
8.4.2 Concerns in Designing Component Families
8.4.3 Exercises
8.5 Abstraction and Domain Analysis
8.5.1 Abstraction and Commonality Analysis
8.5.2 Abstraction Dimensions
8.5.3 Exercises
8.6 Domain Analysis Methods
8.6.1 Feature-Oriented Domain Analysis(FODA)
8.6.2 OrganizationDomain Modeling(ODM)
8.6.3 Joint Object-Oriented Domain Analysis(JODA)
8.6.4 Reuse Library Proess Model(RLPM)
8.6.5 DomainAnalysis and Design Process(DADP)
8.6.6 Domain-Specific Software Architecture(DSSA)
8.6.7 The SYNTHESIS Domain Analysis Method
8.6.8 Reuse Business Methodology
8.6.9 Comparison
8.6.10 Exercises
8.7 Domain Analysis Tools
8.7.1 KAPTUR,a Knowledge-Based Tool
8.7.2 Genesis,a Builder for Database Management Systems
8.7.3 Exercises
8.8 Further Reading
9 Programming Paradigms and Reusability
9.1 Usability Attributes
9.1.1 Reusability-Abstraction Boundaries
9.1.2 Abstraction and Composability
9.2 Representation and Modeling Paradigms
9.2.1 Declarative versus Procedural Representations
9.2.2 Object-Oriented Modeling
9.3 Abstraction and Composition in Development Paradigms
9.3.1 Declarative Representations:The Case of Logic Programming
9.3.2 Procedural(Functional)Programming
9.3.3 Object-Oriented Development
9.4 Toward Multiparadigm Development
PART IV OBJECT-ORIENTED DOMAIN ENGINEERING
10 A Pragmatic Introduction to Object Orientation
10.1 Introduction
10.1.1 Overview
10.1.2 The Financial Domain
10.2 The Tenets of Object-Oriented Programming
10.2.1 A Sample Program
10.2.2 Encapsulation and Information Hiding
10.2.3 Overloading and Genericity
10.2.4 Subtyping and Class Inheritance
10.2.5 Method Resolution,Late Binding,and Polymorphism
10.3 The Language Wars
10.4 Discussion
11 Abstraction and Parameterization Techniques in Object Orientation
11.1 Abstraction Techniques in Object-Oriented Modeling
11.1.1 An Ontology of Objects
11.1.2 Inheritance in Knowledge Representation
11.1.3 Inheritance in Object-Oriented Analysis
11.1.4 Metamodeling
11.1.5 Understanding Metamodeling
11.1.6 In Practice-a Summary
11.2 Abstraction Techniques in Object-Oriented Programming Languages
11.2.1 Abstract Classes
11.2.2 Generic Classes
11.3 Metaprogramming
11.3.1 Building an Interpreter
11.3.2 Computational Reflection and Metaclasses
11.3.3 Implementing Powertypes
11.4 Design Patterns
11.4.1 Structural Abstraction Patterns
11.4.2 Behavioral Abstraction Patterns
11.5 Conclusion
12 Composition Techniques in Object Orientation
12.1 Issues
12.1.1 Composability Requirements
12.1.2 Structural and Behavioral Composition
12.1.3 Abstraction and Granularity
12.1.4 Binding Time
12.2 Linguistic Approaches
12.2.1 Constraint and Logic-Based Programming
12.2.2 Functional Composition
12.2.3 Hybrid Object-Oriented and Decclarative Approaches
12.3 Modularization and Packaging Approaches
12.3.1 Aspect-Oriented Programming
12.3.2 Subject-Oriented Programming
12.3.3 View-Oriented Programming
12.3.4 Other Approaches
12.4 Design-Based Approaches
12.4.1 Event-Based Composition
12.4.2 Simulated Reflection
12.4.3 Composition Design Patterns
12.5 Summary and Discussion
13 Application Frameworks
13.1 What Is in a Framework
13.1.1 A First Definition
13.1.2 The Anatomy of a Framework
13.1.3 The Framework Reuse Lifecycle
13.2 Fulfilling the Framework Contract
13.2.1 Component Substitutability
13.2.2 Composition Issues
13.3 Building Frameworks
13.3.1 Frameworks as Products of Domain Engineering
13.3.2 Frameworks as Planned Byproducts of Application Development
13.4 The SWING Framework
13.4.1 Overview
13.4.2 The Event-Handling Framework
13.4.3 The Pluggable Look and Feel Framework
13.5 Conclusion
14 Architectural Frameworks
14.1 What Is and Architecture
14.1.1 Definition
14.1.2 Quality Attributes of Architectures
14.1.3 Architectural Styles and Connectors
14.2 Architecuture and Reuse
14.2.1 The Development Lifecycle of a Software Architecture
14.2.2 Dimensions of Reusability
14.2.3 Issues in Architectural Frameworks
14.3 CORBA
14.3.1 The Problem
14.3.2 The Core Architecture
14.3.3 Handling Method Calls
14.3.4 Implementing Application Objects
14.4 Java-Based Technologies
14.4.1 Java RMI
14.4.2 The EJB Architecture
14.5 The COM Family
14.6 Summary and Discussion
14.7 Further Reading
PART V APPLICATION ENGINEERING
15 Application Engineering
15.1 Application Engineering Paradigms
15.2 Application Engineering Lifecycles
15.3 Application Engineering Development Tasks and Heuristics
16 Component Storage and Retrieval
16.1 An Introductin to Software Libraries
16.1.1 Terminology for Storage and Retrieval
16.1.2 Assessment Criteria
16.1.3 Characterizing a Storage-Retrieval Method
16.1.4 Exercises
16.2 Classifying Software Assets for Storage and Retrieval
16.2.1 Obstacles to Software Assets Classification
16.2.2 Issues in Software Storage and Retrieval
16.2.3 Classifying Software Libraries
16.2.4 Exercises
16.3 Further Reading
17 Reusable Asset Integration
17.1 Asset Instantiation Paradigms
17.1.1 Component Selection
17.1.2 Component Generation
17.1.3 Component Specialization
17.2 Asset Composition Paradigms
17.2.1 Composability Scenarios
17.2.2 Composability Media
17.3 Issues in Integrating Components
17.3.1 Component Issues
17.3.2 Process Issues
17.3.3 Quality Issues
PART VI MANAGERIAL ASPECCTS OF SOFTWARE REUSE
18 Software Reuse Metrics
18.1 Software Engineering Metrics
18.1.1 Attributes and Metrics
18.1.2 Structural Metrics
18.1.3 Functional Metrics
18.1.4 Exercises
18.2 Component Engineering Metrics
18.2.1 Concept
18.2.2 Content
18.2.3 Context
18.2.4 Exercises
18.3 Application Engineering Metrics
18.3.1 Project-Level Functions
18.3.2 Exercises
18.4 Domain Engineering Metrics
18.4.1 Reuse Means:Software Library Metrics
18.4.2 Exercises
18.5 Organization Level Metrics
18.5.1 Reuse Impacts:Productivity Gains
18.5.2 Exercises
18.6 Further Reading
19 Software Reuse Cost Estimation
19.1 Software Engineering Economics:COCOMO
19.1.1 Basic COCOMO
19.1.2 Intermediate COCOMO
19.1.3 Detailed COCOMO
19.1.4 Exercises
19.2 Component Engineering Economics
19.2.1 Development for Reuse
19.2.2 Quality Gains
19.2.3 Productivity Gains
19.2.4 Time-to-Market Gains
19.2.5 Exercises
19.3 Application Engineering Economics
19.3.1 Development with Reuse
19.3.2 Productivity Gains
19.3.3 Quality Gains
19.3.4 Time-to-Market Gains
19.3.5 Exercises
19.4 Further Reading
20 Software Reuse Return on Investment
20.1 Modeling Investment Decisions
20.1.1 Investment Cost Factors
20.1.2 Economic Functions
20.1.3 Exercises
20.2 Software Reuse Investment Decisions
20.2.1 Component Engineering Investment Cycle
20.2.2 Application Engineering Investment Cycle
20.2.3 Domain Engineering Investment Cycle
20.2.4 Corporate Investment Cycle
20.2.5 Exercises
20.3 Further Reading
Part VII Software Reuse Technologies
21 Component-Based Software Engineering(CBSE)
21.1 Components
21.1.1 What Is a Component
21.1.2 The Anatomy of a Component
21.1.3 What Makes a Good Component
21.2 Component Models
21.2.1 What Is a Component Model
21.2.2 Things that Component Models Should Address
21.2.3 Example Component Models
21.3 Component-Based System Development(CBSD)
21.3.1 CBSD Process
21.3.2 Component Granularity
21.4 Issues in Developing with Components
21.4.1 Technical Issues
21.4.2 Business Issues
21.5 Further Reading
22 Product-Line Engineering(PLE)
22.1 PLE and Software Reuse
22.1.1 Exercises
22.2 PLE Lifecycle
22.2.1 Domian and Application Engineering Aspects
22.2.2 Attributes of a PLE Lifecycle
22.2.3 Success Factors
22.2.4 Exercises
22.3 Product-Line Architectures
22.3.1 Software Architectures and Product-Line Architectures
22.3.2 Conformance and Synchronization in PLAs
22.3.3 Evaluating Architectures
22.3.4 Exercises
22.4 PLE Approaches
22.4.1 The SYNTHESIS Approach
22.4.2 The Product-Line Practice
22.4.3 Product-Line Approaches
22.5 Further Reading
23 COTS Based Development
23.1 Commercial Off the Shelf Software
23.1.1 Definition and Background
23.1.2 COTS and CBSD
23.1.3 Exercises
23.2 A Lifecycle for COTS Based Development
23.2.1 COTS Selection
23.2.2 COTS Integration
23.2.3 Verification and Validation of COTS Based Systems
23.2.4 Maintenance of COTS Based Systems
23.2.5 Cost Estimation for COTS Development
23.2.6 Exercises
23.3 Developing COTS Certification Criteria
23.3.1 Certification Categories
23.3.2 COTS Certification Levels
23.3.3 COTS Worthiness
23.3.4 Domain Pervasiveness
23.3.5 Architecture Conformance
23.3.6 Application Adequacy
23.4 Further Reading
APPENDIXES
Appendix A Software Reuse Resources
A.1 Texbooks
A.2 Web Sites
A.3 Conference Series
A.4 Software Reuse Surveys
Appendix B Term Projects
B.1 Simulation of Waiting Queues
B.1.1 Domain Engineering
B.1.2 Application Engineering
B.2 Library Systems
B.2.1 Domain Engineering
B.2.2 Application Engineering
Bibliography
Index