Enterprise Engineering Forum

企业工程论坛
Categorized as: 模型驱动系统,系统实现,系统架构   Tagged as: ,, ,

用模型驱动机制解释模型驱动应用与模型驱动工程及其本质区别*

Author: 余彤鹰,  Source: 企业工程论坛,  Published: 2016-08-13

Excerpt: 模型驱动机制(MDM)不仅是模型驱动应用(MDApp)的基础,同样是模型驱动架构和模型驱动工程 (MDA/MDE)的基本原理。基于MDM可以更加清楚地理解MDE,还能看到国际软件工程产、学两届十多年探索都未曾明了(或是被忽略)的根本问题。

模型驱动机制 (model-driven mechanism, MDM) 由三个部件构成:操作装置 (Operational Device) 根据建模知识 (Modeling Knowledge) 使用应用模型 (Applied Model);应用模型符合建模知识,所以是可以随时改变的,在这个意义上说它“驱动”这个系统适应目标事物的变化。下面先呈现了MDM的示意图,然后将逐一图解传统软件开发、模型驱动的软件开发以及模型驱动应用,都是基于模型驱动机制达成的,所不同的是“应用模型”所表示的目标、形式以及“操作装置”的具体实现[1]

f1-triangle-mdm
 以上图解仅包括了MDM属于“系统”的部分,其中,模型和操作装置二者的共同对象(目标事物)是至关重要的(也是实际上常常被人们不知不觉搞糊涂的地方),所以有必要给出下面这个更完整的图:
mdm20130301
接下来,我们用模型驱动机制对软件开发系统(传统的或模型驱动的)和模型驱动的应用系统等做出诠释。
传统的软件开发用书面设计文档来描述我们想要的系统(目标系统)。设计文档需要遵循一些必要的约定(规范;注意,实际上语言也是约定之一),程序员根据这些约定(规范)正确地理解设计文档,实现目标系统。用MDM解释是这样的:设计文档就是目标系统的模型,它符合规范(即模型化知识);程序员就是“操作装置”,他们根据规范(模型化知识)理解和解释设计文档(模型)创作目标系统的代码。给出不同的设计文档,只要遵守程序员所知的那些规范,就会被正确地理解,从而得到预期的目标系统。如下图所示。
f2-mdm-traditional-sd
模型驱动开发(model-driven development, MDD)或模型驱动工程model-driven engineering)对目标系统建立了更为严格的模型,例如UML模型。这些模型严格地遵循元模型规范(例如MOF,UML标准),程序员根据元模型来理解和使用模型,开发符合模型的目标系统。其中所谓“元模型”也就是模型驱动机制中的“模型化知识”。很容易想到,如果系统模型是形式化的,元模型也是形式化的,似乎意味着可以用一套专门的程序来代替手工编程工作,这个程序称为代码生成器(code-generator)。这就是模型驱动开发 (MDD),也即模型驱动架构(model-driven architecture, MDAtm)及模型驱动工程(MDE)的核心场景。完全根据目标系统模型而自动产生目标系统代码,正是MDE/MDD的基本追求。
f3-mdm-code-gen
以上用MDM轻松“破解”了传统软件开发系统和模型驱动的软件开发系统的异同。然而MDM的提出一开始就是为了另一种我们认为更为重要的意义:实现基于模型的应用软件系统——强调模型的动态性,称之为模型驱动应用系统(model-driven application systems, MDApps)。在这样的应用系统中,MDM的应用模型所表示的目标系统,是应用系统工作(应用)的目标,例如企业/业务。这个模型要符合形式化的模型化知识(图中示为元模型,它同样应该/可以是形式化的)。这样,就可以实现一个程序(操作装置),根据元模型(模型化知识)来解析/使用应用目标的模型(例如企业/业务模型),来实现(输出)与目标相关联的功能。
f4-mdea-mdm
让我们将话题转回模型驱动工程 (MDE)。
上面的图解,都是按照笔者最初提出MDM (2005) 时的风格绘制的 ,为了更加信服的说明,另外绘制了符合MDE领域习惯的图解。如下图,右边的四个盒子(蓝色边框)及其之间的联系,等同采自 Bézivin (2004) [2],这个结构是文献中对MDE的基本原理最普遍采纳的解释。我们给它加上左边的盒子:MDE文献中的图示常将其忽略,尽管对模型-元模型-元元模型结构起作用的方式的说明,都符合下图这种表示。加上了“操作装置”,就构成了完整的模型驱动机制(橙色边框部分,与上图的三元结构相比,这里标出了MDM“应用模型”的“目标事物”(即开发的目标系统)。

在此还可顺便补充一点细节:MDE第一个有影响的动议,即OMG的MDAtm。在MDA最初的阐述中,并未将目标设定为完全根据模型的自动生成代码(因为并不清楚可能达到何种程度或具有何种限制)。但在MDE (MDA)活跃的十多年时间里,实现自动代码生成基本上就是这个圈子的主题[3]。用MDM的结构可以很明确地把完全自动生成代码或人工生成代码这两个场景统一表示出来:这就是为何图中MDM的“操作装置”位置标示为“代码生成器”或“程序员”。

mde-mdapp-fig1

从字面上看,模型驱动工程或软件开发 (MDE/MDSD) 和模型驱动应用 (MDApps)都是“模型驱动的”(model-driven);这个一致的东西,就是MDM基本原理。这个阐释是笔者的独特贡献。它们并不矛盾(然而从一开始我们就很清楚二者的区别[4])。你尽可以用MDE/MDSD的方式来开发一个MDApp,如下图,其中有两个MDM构造(其中MDE部分的MDM构造均省略了“操作装置”,即代码实现者),MDE围绕着“系统模型”展开,而MDApp围绕着应用模型(这里特指系统应用目标事物的模型)。读懂这个图有一个要点是不能忽略的:应用模型是工作在应用系统的“运行时”。

mde-mdapp-fig2

 

在MDE领域总结了一句著名的口号:“Models Everywhere.”( Jean Bézivin),基本上是说开发过程上的各种对象(目标系统,包括测试、部署等)都表示为模型,然而,在笔者的工作之外,几乎看不到有人清楚地意识到或明白地提出目标事物的模型如何能够在运行时直接为应用系统工作(而不是作为需求说明的一部分用来建立代码),由此建立模型驱动的应用系统。即使在强调“运行期模型”的分支(models @runtime, 参见[5]),其模型依然是系统(软件)模型。我们可以看到,在MDE的一些阐述中,对于系统模型和应用目标事物模型的区别基本上还是清楚的,然而他们对这个最重要的模型(应用对象的模型)的关注,也就停留于此。David Frankel[6] 是关于MDA的早起权威著作之一,其中阐述了这个领域对模型的基本分类,如下 (根据其中的图8.1 “Model taxonomy.”)

Model

  • Business Model (a.k.a. Domain Model)
  • System Model
    • Logical Model
      • Requirements Model (Computation-Independent)
      • Computational Model
        • Platform-Independent Model (PIM)
        • Platform-Specific Model (PSM)
    • Physical Model (Deployment)

 

其中,下划线标出的是 抽象类,其余五种为 具体类。这五种具体类才是对一个应用最重要的模型。书中还进一步说明了这些模型关联的不同角色,其中对应五种具体类模型的,见下表:

 

Table 1. Some of MDA personas (roles) related to the five kinds of models.

Kinds of Models Created By Used By
Business Model Business analyst Requirements analyst
Requirements Model (C.I.) Requirements analyst Application engineer
Platform-Independent Model (PIM) Application engineer Model transformation tool
Platform-Specific Model (PSM) Model transformation tool Deployment engineer
Physical Model (Deployment) Deployment engineer Network administrator

 

这些模型,实际上,这些模型顺序地出现在如下图所示的周期循环中:

fig1-frankels-models

在Frankel的书中,还没有出现CIM这个缩写。在OMG的 MDA Guide 1.0.1,对于CIM的定义是含混的。实际上,这个地方是国际软件工程产学两届几十年都没有真正澄清(或没有留意?)的关键点,CIM模型的目标事物是什么?是软件系统还是软件系统的应用目标事物(业务)?如果是软件系统模型的话,那么它和PIM还有什么本质区别吗?至少在实践上,似乎无需区别。实际上我们也可以看到,MDE的实践者,通常都是在PIM – PSM – Physical Model / code这里做文章,建立平台,实现某种基于模型的代码自动生成。然而PIM不可能凭空生成,怎样从Business Model到Requirements Model (或CIM?)变成或产生出表示系统的PIM?这是国际软件工程(MDE)产学两界从未真正弄清楚的最关键问题之一,直到他们承认过去十几年的MDE探索不尽如意(甚至是失败)[7],仍未见其反思到这个要点。

——–
[1] 最初的阐述(2005),参见《模型驱动机制与模型驱动系统(MDM&MDS)》http://www.ee-forum.org/wp/pub/ty/2010-01-p155.html。新近的系统阐述(2013),见《模型驱动应用(MDApp):以模型驱动机制跨越业务与信息技术鸿沟》http://www.ee-forum.org/wp/pub/ty/2012-12-p3427.html

[2] Bézivin, Jean. “In search of a basic principle for model driven engineering.” Novatica Journal, Special Issue 5.2 (2004): 21-24. (a brief introduction with some illustrations, see What is MDE? on his blog.)

[3] MDE还有一个方向,就是直接建立“可执行的模型”。然而,模型可执行了,与所谓“代码”或“程序”的区别在哪里,是需要澄清的问题,企业工程论坛也有一些文章涉及这背后的问题,例如:《建模和编程的本质区别是什么》http://www.ee-forum.org/wp/pub/ty/2011-03-p2665.html

[4] 参见企业工程论坛上2004-2006年的一些讨论,笔者当时的一些陈述汇总在《企业应用与信息系统架构及模型驱动系统MDS(一)》http://www.ee-forum.org/wp/pub/ty/2010-01-p1111.html等几篇文章中。

[5] Model-Driven Applications and Runtime Models, http://www.ee-forum.org/wp/pub/ty/2013-04-p3531.html

[6] Frankel, D. S. “Model Driven Architecture: Applying MDA to Enterprise Computing.” Wiley Publishing, Inc. 2003.

[7] 参见《模型驱动软件开发与工程的现状》http://www.ee-forum.org/wp/pub/ty/2011-11-p3013.html等文。

* 本文汇集了以下几篇短文的主要内容,图直接从中取来未予重绘,故其编号有所重复。

  • Model-Driven Mechanism and Model-Driven Systems, https://thinkinmodels.wordpress.com/2013/03/02/model-driven-mechanism-and-model-driven-systems/
  • Using Model Driven Mechanism to Explain Model Driven Software Development, https://thinkinmodels.wordpress.com/2012/01/19/using-model-driven-mechanism-to-explain-model-driven-software-development/
  • Model-Driven Applications vs. Model-Driven Engineering, http://www.ee-forum.org/wp/pub/ty/2013-03-p3522.html
  • On Some Main Kinds of Models in MDE/MDSD, http://www.ee-forum.org/wp/pub/ty/2013-03-p3526.html

 

Copyright

  本发布物版权归原作者所有,经原作者许可在企业工程论坛(EE-Forum.org)公开发布,并允许个人及公益性机构非牟利性使用及传播。传播中需保持从标题、署名到各项内容及此声明包括链接地址等完整内容不变。引用或摘编文中内容或观点应符合公认准则。其它机构,或牟利性使用,请预先取得作者许可。保留一切未说明的权利。
  详细说明见: http://www.ee-forum.org/about/copyright ,管理者电子邮箱:admin(at)ee-forum(.)org

Cite Style

GB7714 style: 余彤鹰. 用模型驱动机制解释模型驱动应用与模型驱动工程及其本质区别*[EB/OL]. 企业工程论坛, http://www.ee-forum.org/wp/pub/ty/2016-08-p3768.html, 2016-08-13[2017-03-28 08:01]

Chicago style: 余彤鹰, "用模型驱动机制解释模型驱动应用与模型驱动工程及其本质区别*", 企业工程论坛, http://www.ee-forum.org/wp/pub/ty/2016-08-p3768.html(accessed 2017-03-28 08:01)

Posted by   2016-08-13(Original)   Hits 202   Modified 2016-08-13
Prev Post: 
Next Post: 

Related Entries:

什么是模型驱动应用
元数据驱动的动态网络服务系统与方法:有关模型驱动应用的最新美国专利
跳出软件工程:Bezivin的模型驱动工程新视野
模型即所能
模型驱动机制与模型驱动系统(MDM&MDS)

Leave a Response

You must be logged in to post a comment.