Model Driven Engineering
Model-driven engineering (MDE) or Model-driven software engineering (MDSE) is a software development methodology which focuses on creating and using domain models. Domain models are abstract representations of a excerpt of the real world. They contain and organize the knowledge and activities that govern a particular application domain. The importance of the information that is contained in the models cannot be exaggerated. The information can automatically be checked for consistency and can be used to generate software which would have to be coded manually without the formel models.
Today every developer has an individual mental model of the software that (s)he is programming. This is usually called „analysis“ and „detail design“ of the software solution and is done „on the fly“ by the developer. Usually there is only a minimum documentation of the design ideas, data structures, behaviour and overall architecture of the code. The developer thinks that everything is explained by reading the program code. But even using the most powerful and expressive programming language the code is NOT self-explanatory. It describes on a detail level how a detail is handeled or calculated but gives no motivation or further background information about the selected design approach and the context.
On this level it DOES NOT MATTER whether you are using FORTRAN, Scala, Java or a custom DSL. The program design, the DSL design, the system architecture, the runtime context, the legal constraints of the customer is usually not contained in the program. By chance you can find some comments sprinkled across the code that give some descriptions or context references.
Model-Driven Engineering is a unified methodology in which software engineering / development is seen as a reiterating process of model aquisistion, refinement and integration. The ultimate goal of MDE is to get an executable model, e.g., by generationg source code.
The following text gives some fundamental (not only technical) resasons for using MDE in software development:
And for those who may think they are already familiar with MDE, here