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 文件,明確定義「何時這個需求算完成」,作為:

  1. 開發者實作時的行為規格參考(做什麼、做到哪裡)
  2. BDD 的驗收基準

AC 描述使用者行為與系統反應,不涉及實作細節。

核心原則

驗證重點:行為,不是外觀。

AC 只驗收系統的行為結果(回傳值、狀態變更、錯誤碼),不涉及 UI 呈現方式。以下項目一律列入 Out of Scope,不得出現在驗收條件中:

  • UI 排版、樣式、顏色、動畫、過場效果
  • 元件快照測試(snapshot test)
  • 第三方 SDK 或外部服務的內部行為
  • 純顯示邏輯(如「按鈕是否變灰」「彈窗是否出現」)

判斷依據: 若拿掉 UI 之後這個條件仍然成立,就是合法的行為驗收條件。

輸入來源

優先接受以下格式(依建議優先序排列):

  1. clarify-flow 產出的結構化需求 .md 檔
  2. 直接貼上的需求說明文字
  3. 對話中已描述的功能需求

分析步驟

拿到需求後,依序進行:

  1. 取得輸入檔名 — 輸出檔名以輸入檔名為基礎(AC-{輸入檔名}.md
  2. 識別行為主體 — 使用者做什麼 / 系統回應什麼
  3. 分類情境
    • Happy Path — 一切正常的主流程
    • 邊界條件 — 臨界值、最低門檻、空值、極端輸入
    • 錯誤條件 — 非法操作、過期狀態、無效輸入
  4. 推斷 Scope — 從需求推斷哪些在範圍內、哪些明確排除(依照核心原則判斷)
  5. 決定測試策略 — 必測的業務邏輯 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 顯示、樣式、互動動畫

輸出規範

  1. 輸出後將 AC 文件寫入指定路徑(同需求文檔目錄)
  2. 告知使用者:「AC 文件已輸出,接下來可依照 AC 實作功能。」