📘 深度概覽
作者背景#
Michael C. Feathers 為 Object Mentor 公司的軟體顧問,在全球範圍內提供測試驅動開發(TDD)、重構、物件導向設計及極限程式設計(XP)的培訓與指導。他是 CppUnit(JUnit 的 C++ 移植版)和 FitCpp(FIT 整合測試框架的 C++ 移植版)的原始作者,同時也是 ACM 與 IEEE 的成員,曾在三屆 OOPSLA 大會擔任 CodeFest 主席。其經驗來自於指導數百位開發者、技術管理者與測試人員將遺留系統納入控制的實戰過程。
完整摘要#
本書(Working Effectively with Legacy Code)重新定義了遺留程式碼(Legacy Code):沒有測試的程式碼就是遺留程式碼。全書以一個核心問題為出發點——如何在不破壞既有行為的前提下安全地修改程式碼?第一部分建立變更的基本機制:區分改變軟體的四個理由(新增功能、修復 Bug、改善設計、優化資源使用);對比「編輯並祈禱」與「覆蓋並修改」兩種工作方式;引入感測(Sensing)與分離(Separation)的概念;最關鍵的是提出接縫模型(Seam Model)——程式中可以不修改原始碼就改變行為的地方,以及對應的啟用點(Enabling Point),為後續所有技術提供統一的思考框架。第二部分以 FAQ 形式組織,每章標題即為一個常見困境(如「沒有太多時間」、「無法將類別放入測試框架」、「類別太大」、「怪物方法」、「感到無助」等),提供針對性的小步驟解決策略,強調不追求完美而是讓設計比之前好一些。第三部分收錄二十四種依賴打破技術的目錄,涵蓋預處理接縫、連結接縫與物件接縫等多種類型,可作為獨立查閱的參考手冊。
本書的貢獻與定位#
本書填補了軟體工程文獻中對於「如何安全處理既有程式碼」這一普遍困境的系統性指導之空白。不同於 Martin Fowler 的《Refactoring》假設程式碼已有足夠測試覆蓋,本書正面處理的是更為常見也更為困難的情境——程式碼沒有測試、依賴難以打破、結構混亂。其獨特價值在於接縫模型的提出以及二十四種依賴打破技術的實用目錄。適合所有需要維護、修改或重構既有系統的軟體開發者。
