skills/ting-s515/skills/export-gherkin

export-gherkin

SKILL.md

Export Gherkin

目的

減少與非技術人員(PM、QA、客戶)對齊需求或驗證行為時的溝通成本,採用明確定義的規格格式。

適用情境

  • 需求訪談後整理規格
  • 程式碼審查時驗證行為是否符合預期
  • 撰寫驗收測試前的規格確認
  • 向非技術人員說明系統行為

格式定義

Feature: 功能名稱
  功能描述(說明這個功能的目的)

  Scenario: 情境描述(一句話說明這個測試案例要驗證什麼)
    Given 前置條件(系統的初始狀態)
    And 額外的前置條件(可選)
    When 觸發動作(用戶或系統執行的操作)
    Then 預期結果(系統應該呈現的狀態或回應)
    And 額外的預期結果(可選)
關鍵字 用途 範例
Feature 功能名稱與描述,作為多個 Scenario 的分組 Feature: 用戶登入
Scenario 描述測試情境 Scenario: 套用有效折扣碼
Given 前置條件 / 初始狀態 Given 購物車總金額為 x 元
When 觸發的動作或事件 When 用戶輸入有效折扣碼
Then 預期的結果 Then 總金額更新為 y 元
And 延續上一個關鍵字(可選,僅當有多項條件或結果時使用) And 顯示折扣成功訊息

範例

範例 1:用戶登入

輸入(程式碼邏輯):

// 檢查帳號密碼,正確則導向首頁,錯誤則顯示錯誤訊息
// 連續錯誤 3 次則鎖定帳號

輸出(Gherkin):

Feature: 用戶登入
  用戶透過帳號密碼進行身份驗證,以存取系統功能

  Scenario: 用戶成功登入
    Given 用戶已註冊帳號
    And 帳號未被鎖定
    When 用戶輸入正確的帳號密碼
    Then 導向至首頁

  Scenario: 用戶登入失敗
    Given 用戶已註冊帳號
    When 用戶輸入錯誤的密碼
    Then 停留在登入頁面

  Scenario: 連續登入失敗鎖定帳號
    Given 用戶已連續輸入錯誤密碼 x-1 次
    When 用戶第 x 次輸入錯誤密碼
    Then 帳號被鎖定

範例 2:購物車

輸入(需求描述):

用戶可以將商品加入購物車,數量不可超過庫存,
結帳時計算總金額並套用折扣碼

輸出(Gherkin):

Feature: 購物車管理
  用戶可以管理購物車內的商品,並在結帳時套用優惠

  Scenario: 加入商品至購物車
    Given 商品庫存為 x 件
    When 用戶將該商品加入購物車 y 件
    Then 購物車商品數量為 y
    And 庫存剩餘 x-y 件

  Scenario: 加入商品超過庫存數量
    Given 商品庫存為 x 件
    When 用戶嘗試將該商品加入購物車 y 件(y > x)
    Then 系統拒絕此操作
    And 顯示庫存不足提示

  Scenario: 套用有效折扣碼
    Given 購物車總金額為 x 元
    And 折扣碼可折抵 y%
    When 用戶輸入有效折扣碼
    Then 總金額更新為 x × (1 - y%) 元

輸出規範

  1. 必須包含 Feature:每個輸出都以 Feature 開頭,說明功能名稱與目的
  2. 相關 Scenario 歸屬同一 Feature:將相關的測試情境組織在同一個 Feature 下
  3. 每個 Scenario 聚焦於單一行為
  4. 專注在有價值的行為:不求詳盡,只描述最關鍵的業務規則
  5. 使用業務語言而非技術術語,但可提及 API、DB 通用術語
  6. Given/When/Then 各自獨立成行,保持可讀性
  7. And 為可選,僅當條件或結果有多項時才使用
  8. 避免畫面互動細節(如「顯示訊息」、「彈出視窗」),專注於業務邏輯
  9. 使用變數代替具體數字:以 x、y 等變數表示數值,避免寫死具體數字
  10. 沙漏原則 - When 最小化
    • When 越小越好,理想情況只有一行
    • 將操作步驟移至 Given(「When 我做了什麼」→「Given 我已經做了什麼」)
    • When 只保留最關鍵的觸發點(如:送出、確認、提交)
    • 揭露「做什麼what to do」而非「怎麼做how to do」
  11. 輸出後更新指定文檔:將產出的 Gherkin 內容寫入用戶指定的檔案路徑
Weekly Installs
1
First Seen
11 days ago
Installed on
mcpjam1
claude-code1
replit1
junie1
windsurf1
zencoder1