Software Factories:
Assembling Applications
with Patterns, Models,
Frameworks, and Tools
Jack Greenfield
Keith Short
WILEY
Contents
Preface Acknowledgments ForewordParti
Chapter 1 Chapter 2Introduction to Software Factories
Introduction Tools Lag Platforms
The Software Development Landscape Platform Technology Evolution Building Applications with Services Software Development Challenges Discontinuous Innovation
Notes
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 Notes XV xxiii xxvii
1
3 4 7 8 24 30 32 34 35 35 38 41 53 61 66 67 68 73 77 82 85vii
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 Notes 190
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 ViewsArchitectural 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 Notes
Language Anatomy
Example LaneuaeeContents ix
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 282Contents
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 Notes
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 Notes
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
Chapter 12
Chapter 13
Chapter 14
Chapter 15
Platform-Based Abstractions
Platform-Based AbstractionsPlatform-Based Abstractions in Product Lines Properties of Platform-Based Abstractions Classes, Libraries, and Frameworks
Class Frameworks Summary
Components and Services
Software ComponentsDefinition
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
Notes
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 SummaryNotes
Generating Implementations
Describing TransformationsMapping Rules Have IF-THEN Parts Implementing Mapping Rules
Specifying Horizontal Transformations Describing Aspect Weaving
Describing Refactoring Rules Patterns as Sets of Mapping: Rules
Contents xi
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 496xii Contents
Part III Chapter 16
Chapter 17
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 Notes
Frequently Asked Questions
How Do Software Factories Differ From... ? How Do Software Factories Differ from RAD?
500 501 503 505 508
509
511 511 512 515 515 518 521 524 526 526 546 548 548 557 557 558 560 561 563 563 564 How Do Software Factories Differfrom 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
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