Spec Review Checklist — 30 個問題抓出 80% 的需求漏洞

QA 在 spec review 階段抓到一個漏洞,等於開發階段省 10 倍時間,上線後省 100 倍。這份 checklist 是我跑 spec review 用的固定問題集。會議前 15 分鐘掃一遍,會議中就有具體問題能問

怎麼用這份 checklist

  1. PM/PO 發 spec 後,會議前自己對 checklist 走一輪
  2. 每個「不確定」「沒寫到」的點,記下來
  3. 會議上用問題形式問(不要用「你少了 XX」開頭,會撕破臉)
  4. 會議後寄 follow-up email 把澄清的點寫回 spec

一、前置條件(5 個問題)

  • [ ] 誰能用這個功能? 角色、權限、付費等級、地區限制?
  • [ ] 需要先做什麼? 帳號驗證?綁定?KYC?
  • [ ] 依賴哪些功能? 如果 A 功能掛掉,這個還能用嗎?
  • [ ] 支援哪些平台? Web only?iOS 14+?舊瀏覽器?
  • [ ] 多語系怎麼處理? 文案、日期、貨幣、RTL?

🔍 實例:spec 寫「使用者可以提現」沒寫前置 → 問「未驗證 KYC 的使用者點下去會怎樣?看不到按鈕、按鈕灰、還是跳提示?」

二、輸入與邊界(6 個問題)

  • [ ] 每個欄位的型別與長度限制? (文字 1-50 字、金額 0.01-9999999)
  • [ ] 空值 / null 怎麼處理? 必填還是選填?
  • [ ] 特殊字元如何處理? emoji、SQL injection 字元、跨語言字符
  • [ ] 數字邊界? 0、負數、極大值、小數點精度
  • [ ] 時間相關? 時區、夏令時、未來時間、過去時間、跨午夜
  • [ ] 批次/列表上限? 一次能傳幾筆?10000 筆會 timeout 嗎?

🔍 實例:spec 寫「金額」沒寫精度 → 問「使用者輸 0.001 元會被接受嗎?小數第三位會被四捨五入還是無條件捨去?」

三、狀態機(5 個問題)

  • [ ] 有哪些狀態? 列出來,畫圖
  • [ ] 狀態轉換規則? 從 A → B 的條件是什麼?
  • [ ] 有沒有不可逆狀態? 取消了能恢復嗎?
  • [ ] 狀態同時被改怎辦? 兩個裝置同時操作?
  • [ ] 狀態 timeout? 「待付款」過 30 分鐘自動取消嗎?

🔍 實例:訂單有 pending、paid、shipped、cancelled → 問「shipped 之後能 cancel 嗎?退款流程從哪個狀態走?」

四、錯誤處理(5 個問題)

  • [ ] 錯誤訊息文案? 每種錯誤有對應文案嗎?多語系?
  • [ ] 錯誤該不該重試? 自動 retry 還是讓使用者自己重來?
  • [ ] 部分成功怎辦? 批次 10 筆成功 7 筆怎處理?全 rollback 還是部分提交?
  • [ ] 後端 down 時前端表現? 卡 loading?跳錯誤頁?離線模式?
  • [ ] 第三方 API fail 怎辦? 金流 timeout、簡訊送不出去

🔍 實例:spec 寫「呼叫金流 API」沒寫失敗 → 問「金流 timeout 後使用者看到什麼?訂單會被建立嗎?再按一次會重複扣款嗎?」

五、資料一致性(4 個問題)

  • [ ] 資料寫多處嗎? DB + Cache + 第三方,同步策略?
  • [ ] race condition? 兩個請求同時改同一筆會怎樣?
  • [ ] 歷史資料是否受影響? 改 schema 後舊資料怎處理?
  • [ ] 刪除是 soft 還是 hard? 刪了能查嗎?關聯資料怎麼辦?

🔍 實例:spec 寫「使用者可改 email」沒寫 → 問「email 是 login 用的,改了之後舊 session 還有效嗎?通知會寄到新還舊 email?」

六、非功能性(5 個問題)

  • [ ] 效能 SLA? API 回應 < 500ms?同時 1000 人會掛嗎?
  • [ ] 資安? 敏感資料是否加密?log 會寫到密碼嗎?
  • [ ] 稽核? 操作記錄要留多久?誰能看?
  • [ ] 可觀測性? 出事時怎麼 debug?metrics、logs 有寫嗎?
  • [ ] 隱私 / 法遵? GDPR、個資法、未成年保護?

🔍 實例:spec 沒寫 → 問「使用者要求刪除帳號時,他的訂單記錄要刪嗎?財務紀錄不能刪,但個資要去識別化嗎?」


漏洞模式辨識

走完 checklist 之後,看看 spec 有沒有這些「模糊用詞」

模糊詞 該問什麼
「適時」、「即時」 多久內?1 秒?10 秒?next request?
「自動」 觸發條件?頻率?失敗怎辦?
「合理的」、「合適的」 量化標準?
「通常」、「一般而言」 那「不通常」的情況呢?
「使用者可以」 哪些使用者?所有狀態都可以嗎?
「應該」、「會」 不會的時候呢?fallback?
「等」、「之類」 把列舉補完,缺的列出

每出現一個,至少一個問題


用法範例

某次 review「會員等級系統」spec,我用這份 checklist 跑出 12 個問題:

  1. (前置)非會員看到等級頁面顯示什麼?
  2. (前置)多語系:等級名稱「黃金」翻成英文要怎麼處理?
  3. (邊界)累積消費 -100 元(退費)會降級嗎?
  4. (邊界)跨年度怎麼算?1/1 0:00 自動 reset 還是滾動計算?
  5. (狀態)從黃金降白金能再升回去嗎?
  6. (狀態)升等是即時還是次月生效?
  7. (錯誤)升等通知寄信失敗怎辦?等級會升嗎?
  8. (一致性)使用者改名後等級記錄要更新嗎?
  9. (一致性)等級紀錄是寫 DB 還是算的?
  10. (非功能)後台改規則的話,現有會員等級會被回算嗎?
  11. (非功能)等級資料 GDPR 刪除請求怎處理?
  12. (模糊)spec 寫「使用者可以查詢自己的等級歷史」→ 查多久?分頁?匯出?

PM 回去補了 spec,省下後續至少 3 個迴歸測試循環


最後

Spec review 不是挑剔,是替團隊省錢。會議前 15 分鐘走這份 checklist,會議中用問題形式問清楚,會議後 follow-up 確認寫回 spec。三個月後 PM 會謝謝你。