There seems to be some consensus about the qualities of MDE, but what is exactly MDE? I will try to address this question in this post. First we need to consider separately the base technology and the application scope.
1. The base technology of MDE
The main idea is to consider a level of uniform representation where all artifacts are models, composed of model elements. A model is a typed graph which elements (edges and nodes) are typed by the nodes of another graph called its reference graph (we say that it conforms to
the reference model). At the bottom of the hierarchy we have terminal models that represent a given system. A terminal model conform to a metamodel. Usually we have a three-level hierarchy made of terminal models, metamodels and a metametamodel. The relation of conformance
are the two key relations in MDE:
Most modeling frameworks use a three-level hierarchy of metalevels. They differ mainly on the metametamodel used (MOF, ECore, KM3, etc.).
MDE draw its strenght from the unification principle. This means that most artefacts may be considered as abstract models. This is illustrated below.
2. The application scope of MDE
Initially MDE had a limited scope, mainly in the area of software development. People used to talk (and still talk) about MDD (Model Driven Development) to qualify this kind of application where executable code is generated from one or more abstract models. When these metamodels conform to OMG specified metamodels, we talk about MDA(tm) for Model Driven Architecture. Of course, one of the main metamodel supported by OMG is UML.
MDD has been and is still quite successful and many success stories have demonstrated an excellent ROI. But at the same time several new possible applications of the base MDE technology have been discovered and now MDD is only one particular branch of MDE.The first new MDE application area is MDRE (Model Driven Reverse Engineering). Contrary to MDD where code is produced from models, in MDRE models are produced from code. To emphasis this difference, the OMG calls this approach ADM (Architecture Driven Modernization), the reverse of MDA. The techniques for extracting models from legacy code (backward engineering) are different from the techniques for producing code from models (forward engineering), but both heavily use model transformation.
The similarity between MDD and MDRE is that both approaches rely on models of code. There is now an important trend that considers that MDE base technology can be even more broadly applicable to models of the data.
In the previous figure there are three kinds of MDE approaches:
- MDSD (Model Driven Software Development) for generating code from models. Transformations are here executed at <b>development<b> time.
- MDRE (Model Driven Reverse Engineering) for generating models from code. Transformations are here frequently executed at <b>maintenance<b> time. The typical application here is software modernization.
- RTM (Run Time Modeling) for executing model transformation at run time, not at development or maintenance time. The typical application here is to achieve <b>interoperability between heterogeneous systems<b>.
When we look at OMG standard, MDA corresponds to MDSD and ADM corresponds to MDRE. There is still no precise OMG standard for RTM. Note that RTM is mainly coping with models of data and not models of code and this is a big difference with MDSD and MDRE. RTM is often used in MDI (Model Driven Interoperability).