工程質量與測試

遺留系統測試保護網:沒有單元測試時如何安全重構核心計算引擎

作者:陳冠宏 (Kuan-Hung Chen), 首席系統架構顧問 發布日期:2025年12月13日 閱讀時間:10 分鐘
遺留系統測試保護網:沒有單元測試時如何安全重構核心計算引擎
本篇重點摘要:

面對缺乏單元測試、代碼高度耦合但計算邏輯極端複雜的歷史系統,如何透過核准測試 (Approval Tests) 與黃金主樣本 (Golden Master) 建立高可靠保護網。

許多接手老舊系統的工程師最常遇到的困境是:「我們知道這個幾千行的核心計算函式寫得很糟,但我們完全不敢動它,因為沒有任何測試,而且沒有人知道它所有的極端邊界條件。」

在沒有測試的系統上寫單元測試的悖論

Michael Feathers 在經典著作《Working Effectively with Legacy Code》中指出:「要安全地修改代碼,我們需要測試;但要為代碼加上測試,我們往往需要先修改代碼以使其可測試。」這就是著名的遺留代碼悖論。

黃金主樣本 (Golden Master) 與核准測試

要打破這個僵局,最務實且強大的工具是「黃金主樣本技術 (Golden Master / Approval Testing)」:

  • 批次資料捕獲:從歷史生產資料庫中抽取數千筆真實且具代表性的歷史業務輸入資料(例如過去一年的各類特殊保單或採購訂單計算參數)。
  • 產出快照固化:將這些輸入資料餵給未經修改的舊系統,將產出的完整 JSON / XML 或文字結果儲存為「基準黃金快照 (Golden Master Snapshot)」。
  • 重構驗證比對:在重構代碼的每一個小步驟(例如抽取變數、提煉函式、消除重複計算)後,立即重新運行這幾千筆資料,比對產出是否與黃金快照存在任何字元層級的差異。

從黑盒快照邁向白盒單元測試

當黃金主樣本保護網建立完成後,工程師便獲得了放膽重構的底氣。此時可以安心地將龐大函式拆解為職責單一的小型物件。隨著邊界清晰化,再針對各個獨立的小型物件補上執行速度極快的單元測試。最終,當單元測試覆蓋完整後,龐大耗時的黃金主樣本測試便可退役,完成一場優雅且零風險的代碼蛻變。

陳冠宏 (Kuan-Hung Chen), 首席系統架構顧問

陳冠宏 (Kuan-Hung Chen), 首席系統架構顧問

Link Tempohub Consulting 顧問團隊成員。長期致力於台灣企業核心架構現代化、領域驅動設計 (DDD) 與測試防護網實務推廣。

希望在您的企業系統中實踐上述架構重構策略?

預約 45 分鐘初步架構評估會議,與資深顧問共同梳理系統邊界與演進藍圖。

立即預約技術諮詢 →