Building Tests

建構測試體系 (Building Tests) #

在重構過程中,一套穩固的測試套件是不可或缺的安全網。
Martin Fowler 強調,多數專案的測試往往太過稀疏,而非過於冗長。

重構的首要前提,就是擁有一套 自我驗證(Self-verifying) 的測試程式碼。


測試撰寫的核心原則 #

撰寫測試時,請謹記以下指導原則,讓測試成為開發助力而非阻力:

1. 全自動化與自我驗證 #

  • Fully Automate: 測試必須能完全自動化執行。
  • Self-Verifying: 每個測試都必須能自行驗證結果(Pass 或 Fail),不需要人工檢查輸出。如果測試不能清楚告訴你「成功」或「失敗」,它就失去了自動化的意義。

2. 測試是強大的偵測器 #

  • Bug Detectors: 將測試視為強大的 Bug 偵測器。好的測試套件應該能顯著減少你追蹤與定位錯誤的時間。
  • Ensure Failure: 確保測試在該失敗的時候會失敗。一個永遠沈默(永遠顯示通過)的測試,等同於壞掉的測試。

3. 關注風險熱點 #

  • Boundary Conditions: 集中火力測試 邊界條件(Boundary Conditions) 與極端情況(Edge Cases)。
  • Risk-Based: 你的測試應該集中在那些「最容易出錯」的地方,而非平均分配給所有程式碼。

4. 不要追求完美,但不要放棄 #

  • Don’t Skip: 即使你無法捕捉到所有 Bug,也不要因此就放棄撰寫測試。擁有一部分的測試,絕對勝過完全沒有測試。

面對 Bug 的標準作業程序 #

當你在開發過程中收到一個 Bug 回報時,請遵循以下黃金流程:

當 Bug 出現時 (When a bug is reported):

  1. 先寫測試: 修復程式碼前,先寫個能重現該 Bug 的測試案例
  2. 確認失敗: 執行該測試,確認它會失敗(這代表你成功捕捉到了問題)
  3. 修復代碼: 修改程式碼,直到測試通過

這不僅能修復當下問題,還能防止該 Bug 未來再次出現(Regression)