软件工程/重构/往返工程简介
往返工程 (RTE) 是软件开发工具的一项功能,它同步两个或多个相关的软件工件,例如源代码、模型、配置文件和其他文档。当相同的信息存在于多个工件中时,就会出现对往返工程的需求,因此,如果不一致地更新所有工件以反映给定更改,则可能会发生不一致。例如,某些信息仅在一个工件中添加或更改,因此它在其他工件中丢失或不一致。
往返工程与传统的软件工程学科密切相关:正向工程(从规范创建软件)、逆向工程(从现有软件创建规范)和重构(理解现有软件并对其进行修改)。往返工程通常被错误地定义为仅仅支持正向工程和逆向工程。事实上,区别于正向工程和逆向工程的往返工程的关键特征是能够同步现有的工件,这些工件是通过增量更新每个工件来反映对其他工件的更改而并发演化的。此外,正向工程可以看作是 RTE 的一个特例,其中只有规范存在,而逆向工程可以看作是 RTE 的一个特例,其中只有软件存在。当软件被更新以反映对先前逆向工程规范所做的更改时,许多重构活动也可以被理解为 RTE。
往返工程的另一个特点是自动更新工件以响应自动检测到的不一致。从这个意义上说,它不同于正向工程和逆向工程,正向工程和逆向工程既可以是手动的(传统上),也可以是自动的(通过自动生成或分析工件)。自动更新可以是即时的,也可以是按需的。在即时 RTE 中,所有相关工件会在对其中一个工件进行更改后立即更新。在按需 RTE 中,工件的作者可以并发地演化工件(即使是在分布式环境中),并在某个时刻选择执行匹配以识别不一致,并选择传播其中一些不一致并协调潜在的冲突。
也许最常见的往返工程形式是 UML(统一建模语言)模型和相应的源代码之间的同步。许多商业工具和研究原型(例如 FUJABA)支持这种形式的 RTE。通常,UML 类图在某种程度上得到了支持;但是,某些 UML 概念,例如关联和包含在许多编程语言中没有直接的表示,这限制了创建代码的可用性和代码分析的准确性(例如,包含很难在代码中识别)。UML 的行为部分对 RTE 构成了更大的挑战。
在框架应用程序编程接口 (API) 的上下文中,实现了一种更易于处理的往返工程形式,其中描述框架 API 被应用程序使用的模型与该应用程序的代码同步。在这种情况下,API规定了所有正确使用框架的方法,这允许精确且完整地检测代码中的 API 使用情况,以及创建实现正确 API 使用情况的有用代码。这类中的两个突出 RTE 实现是特定于框架的建模语言和 Spring Roo。
往返工程对于在对象管理组 (OMG) 的模型驱动体系结构中保持多个模型之间以及模型与代码之间的一致性至关重要。OMG 提出了 QVT(查询/视图/转换)标准来处理 MDA 所需的模型转换。迄今为止,已经创建了该标准的一些实现。(需要介绍与 RTE 相关的 MDA 的实际经验)。