export-ac
仿照 TDD 作法,在實作前先對照需求文檔產出 Acceptance Criteria(AC)行為規格文件, 作為 AI 實作迭代的「完成標準」——實作持續迭代直到所有行為測試通過為止。 產出包含需求背景、In/Out Scope、Gherkin 格式驗收條件(AC-001, AC-002...)、測試策略的標準 AC.md, 後續由 ac-to-test 將 AC 轉為測試骨架,再交給 AI 實作。 手動觸發:輸入「export-ac」或「產出 AC」並提供需求文檔路徑。
Export AC(Acceptance Criteria)
目的
將結構化需求文檔轉換為標準 AC 文件,明確定義「何時這個需求算完成」,作為:
- 開發者實作時的行為規格參考(做什麼、做到哪裡)
- BDD 的驗收基準
AC 描述使用者行為與系統反應,不涉及實作細節。
核心原則
驗證重點:行為,不是外觀。
AC 只驗收系統的行為結果(回傳值、狀態變更、錯誤碼),不涉及 UI 呈現方式。以下項目一律列入 Out of Scope,不得出現在驗收條件中:
- UI 排版、樣式、顏色、動畫、過場效果
- 元件快照測試(snapshot test)
- 第三方 SDK 或外部服務的內部行為
- 純顯示邏輯(如「按鈕是否變灰」「彈窗是否出現」)
判斷依據: 若拿掉 UI 之後這個條件仍然成立,就是合法的行為驗收條件。
輸入來源
優先接受以下格式(依建議優先序排列):
clarify-flow產出的結構化需求 .md 檔- 直接貼上的需求說明文字
- 對話中已描述的功能需求
分析步驟
拿到需求後,依序進行:
- 取得輸入檔名 — 輸出檔名以輸入檔名為基礎(
AC-{輸入檔名}.md) - 識別行為主體 — 使用者做什麼 / 系統回應什麼
- 分類情境:
- Happy Path — 一切正常的主流程
- 邊界條件 — 臨界值、最低門檻、空值、極端輸入
- 錯誤條件 — 非法操作、過期狀態、無效輸入
- 推斷 Scope — 從需求推斷哪些在範圍內、哪些明確排除(依照核心原則判斷)
- 決定測試策略 — 必測的業務邏輯 vs 不測試的項目
輸出格式
檔案命名:AC-{輸入檔名}.md,存放於需求文檔的同目錄。
例如輸入 coupon-apply.md → 輸出 AC-coupon-apply.md
# AC - {輸入檔名}
## 需求背景
- {一句話說明此功能的目的與使用情境}
## 範圍
- In Scope:{需要實作並驗收的項目,逗號分隔}
- Out of Scope:{明確不測試的項目,如 UI 排版、樣式、動畫、元件快照}
## 驗收條件(Given / When / Then)
### AC-001 {情境分類} — {一句話描述此條件}
- Given {前置狀態}
- When {使用者或系統觸發的動作}
- Then {預期的系統行為或回傳結果}
- And {額外預期,可選}
### AC-002 {情境分類} — {一句話描述此條件}
...
## 測試策略
- 必測:{業務邏輯、錯誤處理、邊界值}
- 不測試:{UI 顯示、樣式、互動動畫、第三方 SDK 行為}
Gherkin 撰寫規範
| 規則 | 說明 |
|---|---|
| When 最小化 | When 只保留最關鍵的觸發點,前置操作移至 Given |
| 業務語言 | 用業務語言描述,避免技術術語(不寫「呼叫 API」) |
| 具體數值 | 邊界條件需寫具體數值(如 999、1000),不用變數 |
| 不描述 UI | 不寫「顯示彈窗」「按鈕變灰」,聚焦系統回傳行為 |
| 錯誤碼具體化 | 錯誤條件要寫明預期的錯誤碼或錯誤訊息識別符 |
情境分類標籤
每個 AC 條目的標題必須包含分類標籤:
Happy Path— 主流程正常運作邊界條件— 臨界值或特殊輸入錯誤條件— 無效操作或異常狀態
數量原則
- 每個分類至少一條 AC
- 不求窮舉,聚焦對業務有意義的行為差異
- 需求明確的情境通常 3–6 條 AC 已足夠;複雜功能可到 10 條
範例
輸入(結構化需求)
功能:折價券套用
使用者可在結帳頁輸入折價券,系統需驗證並計算折抵後金額。
規則:滿 1000 才可使用,已過期的券不得套用。
輸出(AC-coupon-apply.md,對應輸入檔 coupon-apply.md)
# AC - coupon-apply
## 需求背景
- 使用者可在結帳頁輸入折價券,系統需正確計算折抵後金額。
## 範圍
- In Scope:折價券驗證、折抵金額計算、錯誤碼回傳、訂單金額更新。
- Out of Scope:UI 排版、樣式、動畫、元件快照。
## 驗收條件(Given / When / Then)
### AC-001 Happy Path — 有效折價券正確折抵
- Given 購物車小計為 1200 且折價券 `SAVE100` 有效
- When 使用者套用折價券
- Then 訂單應回傳折抵金額 100
- And 應付總額為 1100
### AC-002 邊界條件 — 未達最低門檻不可使用
- Given 購物車小計為 999 且折價券規則為滿 1000 才可使用
- When 使用者套用折價券
- Then 系統應回傳 `COUPON_THRESHOLD_NOT_MET`
- And 訂單總額維持 999
### AC-003 錯誤條件 — 已過期折價券不得套用
- Given 折價券 `SAVE100` 已過期
- When 使用者套用折價券
- Then 系統應回傳 `COUPON_EXPIRED`
- And 不得更新訂單折扣欄位
## 測試策略
- 必測:業務邏輯(驗證規則、折抵計算、錯誤碼)
- 不測試:UI 顯示、樣式、互動動畫
輸出規範
- 輸出後將 AC 文件寫入指定路徑(同需求文檔目錄)
- 告知使用者:「AC 文件已輸出,接下來可依照 AC 實作功能。」