AC 照業務規則切,不照使用情境切
自檢訊號:使用場景變了但程式不用變。 這通常被讀成「TDD 是雞肋」,其實它指的是 AC 粒度切錯了。
場景變但程式不變,只有兩種可能:
- (a) 那根本不該是新 AC,只是既有規則的另一個使用情境 → 掛回原 AC,測試一行都不用動
- (b) AC 是照「使用情境」切的,不是照「業務規則」切的 → 粒度錯
❌ 照使用情境切(會一直變) ✅ 照業務規則切(穩定)
AC-01 使用者在結帳頁轉帳 AC-01 餘額足夠時完成轉帳並扣款
AC-02 使用者在快速轉帳頁轉帳 AC-02 餘額不足時拒絕,回 400 INSUFFICIENT_BALANCE
AC-03 使用者用 QR code 轉帳 AC-03 餘額剛好等於金額時允許
→ 三條 AC 三個測試,業務規則卻 → UI 怎麼改都不用動
是同一條;改一次 UI 要動三處
同一條規則的另一種說法:場景收斂
- 每個 user story = 1 條 happy path + N 條規則分歧,N = spec 中「若/除非/當…時」的數量
- 新增一條場景的唯一理由:它會導致不同的業務結果。 輸入不同但結果相同 → 併成一條(用 Examples table)
- 一個 story 超過 7 條 → story 太大該拆,不是場景太多
- 場景不寫 UI 細節、欄位驗證清單、資料格式——那些屬於 schema / 契約
自檢
改一條 AC,如果要動的測試超過個位數 → 綁太細了。 要嘛 AC 粒度錯,要嘛把內部 unit 層也綁上 AC 了(見 測試分兩層:綁契約的是資產,綁實作的是拋棄式)。