Vamos a intentar explicar la diferencia entre todos estos acrónimos.

Yo utilizo “model-based engineering” (MBE) o “model-based development” para hablar de una versión más suave de model-driven engineering (MDE). Para mi, MBE describe un proceso donde los modelos software tienen un papel importante pero donde no son necesariamente los motores del proceso de desarrollo (es decir, no “dirigen” el proceso como en MDE). Un ejemplo sería un proceso donde en la fase de análisis se utilizan modelos para especificar el sistema pero despues estos modelos no se utilizan para automatizar la creación de código. El modelo es importante pero no es el “conductor” del proceso. Por lo tanto, veo MBE como un superconjunto de MDE. Todos los procesos model-driven son model-based pero al revés no es cierto.

Por lo que respecta a los demás conceptos, simplificando un poco, en mi opinión MDD es un paradigma de desarrollo que considera los modelos software como principal elemento del proceso de desarrollo. Normalmente, además, a partir de estos modelos se genera de una forma semi-automática el codigo. MDA es la visión particular que tiene OMG de MDD y por lo tanto se basa en el uso de los estándares OMG. Esto hace que yo vea MDA como un subconjunto de MDD. En cambio, MDE sería un superconjunto de MDD ya que como la E de MDE sugiere, MDE va más allá de las actividades de desarrollo y incluye también otros procesos adicionales de la ingeniería del software como la evolución del sistema o el model-driven reverse engineering de un sistema legado, siempre basándose en el uso de modelos.

Todo esto puede resumirse de una forma visual en la siguiente figura (inspirada en la qué encontré en la Master thesis de David Ameller (supervisada por Xavier Franch )