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