Models, Code Generation, and Transformations
Jean Bezivin (INRIA, LINA, University of Nantes) introduced GTT, covering both its history and underlying theory. Of everything he said, I was most impressed when he welcomed us to world of software engineering where "everything is a model"! He reminded us of the '80s, when everyone was claiming that "everything is an object" and how later, help was needed from non-OO concepts like UML, use cases, and patterns. Alas, not everything could be an object. The solution to these "failures" of the object model is now to accept everything as a model where a model is understood as a representation of a system in a certain context. This may sound like escapism into grand ideas but it turns out to be quite workable. It addresses, for example, that many of these "non-object" concepts like use cases and patterns have often lacked much "rigueur" and were often presented as recipes from a cookbook. More importantly, it is now accepted that no single "type" of model is good enough, that many different types of models are necessary to represent different aspects of a same system, and that as much emphasis needs to be put on bridging these models together as focusing on each one.
Bezivin called the system/context pair defining a model "the technical space". He also managed to present 20 years of software engineering history in three hours! My best summary of this is that:
- Standards and tools frameworks for model-driven engineering exist from all the big players and academia--Eclipse and Bezivin's Atlas system come to mind.
- Models can be more or less formal (mathematical, for instance) and people have a hard time agreeing on how much so.
- Models of models are called "meta-models" and are useful to bring in many models into the same framework and to manage them.
- Models can be transformed from one to another and that you talk about vertical transformations when you map models between different abstraction layers (for example, requirements, design, PIM, PSM, Java)and horizontal when you stay with the abstraction level such as UML, OOD, refactoring or source-code transformation.