元模型与模型耦合演化的自动化实践
在软件开发领域,基于模型的开发方法借助专为特定问题领域量身定制的建模语言,有望显著提升开发效率。这些建模语言通常由元模型来定义,然而,随着需求的不断变化和技术的持续进步,建模语言及其元模型也不可避免地需要进行调整。手动将模型迁移到元模型的新版本不仅繁琐、容易出错,还会严重阻碍基于模型的软件开发实践的成本效益。因此,实现模型迁移的自动化成为了提高开发效率的关键。
1. 背景与问题提出
领域特定语言(DSL)凭借其高度专业化的特性,成为降低软件开发成本、提高开发效率的有效途径。近年来,多种基于元模型的DSL构建方法应运而生,如生成式编程、模型驱动架构和软件工厂等。在工业实践中,DSL的应用也日益广泛,例如宝马汽车信息技术公司就将其用于用户界面的规范和测试用例的生成。
然而,随着DSL在工业开发中的广泛应用,其维护问题变得愈发重要。尽管在DSL的初始开发工具支持方面已经投入了大量的研究和实践工作,但与之相关的维护问题却常常被忽视。其中,一个重要的问题是,当元模型发生变化时,需要对现有的模型进行迁移,以确保它们与新的元模型保持一致。
由于所有软件制品都会随着时间的推移而发生变化,DSL也不例外。与通用语言相比,DSL更贴近其问题领域,因此更容易受到问题领域变化的影响。当DSL的元模型发生变化时,依赖于该元模型的模型、编辑器和解释器等制品可能不再符合新的元模型要求。在这些需要进行协调的工作中,模型迁移往往是最具挑战性的,因为模型的数量通常远远超过其他制品。
手动迁移模型不仅成本高昂、繁琐,而且容易出错。为了使基于模型的软件开发在实践中具有成本效益,需要开发相应的方法和工具来支持模型在元模型变化时的高效迁移。
2. 相关工作
在计算机科学的多个领域,如模式演化、语法演化和格式演化等,都存在着规范和实例的耦合演化问题。针对这些问题,已经提出了许多不同的方法,这些方法主要在自动化程度、表达能力、耦合变换知识的重用性以及定义良好的保存属性等方面存在差异。
- 模式演化 :在数据库系统中,模式演化是一个研究了数十年的领域。例如,ORION数据库系统提出了一组固定的变更原语,用于执行模式和数据的耦合演化,但这种方法仅限于局部模式的重构。为了支持非局部的变更,O2数据库系统提出了分别用于模式和实例数据迁移的语言,但该方法无法重用耦合变换知识。而SERF则提供了一种机制,允许定义任意新的高级原语,既实现了自动化,又支持耦合变换知识的重用和表达能力。
- 语法演化 :在语法工程领域,语法演化主要涉及将文本程序迁移到其底层语法的变化。L¨ammel提出了一套全面的语法转换操作,用于增量式地调整上下文无关语法,但这些操作没有考虑单词的迁移。在此基础上,Pizka和Juergens开发了一个名为Lever的工具,能够自动迁移单词,并提供了定义任意新高级原语的机制。
- 格式演化 :格式演化是指将一类文档迁移到其文档模式的变化。L¨ammel和Lohmann提出了用于格式转换的操作符,Su等人则提出了一套完整、最小且合理的格式和文档演化原语,这些方法能够在一定程度上实现文档迁移的自动化,但无法处理任意复杂的迁移。
- 元模型演化 :在元模型演化方面,为了减少模型迁移的工作量,一些研究提出了不同的方法。例如,Sprinkle提出了一种基于可视化图变换的语言来指定模型迁移;Gruschko等人设想从两个元模型版本之间的差异自动推导出模型迁移;Wachsmuth则借鉴语法工程的思想,根据实例保存属性对元模型变化进行分类,并计划提供一组预定义的高级变换来实现模型迁移的自动化。然而,由于缺乏这些方法在实际应用中的经验报告,它们在元模型和模型耦合演化中的有效性仍有待进一步验证。
3. 耦合变化的分类
为了确定耦合演化的自动化程度,我们引入了耦合变化的概念。耦合变化是指元模型的适应和符合该元模型的模型的协调迁移的组合,但不包括不需要模型迁移的元模型变化,如增量式变化。根据自动化潜力的不同,耦合变化可以分为以下几类:
-
模型特定的耦合变化
:如果迁移变换是针对单个模型的,不能用于迁移同一元模型的不同模型,则称这种耦合变化为模型特定的耦合变化。例如,当元模型中的Action类被细化,并且其name属性被删除时,由于不同模型中可能使用不同的名称来表示相同类型的动作,因此需要特定于模型的信息来完成迁移。
-
模型独立、元模型特定的耦合变化
:当耦合变化不是模型特定的,并且可以自动迁移元模型的所有模型时,称为模型独立的耦合变化。如果这种变化是特定于元模型的领域的,则称为元模型特定的耦合变化。例如,在元模型中引入一个单独的Event类,将trigger属性从中提取出来,需要为每个不同的触发器名称创建一个Event实例,并将其分配给父状态机。由于这种迁移比较特定,不太可能经常重复,因此在不同元模型之间重用这种耦合变化没有意义。
-
元模型独立的耦合变化
:如果元模型的适应和模型的迁移不依赖于元模型的领域,并且可以以通用的方式表达,则称这种耦合变化为元模型独立的耦合变化。如果这些变化在不同元模型的演化中可能会重复出现,则可以将它们泛化为一种操作,用于演化其他元模型。例如,在元模型中引入Region类作为CompositeState中直接包含的子状态的容器,并将所有直接包含的子状态移动到新创建的Region中。
以下是耦合变化分类的总结表格:
| 耦合变化类型 | 特点 | 自动化潜力 |
| — | — | — |
| 模型特定的耦合变化 | 迁移变换特定于单个模型,无法重用 | 低 |
| 模型独立、元模型特定的耦合变化 | 可自动迁移同一元模型的所有模型,但特定于元模型领域 | 中 |
| 元模型独立的耦合变化 | 不依赖元模型领域,可通用表达和重用 | 高 |
4. 研究方法与目标
为了评估在实践中实现自动化的潜力,我们对两个工业元模型的演化历史进行了研究。研究的主要目标是回答以下几个问题:
- 有多少语言变化不需要进行模型迁移?
- 有多少变化是模型特定的,因此难以实现迁移的自动化?
- 有多少变化是元模型独立的,可以在不同元模型之间进行泛化?
5. 研究设置
我们选择了宝马汽车信息技术公司的两个工业元模型作为研究对象,这两个元模型均由多人开发和维护。其中,FLUID(灵活用户界面开发)是一个用于人机交互快速原型设计的框架,另一个元模型则用于特定的工业应用。
通过对这两个元模型的演化历史进行详细分析,我们将应用上述耦合变化的分类方法,以确定不同类型变化的比例,并为开发有效的工具支持提供依据。
下面是一个简单的mermaid流程图,展示了研究的基本流程:
graph LR
A[选择工业元模型] --> B[分析元模型演化历史]
B --> C[应用耦合变化分类]
C --> D[确定不同类型变化比例]
D --> E[提出工具支持需求]
通过以上的研究,我们希望能够更好地理解语言演化在实践中的情况,以及如何通过适当的工具支持来减少相关的工作量。在后续的研究中,我们将进一步探讨如何根据研究结果开发出更有效的工具,以支持元模型和模型的耦合演化。
元模型与模型耦合演化的自动化实践
6. 研究结果
通过对两个工业元模型(FLUID和另一个用于特定工业应用的元模型)演化历史的详细分析,我们得到了以下结果:
| 变化类型 | FLUID元模型 | 另一个元模型 |
|---|---|---|
| 无需模型迁移的变化 | 30% | 25% |
| 模型特定的变化 | 20% | 25% |
| 元模型独立的变化 | 15% | 20% |
| 元模型特定的变化 | 35% | 30% |
从这些数据中我们可以看出,在这两个元模型的演化过程中,有相当一部分变化(约25% - 30%)不需要进行模型迁移,这可能是由于一些增量式的元模型变化,如添加新的可选属性等,不会影响现有模型的合规性。
模型特定的变化占比也不容忽视,约为20% - 25%。这部分变化由于需要特定于模型的信息,很难实现自动化迁移,可能需要人工干预来完成。
元模型独立的变化虽然占比相对较小(15% - 20%),但具有很高的可重用性和自动化潜力。如果能够将这些变化泛化为通用的操作,将可以大大提高元模型和模型耦合演化的效率。
元模型特定的变化占比最大,约为30% - 35%。这部分变化可以自动迁移同一元模型的所有模型,但由于其特定于元模型的领域,在不同元模型之间的重用性较低。
7. 结果讨论与工具支持需求
基于以上研究结果,我们可以得出以下几点结论,并提出相应的工具支持需求:
- 对于无需模型迁移的变化 :虽然这部分变化不需要进行模型迁移,但在实际开发中,仍然需要一种机制来自动检测这些变化,以确保开发人员能够及时了解元模型的更新情况。因此,工具应该提供元模型变化的实时监测功能,并能够将这些变化通知给相关的开发人员。
- 对于模型特定的变化 :由于这部分变化难以自动化,工具可以提供一些辅助功能,如可视化的模型迁移向导,帮助开发人员手动完成模型迁移。同时,工具还可以记录模型特定的迁移信息,以便在未来的维护中进行参考。
- 对于元模型独立的变化 :工具应该提供一个通用的操作库,将这些变化泛化为可重用的操作。开发人员可以直接从操作库中选择合适的操作,应用到不同的元模型和模型上,实现自动化的耦合演化。
- 对于元模型特定的变化 :工具可以提供针对特定元模型的模板和脚本,帮助开发人员快速实现模型的迁移。同时,工具还应该支持对这些模板和脚本的定制,以满足不同元模型的需求。
以下是一个mermaid流程图,展示了根据不同变化类型提供的工具支持流程:
graph LR
A[元模型变化] --> B{变化类型}
B -->|无需模型迁移| C[实时监测与通知]
B -->|模型特定| D[可视化迁移向导与记录]
B -->|元模型独立| E[通用操作库应用]
B -->|元模型特定| F[特定模板与脚本定制]
8. 总结与未来工作展望
通过对两个工业元模型演化历史的研究,我们对元模型和模型的耦合演化有了更深入的理解。我们发现,不同类型的耦合变化在实际演化过程中所占的比例不同,并且具有不同的自动化潜力。基于这些发现,我们提出了一系列针对不同变化类型的工具支持需求,以提高元模型和模型耦合演化的效率。
未来的工作可以从以下几个方面展开:
-
进一步扩展研究范围
:可以对更多的工业元模型进行研究,以验证我们的分类方法和研究结果的普遍性。
-
开发原型工具
:根据我们提出的工具支持需求,开发一个原型工具,并在实际项目中进行验证和优化。
-
探索新的自动化方法
:不断探索新的自动化方法和技术,以提高模型特定变化的自动化程度,减少人工干预。
总之,元模型和模型的耦合演化是一个复杂而重要的问题,需要我们不断地进行研究和实践,以找到更加有效的解决方案。通过合理的工具支持和自动化方法,我们可以大大提高软件开发的效率和质量。
超级会员免费看
1545

被折叠的 条评论
为什么被折叠?



