許多接手老舊系統的工程師最常遇到的困境是:「我們知道這個幾千行的核心計算函式寫得很糟,但我們完全不敢動它,因為沒有任何測試,而且沒有人知道它所有的極端邊界條件。」
在沒有測試的系統上寫單元測試的悖論
Michael Feathers 在經典著作《Working Effectively with Legacy Code》中指出:「要安全地修改代碼,我們需要測試;但要為代碼加上測試,我們往往需要先修改代碼以使其可測試。」這就是著名的遺留代碼悖論。
黃金主樣本 (Golden Master) 與核准測試
要打破這個僵局,最務實且強大的工具是「黃金主樣本技術 (Golden Master / Approval Testing)」:
- 批次資料捕獲:從歷史生產資料庫中抽取數千筆真實且具代表性的歷史業務輸入資料(例如過去一年的各類特殊保單或採購訂單計算參數)。
- 產出快照固化:將這些輸入資料餵給未經修改的舊系統,將產出的完整 JSON / XML 或文字結果儲存為「基準黃金快照 (Golden Master Snapshot)」。
- 重構驗證比對:在重構代碼的每一個小步驟(例如抽取變數、提煉函式、消除重複計算)後,立即重新運行這幾千筆資料,比對產出是否與黃金快照存在任何字元層級的差異。
從黑盒快照邁向白盒單元測試
當黃金主樣本保護網建立完成後,工程師便獲得了放膽重構的底氣。此時可以安心地將龐大函式拆解為職責單一的小型物件。隨著邊界清晰化,再針對各個獨立的小型物件補上執行速度極快的單元測試。最終,當單元測試覆蓋完整後,龐大耗時的黃金主樣本測試便可退役,完成一場優雅且零風險的代碼蛻變。