往返工程
在模型驱动的体系结构上下文中的往返工程( RTE )是软件开发工具的功能,可同步两个或多个相关的软件工件,例如,源代码,模型,配置文件,文档等。当在多个工件中存在相同的信息时,就会出现往返工程,并且在更新某些文物时可能会出现不一致时。例如,仅在一个伪像(源代码)中添加了某些信息/更改,因此,它与其他工件(在模型中)中丢失/不一致。
概述
往返工程与传统的软件工程学科密切相关:远期工程(从规格中创建软件),反向工程(从现有软件中创建规范)和重新设计(了解现有软件并修改它)。往返工程通常被错误地定义为仅仅支持前进和逆向工程。实际上,将其与前进和逆向工程区分开的往返工程的关键特征是能够同步现有的工件,通过逐步更新每个人工制品以反映对其他文物的变化,这些人工制品同时发展。此外,向前的工程可以看作是RTE的一个特殊实例,其中仅存在规范,并且可以将反向工程视为仅存在软件的RTE的特殊实例。当软件更新以反映对先前反向工程规范的更改时,许多重新设计活动也可以理解为RTE。
类型
各种书籍描述了两种类型的RTE:
- 部分或单向RTE:对代码和模型的更高级别表示的更改反映在较低级别,但没有反映;可能允许后者,但可能不会影响高级抽象的局限性
- 完整或双向RTE:无论发生什么变化,较高和较低的代码和模型表示都会同步,如果其中任何一个都改变了
自动同步
往返工程的另一个特征是自动更新工件,以响应自动检测到的不一致之处。从这个意义上讲,它与可以是手动(传统上)和自动(通过自动生成或分析工件)的前进和逆向工程不同。自动更新可以是瞬时的,也可以是按需。在瞬时RTE中,所有相关的工件在每次更改中都会立即更新。在按需RTE中,工件的作者可以同时更新工件(即使在分布式设置中),并在某个时候选择执行匹配以识别不一致之处,并选择传播其中一些并调和潜在的冲突。
迭代方法
往返工程可能涉及迭代开发过程。将模型与修订的代码同步后,您仍然可以自由选择最佳工作方式 - 对代码进行进一步修改或更改模型。您可以随时沿任一个方向同步,并且可以根据需要重复多次循环。
软体
许多商业工具和研究原型支持这种形式的RTE;一本2007年的书清单列出了有能力的人,同时又列出了理性的玫瑰,ess-Model, bluej和fujaba,据说富士岛也能够识别设计模式。
限制
例如,2005年在Visual Studio上注明的书,例如,RTE工具中的一个常见问题是,模型逆转与原始工具不同,除非通过在源代码中留下费力的注释来帮助工具。 UML的行为部分对RTE构成了更多挑战。
通常,在某种程度上支持UML类图;但是,某些UML概念(例如关联和遏制)在许多编程语言中都不具有直接的表示形式,从而限制了创建代码的可用性以及代码分析/反向工程的准确性(例如,在代码中很难识别封存)。
在框架应用程序编程接口(API)的上下文中,实现了一种更可拖动的往返工程形式,该模型描述了通过应用程序对框架API使用的模型与该应用程序的代码同步。在这种情况下,API规定了可以在应用程序中使用框架的所有正确方法,该框架可以在代码中精确而完整地检测API使用情况,并创建实现正确的API用法的有用代码。此类别中的两个突出的RTE实现是特定于框架的建模语言和Spring Roo (Java)。
往返工程对于保持多个模型之间以及模型和对像管理组(OMG)模型驱动的体系结构中的代码至关重要。 OMG提出了QVT (查询/视图/转换)标准,以处理MDA所需的模型转换。迄今为止,已经创建了一些标准的实现。 (需要与RTE有关MDA的实用经验)。
争议
代码生成争议
来自模型的代码生成(前向工程)意味着用户抽象建模的解决方案,这些解决方案由某些模型数据含义,然后自动化工具源自模型零件或软件系统的所有源代码。在某些工具中,用户可以以源代码模板的形式提供程序源代码的骨架,然后在代码生成过程中将预定义令牌替换为程序源代码零件。
批评UML (如果用于MDA)图表的规格缺乏与程序源所涵盖的相同信息所需的细节。一些开发人员甚至声称“代码是设计”。
缺点
存在严重的风险,即生成的代码将与模型迅速不同,或者反向工程模型将失去对代码的反映,或者由于循环重新设计工作而导致的这两个问题的混合。
关于UML的行为/动态部分,诸如Statechart图之类的壮举中,编程语言中没有等效物。它们在代码生成期间的翻译将导致共同的编程声明(.EG) if,switch,enum
)丢失或误解。如果编辑和进口后,可能会导致不同或不完整的模型。用于代码生成阶段的代码段的模式实现和用户特定逻辑的代码段也是如此:互混合可能不容易被反向设计。
总体上缺乏用于建模的高级工具,这些工具可与现代IDE(用于测试,调试,导航等)相当,用于通用编程语言和特定于领域的语言。
软件工程的示例
也许最常见的往返工程形式是在数据建模和数据库建模中的UML(统一建模语言)模型与相应的源代码和实体 - 关联图之间的同步。
基于统一建模语言(UML)的往返工程需要三个用于软件开发的基本工具:
- 源代码编辑器;
- 属性和方法的UML编辑器;
- UML结构的可视化