跨語言移植程式,最容易卡住的往往不是語法,而是舊系統裡那些沒寫清楚的行為:某個輸入要怎麼處理、例外情況如何回應,或不同功能之間有哪些依賴。若只叫 AI 把程式碼從一種語言改寫成另一種,這些細節就可能在轉換時遺失。
軟體工程師 Geoffrey Huntley 提出一種不同的起手式:先整理「程式應該怎麼運作」,再開始移植。
8
先讀懂測試,再動手移植
Huntley 描述的流程分成兩輪。第一輪,逐一檢視測試,把測試涵蓋的行為整理成 /specs/*.md 一類的 Markdown 規格,並在規格中附上對應的實作引用。第二輪,再檢視產品功能,依照這些規格進行移植,同樣保留規格與實作之間的引用關係。
8
這樣做的好處,是把測試從一串檢查項目,轉化成移植時可閱讀、可追查的行為說明。當新語言的實作和舊系統不一致,團隊也比較容易回頭確認:差異來自有意調整,還是移植時漏掉了原有行為。
規格不是把測試「丟掉」
這套方法的關鍵在於提煉資訊,而不是把測試當成可有可無。測試可能無法涵蓋所有實際行為;規格若整理得不完整,移植後的程式也可能忠實遵循一份有缺漏的說明。因此,實務上仍值得保留原有測試作為參照,並為新實作補上適用的測試。這是採用規格導向流程時的審慎做法,不代表 Huntley 主張停用日常回歸測試。
規格也不該只是摘要。保留指向原始測試或實作的引用,能讓審查者核對文字是否有根據,也方便日後更新。Huntley 的原文提出以多個子代理檢視不同檔案、整理測試與功能的做法;但這並不代表任何代理工具都會自動正確分工,產出的規格仍需要人檢查。
8
讓代理先規劃,再授權修改
如果用 AI 編碼代理協助執行,權限安排同樣重要。Cline 的文件將 Plan 模式描述為探索程式碼與擬定策略的階段,Act 模式則用於依計畫執行;實際可用的工具會受到模式與工作階段設定影響。
1
2 Cline 的說明也提到,檔案編輯與終端命令可要求使用者核准,或在啟用自動核准時交由代理自主執行。
10
因此,實用的流程可以是:先讓代理整理測試與規格,人工核對引用與缺漏;確認移植計畫後,再開放修改權限;每完成一段,就檢查差異並執行適用的測試。這不是保證一次移植成功的捷徑,而是把「先理解、再改動、最後驗證」變成較清楚的工作節奏。
跨語言移植的難題,從來不只是把一種語法換成另一種。把既有行為整理成可追溯的規格,能讓 AI 參與實作時更有依據;而是否真的保留了重要行為,仍要靠檢查、測試與清楚的授權流程來確認。