Software Factories: Assembling Applications with Patterns, Models, Frameworks, and Tools Jack Greenfield Keith Short WILEY Wiley Publishing, Inc.
Preface Acknowledgments Foreword Parti Introduction to Software Factories XV xxiii xxvii 1 Chapter 1 Chapter 2 Introduction Tools Lag Platforms The Software Development Landscape Platform Technology Evolution Building Applications with Services Software Development Challenges Discontinuous Innovation Dealing with Complexity The Problem of Complexity Feature Delocalization Working at the Wrong Level of Abstraction Raising the Level of Abstraction Packaging Abstractions Current Methods and Practices Encapsulation Partitioning Responsibility Documenting Design Automating Development Organizing Development 3 4 7 8 24 30 32 34 35 35 38 41 53 61 66 67 68 73 77 82 85 vii
viii Contents Chapter 3 Dealing with Change 87 The Problem of Change 87 Responses to Change 87 Software Aging 88 Software As Simulation 90 Sources of Change 99 Current Methods and Practices 100 Preventing Stagnation 101 Reducing Brittleness 104 Reducing Fatigue 106 Chapter 4 Paradigm Shift 109 Chronic Problems 109 Monolithic Construction 110 Gratuitous Generality 115 One-Off Development 120 Process Immaturity 121 Critical Innovations 125 Systematic Reuse 125 Development by Assembly 129 Model-Driven Development 139 Process Frameworks 150 Chapter 5 Software Factories 155 Industrializing Software Development 155 The Economics of Reuse 156 Economies of Scale and Scope 157 Systematic Software Reuse 159 Integrating the Critical Innovations 161 What Is a Software Factory? 163 What Is a Software Factory Schema? 164 What Is a Software Factory Template? 173 Building a Software Factory 174 Building a Software Product 175 A Software Factory Example 180 Implications of Software Factories 185 Development by Assembly 185 Software Supply Chains 186 Relationship Management 187 Domain Specific Assets 187 Organizational Changes 188 Mass Customization of Software 188 Realizing the Software Factory Vision 189 190
ix Part II Chapter 6 Chapter 7 Chapter 8 Critical Innovations Models and Patterns Intent versus Implementation What Is Intent? Capturing Intent A Closer Look at Patterns Creating and Using Patterns Weaving Patterns into Languages Patterns in Product Families Encapsulating Pattern Languages What Is Encapsulation? Defining Languages with Encapsulation Formalizing Pattern Languages What Are Models? Models as Abstractions Model Visualization Models as Metadata Models as Development Artifacts Modeling or Programming? Programming with Models Model-Driven Development Generating Software Automating Patterns Automating Refactoring Automating Builds Automating Deployment Automating Testing Debugging with Models Using Multiple Views Architectural Description Domain Specificity Modeling Aspects How to Model Software Types of Information Level of Abstraction Style of Specification Domain-Specific Languages Business Ramifications Technical Ramifications Next Steps Language Anatomy Example Laneuaee 191 193 193 194 195 197 198 201 204 205 206 208 210 212 213 214 217 218 226 231 231 233 238 249 249 249 251 252 253 253 254 258 263 264 266 271 274 274 275 277 277 279 282
Chapter 9 Chapter 10 Chapter 11 Abstract Syntax Context-Free Grammars and BNF Metamodels Abstract Syntax Graphs Well-Formedness Rules Comparison of CFGs and Metamodels Concrete Syntax Serialization Syntax Semantics Translational Semantics Trace-Based Semantics Programming versus Modeling Families of Languages Language Families Tool Factories Tool Factory Architecture The State of the Art Systematic Reuse Software Product Families Software as a Product How Families Are Formed Working Within a Family Solving Problems in Advance The Role of Architecture Commonality and Variability Where Families Are Found Software Product Lines Creating Economies of Scope Required Adaptations Software Supply Chains Software Product Lines Product Line Development Product Line Analysis Product Line Design Product Line Implementation Product Development Problem Analysis Product Specification Collateral Development Product Implementation Product Line Evolution Product Line DeDlovment 285 286 289 293 294 297 299 306 309 310 312 318 319 321 321 328 328 333 337 337 338 338 340 341 342 344 345 347 348 350 355 358 359 359 361 375 379 382 382 382 385 385 391 391
xi Chapter 12 Chapter 13 Chapter 14 Chapter 15 Platform-Based Abstractions Platform-Based Abstractions Platform-Based Abstractions in Product Lines Properties of Platform-Based Abstractions Classes, Libraries, and Frameworks Class Frameworks Summary Components and Services Software Components Definition Interface Specifications Component Dependencies Component-Based Development Defining Product Line Component Architectures From Components to Services Service Components Business Protocols and Contracts Service-Oriented Architectures Web Services Technology What's Different This Time? Web Service Data Semantics WS Process Semantics Summary Mappings and Transformations Transformations Types of Transformation Vertical Transformations Horizontal Transformations Transformation Problems Model-to-Model Transformations Model-to-Code Transformations Solving the Composition Problem Solving the Traceability Problem Summary Generating Implementations Describing Transformations Mapping Rules Have IF-THEN Parts Implementing Mapping Rules Specifying Horizontal Transformations Describing Aspect Weaving Describing Refactoring Rules Patterns as Sets of Mapping: Rules 393 393 395 397 401 403 411 413 413 413 415 423 426 432 438 438 439 445 446 448 448 450 452 453 455 455 456 458 462 470 471 473 476 479 481 481 483 483 485 489 493 493 495 496
xii Contents Part III Chapter 16 Transformation Systems Black-Box and White-Box Transformations Grey-Box Transformation Systems Applying Black-Box Transformations Summary Software Factories in Depth A Software Factory Example A Review of the Approach Building an Online ecommerce Application Family Product Line Analysis Product Line Definition Problem Domain Scoping Solution Domain Scoping Business Case Analysis Product Line Design Product Line Architecture Development Product Line Requirements Mapping Product Line Implementation Asset Provisioning Asset Packaging Product Development Product Specification Conclusion 500 501 503 505 508 509 511 511 512 515 515 518 521 524 526 526 546 548 548 557 557 558 560 561 Chapter 17 Frequently Asked Questions How Do Software Factories Differ From...? How Do Software Factories Differ from RAD? 563 563 564 How Do Software Factories Differ from MDA? 567 How Do Software Factories Differ from the UP? 573 How Do Software Factories Differ from Agile Modeling? 577 How Agile Are Software Factories? 580 Agile Development Principles 580 Agile Development Practices 582 How Will Software Factories Be Adopted? 584 Types of Business Applications 586 Business Application Characteristics 586 How Mature Are Software Factories? 588 Language Technology 589 Tool Extensibility 589 Pattern Composition 590
xiii Deferred Encapsulation Standard Assets for Popular Domains How Should Software Factories Be Implemented? New Development Artifacts New Development Scope New Development Activities Implementing Software Factories What's Different This Time? Appendix A: Abstraction and Refinement 1 Appendix B: The Unified Modeling Language Bibliography Index 590 591 591 592 592 592 593 594 597 611 629 641