Foreword
Acknowledgments
Introduction
Purpose and Use of Models
Modeling for Software Development
How to Read this Book
MDSE Principles
MDSE Basics
Lost in Acronyms: The MD* Jungle
Overview of the MDSE Methodology
Overall Vision
Target of MDSE: Domains, Platforms, Technical Spaces, and Scenarios
Modeling Languages
Metamodeling
Transformations
Model Classification
MDSE Adoption in Industry
Tool Support
Drawing Tools vs. Modeling Tools
Model-Based vs. Programming-Based MDSE Tools
Eclipse and EMF
Criticisms of MDSE
MDSE Use Cases
Automating Software Development
Code Generation
Model Interpretation
Combining Code Generation and Model Interpretation
System Interoperability
Reverse Engineering
Model-Driven Architecture (MDA)
MDA Definitions and Assumptions
The Modeling Levels: CIM, PIM, PSM
Mappings
General-Purpose and Domain-Specific Languages in MDA
Architecture-Driven Modernization
Integration of MDSE in your Development Process
Introducing MDSE in your Software Development Process
Pains and Gains of Software Modeling
Socio-Technical Congruence of the Development Process
Traditional Development Processes and MDSE
Agile and MDSE
Domain-Driven Design and MDSE
Test-Driven Development and MDSE
Model-Driven Testing
Test-Driven Modeling
Modeling Languages at a Glance
Anatomy of Modeling Languages
General-Purpose vs. Domain-Specific Modeling Languages
General-Purpose Modeling: The Case of UML
Design Practices
Structure Diagrams (or Static Diagrams)
Behavior Diagrams (or Dynamic Diagrams)
UML Tools
Criticisms and Evolution of UML
UML Extensibility: The Middle Way Between GPL and DSL
Stereotypes
Predicates
Tagged Values
UML Profiling
Overview on DSLs
Principles of DSLs
Some Examples of DSLs
Defining Modeling Constraints (OCL)
Developing your Own Modeling Language
Metamodel-Centric Language Design
Abstract Syntax
Concrete Syntax
Language Ingredients at a Glance
Example DSML: sWML
Abstract Syntax Development
Metamodel Development Process
Metamodeling in Eclipse
Concrete Syntax Development
Graphical Concrete Syntax (GCS)
Textual Concrete Syntax (TCS)
Model-to-Model Transformations
Model Transformations and their Classification
Exogenous, Out-Place Transformations
Endogenous, In-Place Transformations
Mastering Model Transformations
Divide and Conquer: Model Transformation Chains
HOT: Everything is a Model, Even Transformations!
Beyond Batch: Incremental and Lazy Transformations
Bi-Directional Model Transformations
Model-to-Text Transformations
Basics of Model-Driven Code Generation
Code Generation Through Programming Languages
Code Generation Through M2T Transformation Languages
Benefits of M2T Transformation Languages
Template-Based Transformation Languages: an Overview
Acceleo: An Implementation of the M2T Transformation Standard
Mastering Code Generation
Excursus: Code Generation Through M2M Transformations and TCS
Managing Models
Model Interchange
Model Persistence
Model Comparison
Model Versioning
Model Co-Evolution
Global Model Management
Model Quality
Verifying Models
Testing and Validating Models
Collaborative Modeling
Summary
Bibliography
Authors' Biographies