一鍵生成完整測試計劃、測試用例和自動化策略的綜合測試工程師 Skill。生成黑箱/白箱測試用例(Excel)、測試策略、覆蓋缺口分析、自動化路線圖和探索性測試指引。當使用者提到「生成測試計劃」、「設計測試」、「完整測試方案」、「測試用例設計」、「寫測試案例」、「test plan」,或需要為新功能、重構、Bug 修復、Release 規劃測試策略時使用此 skill。即使使用者只是模糊地說「幫我測一下這個功能」或「這個需要什麼測試」,也應觸發。
Scanned 9/2/2026
Install to Claude Code
npx -y skills add kao273183/qa-claude-skill --skill test-master --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Test Master?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/kao273183-test-master)More formats (shields.io, HTML) on the badges page.
---
name: test-master
description: 一鍵生成完整測試計劃、測試用例和自動化策略的綜合測試工程師 Skill。生成黑箱/白箱測試用例(Excel)、測試策略、覆蓋缺口分析、自動化路線圖和探索性測試指引。當使用者提到「生成測試計劃」、「設計測試」、「完整測試方案」、「測試用例設計」、「寫測試案例」、「test plan」,或需要為新功能、重構、Bug 修復、Release 規劃測試策略時使用此 skill。即使使用者只是模糊地說「幫我測一下這個功能」或「這個需要什麼測試」,也應觸發。
disable-model-invocation: false
allowed-tools: Read, Grep, Glob, Write, Edit, Bash, mcp__atlassian__getJiraIssue, mcp__atlassian__searchJiraIssuesUsingJql, mcp__google__createSpreadsheet, mcp__google__writeSpreadsheet, mcp__google__copyFile, mcp__google__moveFile, mcp__google__createFolder, mcp__google__getSpreadsheetInfo
argument-hint: "[JIRA票號 或 功能描述]"
---
# test-master
> ⚙️ **執行前先讀 [`modules/config-loader.md`](./modules/config-loader.md)**,載入組織設定。
> 若 `config.json` 不存在或 `mode = markdown-only`,跳過 MCP 並走 [`modules/markdown-fallback.md`](./modules/markdown-fallback.md)。
## 執行流程
### Phase 1: 需求分析
1. **讀取需求** — JIRA 票號(如 `{{JIRA_PROJECT_KEY}}-XXXX`)用 Atlassian MCP 抓取,否則請使用者描述
2. **JIRA 描述完整性檢查** — description 為空的票號標記為風險
3. **平台偵測** — 自動偵測涵蓋哪些平台:
- iOS:`*.xcodeproj` / `Package.swift` → 用 `{{IOS_REPO}}`
- Android:`build.gradle(.kts)` → 用 `{{ANDROID_REPO}}`
- Web:`package.json` / `next.config.*` / `vite.config.*` / `webpack.config.*` → 用 `{{WEB_REPO}}`(若 `platforms.web.enabled = true`)
- Flutter:`pubspec.yaml` → 切換到 `flutter-test-master` skill
4. **分析影響範圍** — 搜尋相關程式碼(Glob/Grep):
- 識別 ViewModel / Repository / Service / API / SDK 依賴
- Web 額外識別:React/Vue/Angular component / route / Redux store
5. **風險評估** — 金流/敏感資料/認證(高)、並發/記憶體/網路(技術)、關鍵流程/UX(業務)
### Phase 2: 測試策略設計
生成 `test-strategy.md`。模板見 [`templates.md`](./templates.md)「test-strategy.md 模板」。
### Phase 3: 測試用例生成
生成黑箱 + 白箱兩份 Google Sheet(從模板複製,模板 ID = `{{GSHEET_TC_TEMPLATE_ID}}`)。
> 若 `{{GSHEET_TC_TEMPLATE_ID}}` 為空 → 直接 `createSpreadsheet` 並建立預設欄位結構。
> 若 `mode = markdown-only` → 改產出 `test-cases-{feature}-{blackbox|whitebox}.md`,沿用相同欄位(A-N)。
**黑箱 / 白箱判定原則(分類鐵律):**
- **黑箱(BB)**:前置條件、步驟都必須是一般使用者看得懂、操作得到的,不需要任何第三方工具查看或測試(不用 Postman/curl/adb/Charles/mitmproxy/Instruments/Xcode Debug/資料庫直查/log 檢視等)。
- **白箱(WB)**:只要是 API 相關測試,或需要用到第三方工具才能執行/驗證的,都歸類白箱,前置條件跟步驟要明確寫出用什麼工具測試。
- 判定順序:先問「一般使用者不靠任何工具,照著步驟能不能重現、看得懂前置條件?」——能 → 黑箱;不能 → 白箱。這條標準跟 spec 內容脫鉚,spec 中途修正只需調整對應 TC 內容,不用重判既有 TC 的黑白箱歸屬。
**測試分類(Column F)反漂移規則:**
- 寫入「測試分類」欄的值**只能用 `config.test_case_format.categories`(black_box/white_box 兩個固定清單)**,或目標既有 Sheet 現有出現過的分類值,**不可自行發明新分類名稱**(就算聽起來很合理,例如「效能測試」「相容性測試」)。
- 新 TC 場景要先嘗試映射到最接近的既有分類,映射不上才能算是真的缺分類。
- 真的判斷需要新分類:**先跟使用者確認**,確認後才能同步更新 config 的固定清單 *和* 目標 Sheet `status` tab 的統計公式(新增對應統計列),否則新分類的 Pass/Fail 數字會被 status tab 的公式漏算而不自知。
- 每次要寫入既有 Sheet 前,先讀該 Sheet 的「測試分類」欄現有值當這次的有效範圍,不要只信 config(不同 Sheet 可能歷史上已經各自漂移,要先掌握現況再決定要不要一起清理)。
**測試用例分佈:**
- 正常路徑 20% / 邊界條件 30% / 錯誤處理 30% / 並發 10% / 非功能性 10%
**依功能類型自動調整重點:**
- API 整合 → 網路錯誤、逾時、401/403/500、JSON 解析
- UI 功能 → 載入/錯誤/空白狀態、螢幕尺寸、**a11y(見下)**
- 資料同步 → 並發寫入、race condition、Thread Sanitizer
- IM/即時通訊 → 斷線重連、離線同步、多裝置
- **Web 應用** → 跨瀏覽器(Chrome/Safari/Firefox/Edge)、SSR/CSR、SEO、Cookie/Session、CORS、Visual Regression
- **CRUD/管理後台**(CMS 設定頁、任何「新增/查詢/編輯/刪除」介面)→ **Create/Read/Update/Delete 四操作各自別列案例,不能只測 Create 或假設 Edit 是 Create 的子集**;Read 涵蓋篩選/排序/分頁/空狀態;Update 需注意欄位唯讀規則跟 Create 是否不同、改動中的資料是否影響已在使用中的其他資源;Delete 需含被引用中資料的處理、軟刪除 vs 硬刪除邊界
- **Android 專屬** → **分割畫面(split-screen)多工模式必測**:進入/退出過程 + 已在分割畫面下的畫面載入與操作,不能只用「螢幕尺寸」的 static responsive 檢查取代(分割畫面會觸發 `onMultiWindowModeChanged`/resize/reconfiguration,容易暴露 lifecycle 相關 bug,範例:UOP-7890 健康首頁分割畫面下持續載入失敗)。iOS 無對應系統級分割畫面模式,此項僅適用 Android。
- **涉及日期/時間欄位**(打卡、步數同步、連續型挑戰、趨勢圖表、任何有「跨日/跨週/跨月」結算邊界的功能)→ **時區處理必列案例**:① 伺服器儲存(通常 UTC)/ API 回傳格式 / App 顯示時區三層轉換是否一致,別只驗證單一層;② 跨日/跨週/跨月邊界時刻用哪個時區判定(00:00 裝置時區 vs 00:00 台北時區 vs UTC 午夜三者常不一致);③ 使用者切換裝置時區是否影響已有紀錄或視為作弊;④ 寫入端跟查詢端時區是否一致(例:DB 寫入 GMT+0、查詢端假設 GMT+8 造成資料看起來「消失」或「跑到隔天」)。這類 bug 常態是「資料本身沒錯,只是顯示/比對時少轉一次時區」,斷言時要明確寫出預期時區,不要用裝置當下時區含糊比對(範例:健康連續型挑戰跨日重置時機定義未明、血壓趨勢 `date` 欄位格式與時區不一致、集章門市同步 GMT+0/GMT+8 DB 落差 WB-STAMP-W020)。
**Web 平台特有測試類型**(若 `platforms.web.enabled = true`):
| 類型 | 對應框架 | 範例 |
|------|---------|------|
| E2E UI Test | `{{WEB_PRIMARY_FRAMEWORK}}` (預設 Playwright) | 登入流程、購物車、表單驗證 |
| Component Test | Playwright Component / Cypress Component | React/Vue 元件獨立測試 |
| Visual Regression | Playwright snapshot / Percy / Chromatic | 截圖比對找視覺改變 |
| Cross-browser | Playwright 多 project | Chrome / Safari / Firefox / Edge |
| Responsive | viewport 切換 | desktop 1920×1080 / tablet 768×1024 / mobile 375×667 |
| API 黑盒(in E2E)| Playwright `request` / Cypress `cy.request` | UI test 中順便驗 API 行為 |
**a11y(輔助功能)必檢項目** — 每個 UI 功能都要加:
- **字級縮放**:iOS Dynamic Type 最大 / Android 字型最大 / Android 顯示大小最大
- 內容文字應跟隨放大但不破版
- **裝飾性數字(計數、徽章)不應跟隨放大**
- **螢幕閱讀器**:VoiceOver(iOS)/ TalkBack(Android)讀取順序與 label
- **觸控目標**:iOS ≥ 44×44 pt / Android ≥ 48×48 dp
- **對比度**:文字 vs 背景 ≥ 4.5:1(深色模式也要驗)
- **Reduce Motion**:動畫減少模式正常
- 詳細檢查模板見 [`templates.md`](./templates.md)「a11y-checklist 模板」
**優先級判斷:**
- P0: 核心業務流程(登入/支付/訂單)、資料安全、高 crash 風險
- P1: 主要功能、高頻場景、錯誤處理、**a11y 跑版**
- P2: 次要功能、邊界條件、非功能性需求
**跨平台 a11y 配對原則**(若 `workflow.auto_a11y_pairing = true`):開 a11y 類 bug/優化單時,**預設開一對**(iOS + Android),用 Relates 連結。
**Google Sheet 格式** — 遵循 `config.test_case_format` 中設定的 A-N 欄位結構與分類。預設欄位:
| 欄 | 內容 |
|----|------|
| A | ID(`BB-` 黑箱 / `WB-` 白箱 前綴) |
| B | Phase |
| C | 測試結果 |
| D | 測試結論 |
| E | 測試標題 |
| F | 測試分類 |
| G | 優先度(P0/P1/P2) |
| H | 平台(iOS/Android/Both) |
| I | 前置條件 |
| J | 測試步驟 |
| K | 預期結果 |
| L | 自動化(Y/N) |
| M | 備註 |
| N | JIRA Ticket |
### Phase 4: 測試覆蓋缺口分析
搜尋既有測試:
- iOS:`*Tests.swift` 或 `*Test.swift`
- Android:`*Test.kt` 或 `*Tests.kt`
- Web:`*.spec.{ts,js}` / `*.test.{ts,js}` / `e2e/**/*.spec.*` / `cypress/e2e/**`
- Component test:`*.stories.{ts,js}` 旁的 `*.test.tsx`
比對新增用例 vs 現有測試,識別缺口。模板見 [`templates.md`](./templates.md)「coverage-gaps.md 模板」。
### Phase 5: 自動化評估
評估標準:重複頻率、執行時間、複雜度、穩定性、ROI。模板見 [`templates.md`](./templates.md)「automation-plan.md 模板」。
### Phase 6: 探索性測試指引
模板見 [`templates.md`](./templates.md)「exploratory-guide.md 模板」。
### Phase 7: Google Drive 上傳
> 僅在 `mode != markdown-only` 且 `google.qa_tc_folder_id` 已設定時執行。
1. 在 QA-TC 資料夾(`{{GDRIVE_QA_FOLDER_ID}}`)下建立 feature 子資料夾
2. 上傳黑箱/白箱 Google Sheet 到該資料夾
3. 詢問是否上傳其他文件(test-strategy.md、coverage-gaps.md 等)
> 若 `google.default_drive = shared` 且 MCP 無法直寫共用硬碟,提示使用者「請手動將 Sheet 移至 `{{GDRIVE_QA_FOLDER_ID}}`」。
## 輸出檔案
```
.claude/testing/features/[feature-name]/
├── test-strategy.md
├── test-cases-{feature}-blackbox.xlsx (Google Sheet)
├── test-cases-{feature}-whitebox.xlsx (Google Sheet)
├── coverage-gaps.md
├── automation-plan.md
└── exploratory-guide.md
```
> Markdown-only 模式下,Sheet 改為同名 `.md` 檔。
## 互動模式
- **基礎模式(預設)**:生成所有文件
- **快速模式** `--mode=quick`:只生成測試用例 Sheet
- **深度模式** `--mode=deep`:完整文件 + Mock/Stub 程式碼範例
## 品質檢查
生成後自動驗證:
- [ ] Happy Path + 邊界條件 (>=3) + 錯誤處理 (>=5) + 並發 + 生命週期
- [ ] 測試金字塔比例合理(70% Unit / 20% Integration / 10% UI)
- [ ] 風險矩陣涵蓋所有高風險項目
- [ ] ROI 計算包含維護成本和 Flaky test 風險
- [ ] 雙平台(iOS + Android)實作差異已分析
- [ ] 覆蓋缺口含雙平台現有測試比對
- [ ] CRUD 型功能已確認 Create/Read/Update/Delete 四操作均有對應案例(不能只有 Create)
- [ ] 涉及日期/時間欄位的功能已檢查時區一致性(UTC 儲存 / API 回傳 / 裝置顯示三層轉換 + 跨日跨週跨月邊界時區定義),斷言明確寫出預期時區
## 後續動作
完成後詢問:
1. 生成自動化測試程式碼?(→ `test-automation` skill)
2. 同步測試計劃到 JIRA?
3. 審查測試用例品質?(→ `test-review` skill)
## 設定依賴
| 設定 Key | 用途 | 缺值時行為 |
|---------|------|-----------|
| `google.tc_template_id` | 複製模板建立 Sheet | 改用 `createSpreadsheet` 從零建 |
| `google.qa_tc_folder_id` | 上傳目標資料夾 | 提示使用者手動移檔 |
| `platforms.ios.repo` / `platforms.android.repo` / `platforms.web.repo` | 程式碼影響面分析 | 跳過自動分析,請使用者貼路徑 |
| `platforms.web.enabled` | 啟用 Web 平台測試規劃 | 跳過 Web 測試類型 |
| `platforms.web.frameworks.primary` | Web E2E 預設框架 | 預設 Playwright |
| `platforms.web.default_browsers` | 跨瀏覽器測試範圍 | 預設 Chrome + Safari |
| `workflow.auto_a11y_pairing` | a11y 自動配對 | 不自動建議配對 |
| `mode = markdown-only` | 全程模式 | 不呼叫任何 MCP,輸出 `.md` |
## 範例
詳見 [`examples.md`](./examples.md)
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!