PART Ⅰ INTRODUCTION 3
1 Software Reuse and Software Engineering 3
1.1 Concepts and Terms 4
1.1.1 A Definition of Software Reuse 4
1.1.2 Software Reuse:Potentials and Pitfalls 6
1.1.3 Exercises 7
1.2 Software Reuse Products 7
1.2.1 Reusable Assets 7
1.2.2 Reuse Libraries:Vertical versus Horizontal Sets 9
1.2.3 Exercises 10
1.3 Software Reuse Processes 11
1.3.1 Organizational Structures 12
1.3.2 Domain Engineering 13
1.3.3 Application Engineering 14
1.3.4 Corporate Oversight 15
1.3.5 Exercises 15
1.4 Software Reuse Paradigms 17
1.4.1 Paradigms for Software Retrieval 17
1.4.2 Paradigms for Software Adaptation 17
1.4.3 Paradigms for Software Composition 19
1.4.4 Exercises 19
1.5 Further Reading 20
2.1 Software Reuse Management 22
2.1.1 State of the Art 22
2 State of the Art and the Practice 22
2.1.2 State of the Practice 24
2.1.3 Perspectives 26
2.1.4 Exercises 27
2.2 Software Reuse Techniques 27
2.2.1 State of the Art 27
2.2.2 State of the Practice 31
2.2.3 Perspectives 32
2.2.4 Exercises 33
2.3 Software Reuse Initiatives 33
2.3.1 Software Reuse Libraries 33
2.3.2 Software Reuse Methodologies 36
2.3.3 Software Reuse Standards 41
2.3.4 Exercises 42
2.4 Further Reading 42
3 Aspects of Software Reuse 45
3.1 Organizational Aspects 45
3.1.1 Managerial Infrastructure 45
3.1.2 Technological Infrastructure 46
3.1.3 Reuse Introduction 46
3.1.4 Exercises 47
3.2 Technical Aspects 47
3.2.1 Domain Engineering Aspects 47
3.2.2 Component Engineering Aspects 48
3.2.3 Application Engineering Aspects 48
3.3.2 Software Reuse Cost Estimation 49
3.3.1 Software Reuse Metrics 49
3.2.4 Exercises 49
3.3 Economic Aspects 49
3.3.3 Software Reuse Return on Investment 50
3.4 Further Reading 50
PART Ⅱ ORGANIZATIONAL ASPECTS 53
4 Software Reuse Organizations 53
4.1 Software Reuse Team Structures 53
4.1.1 Characteristic Features 53
4.1.2 Software Reuse Team Structures 55
4.1.3 Determining Factors 61
4.1.4 Exercises 62
4.2.1 Librarian 63
4.2 Reuse Skills 63
4.2.2 Reuse Manager 64
4.2.3 Domain Engineer 64
4.2.4 Application Engineer 65
4.2.5 Component Engineer 66
4.2.6 Exercises 66
4.3 Further Reading 66
5 Support Services 68
5.1 Configuration Management 68
5.2 Quality Assurance 70
5.3 Testing 71
5.4 Verification and Validation 71
5.4.1 Domain-Level Tasks 74
5.4.2 Correspondence Tasks 75
5.4.3 Communicating Results 76
5.5 Risk Management 76
5.6 Certification 77
5.7 Exercises 78
5.8 Further Reading 78
6 Institutionalizing Reuse 79
6.1 Organizational Readiness 79
6.2 Barriers to Reuse 80
6.2.2 Managerial 88
6.2.3 Technological 88
6.2.1 Cultural 88
6.2.4 Infrastructural 89
6.3 Overcoming the Barriers to Reuse 89
6.3.1 Executive Support 89
6.3.2 Training 89
6.3.3 Incentives 90
6.3.4 Incremental Approach 90
6.4 Exercises 93
6.5 Further Reading 93
PART Ⅲ DOMAIN ENGINEERING:BUILDING FOR REUSE 97
7 Building Reusable Assets:An Overview 97
7.1.1 Usability 98
7.1 Reusability 98
7.1.2 Usefulness 104
7.2 Acquiring Reusable Assets 106
7.2.1 Build versus Buy 107
7.2.2 Building Reusable Assets in House 107
7.2.3 Building Application Generators 110
7.3 Domain Engineering Lifecycles 113
7.3.1 Issues 113
7.3.2 A Sample of Domain Engineering Lifecycles 117
7.3.3 Summary 120
7.4 Summary and Discussion 122
8 Domain Analysis 124
8.1.1 A Domain 125
8.1 Basic Concepts 125
8.1.2 Domain Analysis 126
8.1.3 Domain Models 127
8.1.4 Exercises 128
8.2 Domain Scoping 128
8.2.1 Scoping Criteria 128
8.2.2 Over-and Underscoping 129
8.2.3 Exercises 130
8.3 Domain versus Application Requirements 130
8.4 Anatomy of a Domain Component 133
8.4.1 A Model for Component Families 133
8.4.2 Concerns in Designing Component Families 135
8.5 Abstraction and Domain Analysis 136
8.5.1 Abstraction and Commonality Analysis 136
8.4.3 Exercises 136
8.5.2 Abstraction Dimensions 141
8.5.3 Exercises 145
8.6 Domain Analysis Methods 145
8.6.1 Feature-Oriented Domain Analysis(FODA) 145
8.6.2 Organization Domain Modeling(ODM) 146
8.6.3 Joint Object-Oriented Domain Analysis(JODA) 147
8.6.4 Reuse Library Process Model(RLPM) 148
8.6.5 Domain Analysis and Design Process(DADP) 149
8.6.7 The SYNTHESIS Domain Analysis Method 150
8.6.6 Domain-Specific Software Architecture(DSSA) 150
8.6.8 Reuse Business Methodology 151
8.6.9 Comparison 152
8.6.10 Exercises 158
8.7 Domain Analysis Tools 158
8.7.1 KAPTUR,a Knowledge-Based Tool 158
8.7.2 Genesis,a Builder for Database Management Systems 159
8.7.3 Exercises 159
8.8 Further Reading 159
9 Programming Paradigms and Reusability 160
9.1 Usability Attributes 160
9.1.1 Reusability-Abstraction Boundaries 161
9.1.2 Abstraction and Composability 163
9.2 Representation and Modeling Paradigms 167
9.2.1 Declarative versus Procedural Representations 167
9.2.2 Object-Oriented Modeling 173
9.3 Abstraction and Composition in Development Paradigms 175
9.3.1 Declarative Representations:The Case of Logic Programming 176
9.3.2 Procedural(Functional)Programming 179
9.3.3 Object-Oriented Development 185
9.4 Toward Multiparadigm Development 192
PART Ⅳ OBJECT-ORIENTED DOMAIN ENGINEERING 197
10 A Pragmatic Introduction to Object Orientation 197
10.1.1 Overview 198
10.1 Introduction 198
10.1.2 The Financial Domain 199
10.2 The Tenets of Object-Oriented Programming 200
10.2.1 A Sample Program 200
10.2.2 Encapsulation and Information Hiding 202
10.2.3 Overloading and Genericity 207
10.2.4 Subtyping and Class Inheritance 213
10.2.5 Method Resolution,Late Binding,and Polymorphism. 225
10.3 The Language Wars 231
10.4 Discussion 236
11 Abstraction and Parameterization Techniques in Object Orientation 237
11.1 Abstraction Techniques in Object-Oriented Modeling 239
11.1.1 An Ontology of Objects 240
11.1.2 Inheritance in Knowledge Representation 243
11.1.3 Inheritance in Obiect-Oriented Analysis 245
11.1.4 Metamodeling 246
11.1.5 Understanding Metamodeling 253
11.1.6 In Practice—a Summary 257
11.2 Abstraction Techniques in Object-Oriented Programming Languages 262
11.2.1 Abstract C1asses 263
11.2.2 Generic Classes 267
11.3 Metaprogramming 271
11.3.1 Building an Interpreter 272
11.3.2 Computational Refiection and Metaclasses 275
11.3.3 Implementing Powertypes 280
11.4.1 Structural Abstraction Patterns 282
11.4 Design Patterns 282
11.4.2 Behavioral Abstraction Patterns 286
11.5 Conclusion 290
12 Composition Techniques in Object Orientation 292
12.1 Issues 293
12.1.1 Composability Requirements 293
12.1.2 Structural and Behavioral Composition 294
12.1.3 Abstraction and Granularity 297
12.1.4 Binding Time 297
12.2 Linguistic Approaches 298
12.2.1 Constraint and Logic-Based Programming 298
12.2.2 Functional Composition 301
12.2.3 Hybrid Object-Oriented and Declarative Approaches 305
12.3 Modularization and Packaging Approaches 309
12.3.1 Aspect-Oriented Programming 310
12.3.2 Subject-Oriented Programming 312
12.3.3 View-Oriented Programming 317
12.3.4 Other Approaches 321
12.4 Design-Based Approaches 323
12.4.1 Event-Based Composition 323
12.4.2 Simulated Reflection 328
12.4.3 Composition Design Patterns 336
12.5 Summary and Discussion 341
13 Application Frameworks 343
13.1.1 A First Definition 344
13.1 What Is in a Framework 344
13.1.2 The Anatomy of a Framework 345
13.1.3 The Framework Reuse Lifecycle 350
13.2 Fulfilling the Framework Contract 351
13.2.1 Component Substitutability 353
13.2.2 Composition Issues 360
13.3 Building Frameworks 368
13.3.1 Frameworks as Products of Domain Engineering 369
13.3.2 Frameworks as Planned Byproducts of Application Development 370
13.4 The SWING Framework 372
13.4.1 Overview 372
13.4.2 The Event-Handling Framework 374
13.4.3 The Pluggable Look and Feel Framework 377
13.5 Conclusion 380
14 Architectural Frameworks 381
14.1 What Is an Architecture 382
14.1.1 Definition 382
14.1.2 Quality Attributes of Architectures 385
14.1.3 Architectural Styles and Connectors 387
14.2 Architecture and Reuse 393
14.2.1 The Development Lifecycle of a Software Architecture 393
14.2.2 Dimensions of Reusability 395
14.2.3 Issues in Architectural Frameworks 398
14.3.1 The Problem 399
14.3 CORBA 399
14.3.2 The Core Architecture 402
14.3.3 Handling Method Calls 406
14.3.4 Implementing Application Objects 408
14.4 Java-Based Technologies 411
14.4.1 Java RMI 412
14.4.2 The EJB Architecture 416
14.5 The COM Family 423
14.6 Summary and Discussion 429
14.7 Further Reading 431
15 Application Engineering 435
15.1 Application Engineering Paradigms 435
PART Ⅴ APPLICATION ENGINEERING 435
15.2 Application Engineering Lifecycles 437
15.3 Application Engineering Development Tasks and Heuristics 440
16 Component Storage and Retrieval 444
16.1 An Introduction to Software Libraries 444
16.1.1 Terminology for Storage and Retrieval 445
16.1.2 Assessment Criteria 447
16.1.3 Characterizing a Storage-Retrieval Method 450
16.1.4 Exercises 452
16.2 Classifying Software Assets for Storage and Retrieval 454
16.2.1 Obstacles to Software Assets Classification 454
16.2.2 Issues in Software Storage and Retrieval 455
16.2.3 Classifying Software Libraries 456
16.2.4 Exercises 458
16.3 Further Reading 459
17 Reusable Asset Integration 463
17.1 Asset Instantiation Paradigms 464
17.1.1 Component Selection 465
17.1.2 Component Generation 465
17.1.3 Component Specialization 465
17.2 Asset Composition Paradigms 466
17.2.1 Composability Scenarios 466
17.2.2 Composability Media 469
17.3 Issues in Integrating Components 470
17.3.1 Component Issues 471
17.3.2 Process Issues 472
17.3.3 Quality Issues 474
PART Ⅵ MANAGERIAL ASPECTS OF SOFTWARE REUSE 479
18 Software Reuse Metrics 479
18.1 Software Engineering Metrics 479
18.1.1 Attributes and Metrics 479
18.1.2 Structural Metrics 480
18.1.3 Functional Metrics 481
18.1.4 Exercises 483
18.2 Component Engineering Metrics 484
18.2.1 Concept 485
18.2.3 Context 486
18.2.2 Content 486
18.2.4 Exercises 487
18.3 Application Engineering Metrics 488
18.3.1 Project-Level Functions 488
18.3.2 Exercises 489
18.4 Domain Engineering Metrics 490
18.4.1 Reuse Mearns:Software Library Metrics 490
18.4.2 Exercises 491
18.5 Organization Level Metrics 491
18.5.1 Reuse Impacts:Productivity Gains 491
18.5.2 Exercises 492
18.6 Further Reading 492
19.1 Software Engineering Economics:COCOMO 494
19 Software Reuse Cost Estimation 494
19.1.1 Basic COCOMO 495
19.1.2 Intermediate COCOMO 496
19.1.3 Detailed COCOMO 497
19.1.4 Exercises 499
19.2 Component Engineering Economics 499
19.2.1 Development for Reuse 500
19.2.2 Quality Gains 501
19.2.3 Productivity Gains 503
19.2.4 Time-to-Market Gains 505
19.2.5 Exercises 505
19.3.1 Development with Reuse 506
19.3 Application Engineering Economics 506
19.3.2 Productivity Gains 507
19.3.3 Quality Gains 508
19.3.4 Time-to-Market Gains 509
19.3.5 Exercises 509
19.4 Further Reading 510
20 Software Reuse Return on Investment 511
20.1 Modeling Investment Decisions 512
20.1.1 Investment Cost Factors 512
20.1.2 Economic Functions 513
20.1.3 Exercises 515
20.2 Software Reuse Investment Decisions 515
20.2.1 Component Engineering Investment Cycle 516
20.2.2 Application Engineering Investment Cycle 519
20.2.3 Domain Engineering Investment Cycle 520
20.2.4 Corporate Investment Cycle 521
20.2.5 Exercises 522
20.3 Further Reading 523
Part Ⅶ Software Reuse Technologies 529
21 Component-Based Software Engineering(CBSE) 529
21.1 Components 530
21.1.1 What Is a Component 530
21.1.2 The Anatomy of a Component 532
21.1.3 What Makes a Good Component 534
21.2.1 What Is a Component Model 535
21.2 Component Models 535
21.2.2 Things that Component Models Should Address 536
21.2.3 Example Component Models 538
21.3 Component-Based System Development(CBSD) 538
21.3.1 CBSD Process 539
21.3.2 Component Granularity 541
21.4 Issues in Developing with Components 542
21.4.1 Technical Issues 542
21.4.2 Business Issues 544
21.5 Further Reading 545
22 Product-Line Engineering(PLE) 546
22.1 PLE and Software Reuse 547
22.1.1 Exercises 548
22.2 PLE Lifecycle 549
22.2.1 Domain and Application Engineering Aspects 549
22.2.2 Attributes of a PLE Lifecycle 550
22.2.3 Success Factors 551
22.2.4 Exercises 552
22.3 Product-Line Architectures 552
22.3.1 Software Architectures and Product-Line Architectures 552
22.3.2 Conformance and Synchronization in PLAs 553
22.3.3 Evaluating Architectures 554
22.3.4 Exercises 554
22.4.1 The SYNTHESIS Approach 555
22.4 PLE Approaches 555
22.4.2 The Product-Line Practice 559
22.4.3 Product-Line Approaches 564
22.5 Further Reading 564
23 COTS Based Development 566
23.1 Commercial Off the Shelf Software 566
23.1.1 Definition and Background 566
23.1.2 COTS and CBSD 567
23.1.3 Exercises 568
23.2 A Lifecycle for COTS Based Development 569
23.2.1 COTS Selection 569
23.2.2 COTS Integration 570
23.2.3 Verification and Validation of COTS Based Systems 571
23.2.4 Maintenance of COTS Based Systems 572
23.2.5 Cost Estimation for COTS Development 574
23.2.6 Exercises 574
23.3 Developing COTS Certification Criteria 575
23.3.1 Certification Categories 575
23.3.2 COTS Certification Levels 576
23.3.3 COTS Worthiness 577
23.3.4 Domain Pervasiveness 581
23.3.5 Architecture Conformance 582
23.3.6 Application Adequacy 584
23.4 Further Reading 585
APPENDIXES 587
Appendix A Software Reuse Resources 587
A.1 Textbooks 589
A.2 Web Sites 590
A.3 Conference Series 591
A.4 Software Reusc Surveys 593
Appendix B Term Projects 594
B.1 Simulation of Waiting Queues 594
B.1.1 Domain Engineering 594
B.1.2 Application Engineering 595
B.2 Library Systems 597
B.2.1 Domain Engineering 597
B.2.2 Application Engineering 599
Bibliography 602
Index 627