AI助手AutoDev輔助遺留系統改造:四大特性幫你現代化舊系統

代碼爲聘禮 2024-02-20 03:46:07

去年 8 月,在看到 IBM 在自家的 watsonx Code Assistant 中加入了 COBOL 語言轉 Java 的功能後。在分析了一下午之後,我似乎理解了它的工作思想,以及應該如何去設計這樣的 AI 輔助工具。而考慮到 AutoDev 並非專門爲遺留系統改造而設計的,所以只能將相同的功能以不同的方式結合到一起。

隨著,我們在輔助測試和 SQL 的完善,在 AutoDev 中具備了基礎的輔助遺留系統改造功能:

輔助遷移測試的 API 數據生成。輔助知識管理的文檔生成。基于注釋文檔的活文檔業務體系。面向對象的遺留代碼重構。PL/SQL 代碼生成與遷移 Java 代碼。

詳細可以參見 AutoDev 場景文檔系列:https://ide.unitmesh.cc/scenes/legacy-migration.html 。

遺留系統遷移的 AI 範式

在過去的幾年裏,Thoughtworks 在行業內分享了一系列遺留系統改造的經驗,絞殺者模式 vs 修繕模式、N 步重構法等。作爲一個寫過幾個重構工具的磚家,我也在五年前編寫了《系統重構與遷移指南》(https://migration.ink/)。

從模式上來說,遺留系統重構的過程可以簡單分爲:

理解現有業務設計與拆分模塊構建測試防護網代碼重構以遷移

根據不同的系統在實現上略有差異,回到 IBM 的 COBOL 遷移工具的設計中,幾乎以上述的過程是相似的:

理解。通過可視化的方式分析代碼、數據、依賴重構。將 COBOL 程序解耦爲模塊化的 COBOL 架構轉換。先爲目標代碼編寫測試,再生成對應的 Java 代碼。

但是,在不同的場景上會出現一些差異,這也是我們在設計工具時所需要考慮的。

AI 遺留系統重構工具設計

結合我們豐富的遺留系統重構經驗,我們還是可以按上述的幾個步驟來構建 AI 工具。

理解業務:業務理解與可視化

遺留系統的一大痛點是沒有知道業務知識,所以在生成式 AI 的加持下,問題域可以變爲:

如何結合從現有的代碼中知道業務的實現。即結合語義化搜索與 RAG,將用戶的查詢轉換爲代碼搜索,最後交由 AI 來總結。如何可視化業務邏輯。在不同的場景之下,實現功能的要求也是不一樣的。從可視化的角度來說,我們可以將代碼轉換爲 DSL,再結合可視化工具來展示。

如結合我們以往的工具,我們在 AutoDev 的文檔生成功能中添加了活文檔(Living Documentation)的功能,你可以結合注解從現有的邏輯中可視化業務。

如下是一個結合 AutoDev 生成活文檔的示例:

@ScenarioDescription( given = "a file with name $filename and program text $programText", when = "the function tryFitAllFile is called with maxTokenCount $maxTokenCount, language $language, and virtualFile $virtualFile", then = "the function should return an ErrorScope object with the correct values")

隨後,就可以清晰地呈現已有的邏輯實現。

測試構建:測試數據生成與集成測試生成

通常來說,爲了代碼修複後功能是正常的,需要針對于 API 級別進行功能測試。所以,我們需要結合 API 測試工具或者是最外層的 Controller 進行測試。

測試數據測試。在結合生成式 AI 時,我們可以結合靜態分析從入口生成測試數據。即我們在 AutoDev 中提供的測試數據生成功能。集成測試生成。可以結合直接使用 AutoDev 的一鍵生成測試功能,可以生成對應的 Controller 測試等。

有了足夠的測試防護網之後,我們就可以開始進行對應的代碼轉換。

代碼翻譯:從 xx 語言到 xx 語言

盡管 AI 翻譯跨語言的代碼時,並不是那麽准確,可能出現一些 API 錯誤。諸如于,在 PL/SQL 中的函數寫法不一致,導致在翻譯成 Java 時會出現函數不存在。因此,我們需要一次性的將一段存儲過程的代碼翻譯完,以確保翻譯是通過的。

對應的,這個功能在 AutoDev 上的實現便是自定義 Prompts,以支持更豐富的翻譯功能。

針對特定語言翻譯:PL/SQL 示例

由于不同語言間存在一些能力等的差異,所以我們需要考慮到不同的語言的場景。諸如于,在 AutoDev 中針對于 PL/SQL 構建了相似的功能:

從 SQL 代碼生成 entity 代碼。從 SQL 代碼生成 Java 測試。從 SQL 代碼生成 Java 代碼。

考慮到對于語言的理解,能力還是有待進一步完善的。

總結

總而言之,言而總之,遺留系統還是一個頗爲理想的 AI 輔助場景。AI 可以增強我們現有的重構方式,但是是否存在新的方式是一個特別有意思的問題。

0 阅读:0

代碼爲聘禮

簡介:感謝大家的關注