「使用者故事因為遺漏邊界情況被拒絕。」「開發人員對 BA 的解釋不同。」「QA 說測試合格但業務說不對。」如果你聽過這些,根本原因通常是使用者故事和驗收標準寫得不夠清楚。
本指南很實用,不是理論。
1. 什麼是使用者故事(以及不是什麼)
使用者故事是從使用者角度表達需求的方式:
作為 [使用者類型],我想要 [行動/目標],所以 [原因/價值]。
好例子:
作為小零售客戶,我想查看過去 12 個月的交易歷史,所以我可以在需要時驗證特定月份的支出。
使用者故事不是:
- 技術任務(「建立取得交易歷史的 API 端點」)
- 詳細規格(「系統必須返回 100 筆記錄...」)
- 功能清單(「交易歷史查看功能」)
2. 使用 INVEST 檢查故事品質
| 條件 | 意義 | 檢查 |
|---|---|---|
| Independent | 故事可獨立交付 | 「此故事是否依賴另一故事?」 |
| Negotiable | 細節可協商 | 「BA 和開發人員可以討論範圍變更嗎?」 |
| Valuable | 提供明確價值 | 「業務可以解釋為什麼需要這個嗎?」 |
| Estimable | 開發人員可估算 | 「開發人員有足夠資訊估算嗎?」 |
| Small | 適配一個衝刺 | 「可以在 1-3 天內完成嗎?」 |
| Testable | 結果可驗證 | 「QA 知道如何測試合格/失敗嗎?」 |
INVEST 失敗的故事通常:
- 太大 → 分割為較小故事
- 不可測試 → 缺少驗收標準
- 沒有價值 → 「所以」條款沒有真實價值
3. 驗收標準:Given/When/Then 格式
驗收標準(AC)是故事被接受為「完成」的條件。使用 BDD 格式:
假設 [脈絡/前置條件]
當 [使用者執行的行動]
那麼 [預期結果]
實例 — 故事:查看交易歷史
情景 1:正確顯示
假設我以擁有過去 12 個月至少 1 筆交易的帳戶登入
當 我從選單點擊「交易歷史」
那麼 列表顯示最多 50 筆最近交易,按最新優先排序
情景 2:帳戶無交易
假設我以新帳戶登入,無交易
當 我點擊「交易歷史」
那麼 顯示「沒有交易」訊息,而不是空清單
情景 3:網路錯誤
假設我已登入
當 我打開「交易歷史」但失去網際網路連接
那麼 顯示錯誤訊息「無法載入資料。請重試。」
並顯示「重試」按鈕
4. 使用 AI 偵測遺漏的邊界情況
這是 AI 真正有用的地方。將故事 + AC 貼到提示中:
以下是使用者故事和驗收標準:
[PASTE STORY + AC]
分析並列出:
1. 未涵蓋的邊界情況(特殊情況、異常輸入)
2. 隱含的非功能需求(效能、安全、無障礙)
3. 缺少的 AC 錯誤情景
4. 目前 AC 的模糊或矛盾之處
5. 還有其他受影響的參與者嗎?
AI 通常捕捉:
- 資料大時的分頁
- 時區邊界情況
- 並發使用者情景
- 權限邊界情況(管理員對使用者對客人)
- 空/null 狀態
- 非常長的輸入字串
- 特殊字元
5. AI 功能的 AC:什麼是額外的?
當故事涉及 AI 時,新增:
# AI 功能特定的 AC
情景:AI 不確定
假設使用者提出模糊的問題
當 AI 信心分數 < 0.7
那麼 AI 必須:
- 不偽造資訊
- 提出澄清問題,或
- 以完整脈絡路由給人工代理
情景:AI 輸出低於閾值
假設 AI 產生回應
當 毒性分數 > 0.3(根據安全篩選器)
那麼 回應自動被阻止
事件被記錄到審計系統
6. 就緒定義(DoR)
故事已準備好進入衝刺時:
準備就緒定義
☐ 故事有「作為...我想要...所以...」格式
☐ 「所以」是真實業務價值,不只是功能描述
☐ 至少 3 個 Given/When/Then 格式的 AC
☐ AC 涵蓋至少 1 個成功路徑 + 1 個錯誤路徑
☐ 故事通過 INVEST 檢查
☐ 已識別依賴項
☐ 故事大小 ≤ 5 故事點(使用 Fibonacci 時)
☐ UI 線框或模擬圖已附加(適用時)
☐ 所有相關利益關係人已審查
7. 常見 BA 錯誤
錯誤 1:弱的「所以」
- ❌ 「...所以系統顯示交易清單」
- ✅ 「...所以我可以在月末對帳前驗證支出」
錯誤 2:AC 按 UI 寫,不按行為
- ❌ 「『查看更多』按鈕在清單底部顯示為綠色」
- ✅ 「使用者滾動到底部時,系統自動載入下一個 20 筆記錄」
錯誤 3:沒有錯誤情景
- 每故事至少需要 1 個 AC 用於錯誤/無資料情況
錯誤 4:驗收標準 = 實裝細節
- ❌ 「API 必須在 200ms 內回應」
- ✅ 「4G 網路上 2 秒內頁面載入」→ 開發人員決定 API 逾時
總結
良好的使用者故事 = 正確的使用者視角 + 明確的價值 + 可測試的 AC。
提議工作流:
- 使用 As/I want/So that 範本寫故事
- 檢查 INVEST、必要時分割
- 在 Given/When/Then 中寫 ≥3 AC(成功 + 錯誤)
- 貼入 AI 偵測遺漏的邊界情況
- 加入衝刺待辦清單前傳給利益關係人審查
