跳到主內容

Theme / 0.9.130

Pstack

用可驗證的工作流程協作,從單一入口學會工程技能

Skills

tdd | 先證明失敗再修復錯誤

針對有便宜本機測試路徑的錯誤,先執行會因正確原因失敗的回歸測試,再做最小修復。

tdd | 先證明失敗再修復錯誤

本頁以 pstack-claude 0.9.126 為基準。這份 tdd 聚焦錯誤修復的測試驅動開發 (Test-driven Development),不是要求所有工作一律新建測試基礎設施。

定位與適用情境

適用於使用者明確要求 TDD、失敗測試或回歸測試 (Regression Test),或錯誤已有明顯且便宜的本機測試目標。

例如純函式 discountTotal 在折扣大於原價時產生負金額。專案已有同一函式的單元測試,預期最低總額為零。輸入是錯誤案例、預期規則與現有測試,輸出是能先失敗後通過的聚焦回歸證據。

準備

  • 確認真正的預期行為。最低總額應為零必須來自需求或既有契約,不按代理偏好決定。
  • 找到現有測試框架、執行命令與最窄測試目標。先看專案怎麼測,不先安裝新套件。
  • 選不依賴正式服務、時序或全域狀態的重現輸入。
  • 若只能以昂貴端對端環境、脆弱模擬或大量無關測試資料重現,先說明替代驗證,不強造一個測試來完成儀式。

操作步驟

  1. 理解錯誤並選檢查。 追蹤受影響路徑,確認目前輸出與意圖的差距,再選既有單元、元件或整合測試中最窄的一個。
  2. 只加失敗測試。 讓測試呼叫真實 discountTotal,用原價與超額折扣檢查結果為零。此時不改正式邏輯,也不把現有錯誤寫成期望值。
  3. 執行修改前證據。 確認失敗輸出真的顯示負數與零的差異。模組載入錯誤、空結果或環境缺套件雖然也會變紅,卻不能證明測到這個錯誤。
  4. 做最小修復。 修改導致負金額的正式路徑,保留正常折扣與零折扣契約。不弱化斷言,也不順便擴大整理範圍。
  5. 重跑並回報。 同一測試應轉為通過,再執行附近既有驗證。回報測試名稱、實際失敗內容、修復後命令與結果,而不只說「測試全綠」。

可直接使用的提示詞

Claude Code 可用 /pstack:tdd,Codex 插件可選 $pstack:tdd。下列需求使用假設的範例專案路徑,使用時替換成實際位置。

用 pstack:tdd 修復 src/pricing/discountTotal.ts 的負金額錯誤。
規格要求折扣後總額最低為零,正常折扣結果保持不變。
先讀取函式、呼叫端與既有測試,用同一套測試框架加一個聚焦案例。
先跑新測試,引用證明負數與零不符的實際失敗輸出,再改正式邏輯。
修復後重跑同一測試及附近價格計算測試。
若沒有便宜可靠的本機測試路徑,先說明原因與最接近的可執行檢查。
不得安裝新依賴、弱化斷言或改動無關測試資料。

預期結果與驗收

  • 修改前的失敗可連回需求差距,不是測試程式本身壞掉。
  • 修復後同一案例通過。測試判斷的是呼叫端看見的金額,而不是內部用了哪個分支。
  • 正常折扣路徑仍有附近驗證。新案例不應需要大量無關模擬與測試資料。
  • 若無法取得失敗前證據,報告明說原因與替代檢查,不能補寫一段未執行的失敗日誌。

限制與權限

原文允許在測試不實際時改用針對性腳本、手動重現命令、瀏覽器自動化或聚焦整合檢查。選擇替代方式時要記錄工具、輸入與可觀察結果。沒有新增測試不自動代表沒有驗證。

不穩定錯誤應盡可能固定輸入與時序,說明鎖定的訊號。若發現更大類別問題,先驗證聚焦修復,再另行評估擴充範圍。

這個技能不授權開啟昂貴外部環境、修改正式資料或弱化既有正確契約。測試通過也不代表整個系統無缺陷。

延伸閱讀與來源