跳轉到內容

軟體工程/重構/往返工程簡介

來自華夏公益教科書,開放書籍,開放世界

往返工程 (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 的實際經驗)。


參考文獻

[編輯 | 編輯原始碼]


[編輯 | 編輯原始碼]
華夏公益教科書