Back to skills
SKILL.md
Bug Report
ASecurity協助撰寫標準化、可重現的 Bug 報告(RIDER 格式),支援互動式問答、Root Cause 分析、自動建立 JIRA ticket 並發送通知(Slack / Telegram / Line 多管道)。可從 Google Sheet 測試用例批次生成 Bug 報告。當使用者提到「寫 bug 報告」、「回報問題」、「記錄 bug」、「bug report」、「開 bug 單」、「建立 JIRA bug」,或測試發現問題需要記錄,或提供 Google Sheet 測試用例要批次建立 Bug tickets 時使用。即使使用者只是說「這個有問題」或「測試失敗了」,也應觸發。
- 7 stars
- 0 votes
- 0 copies
- 6 views
- Added September 2, 2026
Works with
Security analysis
100/100Pro scans all 10 files and shows the line behind each finding
npx -y skills add kao273183/qa-claude-skill --skill bug-report --agent claude-codeAre you the author of Bug Report?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/kao273183-bug-report)---
name: bug-report
description: 協助撰寫標準化、可重現的 Bug 報告(RIDER 格式),支援互動式問答、Root Cause 分析、自動建立 JIRA ticket 並發送通知(Slack / Telegram / Line 多管道)。可從 Google Sheet 測試用例批次生成 Bug 報告。當使用者提到「寫 bug 報告」、「回報問題」、「記錄 bug」、「bug report」、「開 bug 單」、「建立 JIRA bug」,或測試發現問題需要記錄,或提供 Google Sheet 測試用例要批次建立 Bug tickets 時使用。即使使用者只是說「這個有問題」或「測試失敗了」,也應觸發。
disable-model-invocation: false
allowed-tools: Read, Grep, Glob, Write, Edit, Bash, mcp__atlassian__createJiraIssue, mcp__atlassian__searchJiraIssuesUsingJql, mcp__atlassian__addCommentToJiraIssue, mcp__google__readSpreadsheet, mcp__google__getSpreadsheetInfo, mcp__google__writeSpreadsheet
argument-hint: "[問題描述 或 Google Sheet URL]"
---
# bug-report
> ⚙️ **執行前先讀 `modules/config-loader.md`**,載入組織設定(JIRA / Slack / 平台預設)。
> 若 `config.json` 不存在或 `mode = markdown-only`,跳過所有 MCP 呼叫並走 [`modules/markdown-fallback.md`](./modules/markdown-fallback.md)。
## RIDER + Root Cause 格式
Bug 報告的**內容**要涵蓋 RIDER 五個分類。詳細說明和範例見 [`rider-format.md`](./rider-format.md)。
| 要素 | 內容 |
|------|------|
| **R**eproduction Steps | 前置條件 + 編號步驟(具體操作:點擊/輸入/滑動) |
| **I**mpact | 嚴重度(Blocker/Critical/Major/Minor)+ 影響範圍 |
| **D**evice/Environment | 平台、OS、裝置、App 版本、環境、網路 |
| **E**xpected vs Actual | 預期行為 vs 實際行為(含錯誤訊息) |
| **R**eferences | 截圖、錄影、Console log、相關 ticket |
> ⚠️ **RIDER 只是內容分類的代稱,不是排版規則。** 實際寫進 JIRA Description 時**不要用「## R — Reproduction Steps」這種字母前綴標題**,要用純中文 H2 標題(`## Bug 描述` / `## 重現步驟 (Reproduction)` / `## 預期行為` / `## 實際行為` / `## 環境資訊 (Device/Environment)`,環境資訊用表格 / `## 影響範圍 (Impact)` / `## Root Cause 分析` / `## 相關 Issue`),這是團隊既有格式(範例:`UOP-6804`),完整模板見 [`templates.md`](./templates.md)。
> ⚠️ **Root Cause 分析是獨立的必填區塊,不是 References 底下的附屬項目。** 每張 bug ticket 的 JIRA Description 都必須包含 RIDER 五要素對應的內容 *加上* 一個獨立的「Root Cause 分析」段落(Phase 3 的產出,含「可能根因」「與既有 Bug 的關聯」「建議排查方向」三個子項)*加上*「相關 Issue」段落(父系 Epic / 相關 ticket / 測試用例)。即使是 `suggestion-only` 深度(無 repo 可查),也要寫出「可能原因」與「建議修復方向」,不可整段省略或留白。
## 執行模式
### 模式 1: 互動式問答(預設)
依 Phase 1→6 逐步執行,每個 Phase 完成後才進入下一步。
### 模式 2: 快速模式(使用者一次提供完整資訊)
直接解析資訊 → Phase 2 查重 → Phase 3 Root Cause → Phase 4 建 JIRA → Phase 5 同步 → Phase 6 追蹤
### 模式 3: 從 Google Sheet 測試用例批次生成
> 需要 `config.json#mode != markdown-only` 且 `google.qa_tc_folder_id` 已設定。
1. 讀取 Google Sheet(status sheet + 測試用例 sheet)
2. 篩選 Column C = Fail 的項目
3. 檢查 Column N 是否已有 JIRA ticket → 有則跳過
4. 對每個 Fail 項目執行 Phase 2~4
5. 回寫 ticket 號碼到 Google Sheet Column N
6. 發送 Slack DM 彙總通知(依 `slack.notification_rules.bug_report`)
---
## 6 Phase 標準流程
### Phase 1: 資訊收集
**必備環境資訊(不完整要主動問):**
| 項目 | 必填 | 說明 |
|------|------|------|
| 平台 | ✅ | iOS / Android |
| 裝置型號 | ✅ | 預設 iOS:`{{IOS_DEFAULT_DEVICE}}`、Android:`{{ANDROID_DEFAULT_DEVICE}}` |
| OS 版本 | ✅ | 預設 iOS:`{{IOS_DEFAULT_VERSION}}`、Android:`{{ANDROID_DEFAULT_VERSION}}` |
| App 版本 | ✅ | 自動偵測:iOS `{{IOS_VERSION_FILE_PATTERN}}` / Android `**/build.gradle` |
| 環境 | ✅ | Production / Staging / UAT |
| 網路環境 | ⚠️ | WiFi / 4G / 5G(網路相關 Bug 必問) |
| 登入狀態 | ⚠️ | 已登入 / 未登入(登入相關 Bug 必問) |
| 安裝方式 | ⚠️ | 首次安裝 / 升級安裝(資料遷移 Bug 必問) |
| 語系設定 | ⚠️ | 中文 / 英文(UI 顯示 Bug 必問) |
**版本→分支對應(Root Cause 分析需要):**
```bash
# iOS — 找 release/testing 分支
gh api repos/{{IOS_REPO}}/branches --jq '.[].name' --paginate | grep "{version}"
# Android — 找 tag(若 default branch 不是 release 用)
gh api "repos/{{ANDROID_REPO}}/tags?per_page=10" --jq '.[] | .name'
```
> 若 `{{IOS_REPO}}` / `{{ANDROID_REPO}}` 為空,跳過版本→分支對應步驟,直接以 default branch 分析。
### Phase 2: 查重
建 JIRA 前**必須**搜尋是否已有相同/類似 ticket:
```
JQL: project = {{JIRA_PROJECT_KEY}} AND summary ~ "關鍵字" AND status != Done ORDER BY created DESC
JQL: project = {{JIRA_PROJECT_KEY}} AND parent = {{JIRA_PROJECT_KEY}}-XXXX AND issuetype = Bug ORDER BY created DESC
```
- 找到相同 → 不開新的,在既有 ticket 加 comment 補充
- 找到類似 → 開新的,description 中 reference 相關 ticket
### Phase 3: Root Cause 分析
依據 `config.json#workflow.auto_root_cause_depth` 決定深度:
| 平台 | `deep` | `suggestion-only` |
|------|--------|-------------------|
| iOS | 深入程式碼分析 + 檔案行數 | 只給可能原因與修復方向 |
| Android | 深入程式碼分析 + 檔案行數 | 只給可能原因與修復方向 |
**`deep` 模式步驟:**
1. **版本差異分析** — 比較測試版本 vs 前一版本:
```bash
gh api "repos/{{IOS_REPO}}/compare/{prev}...{current}" --jq '{
total_commits, changed_files: [.files[].filename] | length
}'
```
2. **篩選相關檔案** — 用關鍵字過濾變更檔案
3. **用正確分支讀程式碼** — `git show origin/{branch}:{path}` 或 GitHub API
4. **檢查是否已修復** — 搜尋 main/develop 是否有 fix commit
5. **跨平台比對**(若 `workflow.auto_cross_platform_check = true`)— iOS 有問題時也查 Android 對應程式碼,反之亦然
### Phase 4: 建立 JIRA Ticket
**RIDER + Root Cause 格式填入 JIRA Description**(模板見 [`templates.md`](./templates.md))。Root Cause 分析段落**必填**——直接沿用 Phase 3 的產出,不得因為「還沒查」或「不確定」而整段跳過;`suggestion-only` 深度下至少要有可能原因與修復方向兩項。
**JIRA 欄位設定:**
| 欄位 | 值 |
|------|---|
| Project | `{{JIRA_PROJECT_KEY}}` |
| Issue Type | Bug (id: `{{JIRA_BUG_ISSUE_TYPE_ID}}`) |
| Priority | 依 `jira.priority_mapping` 對應(Blocker→Highest, Critical→High, Major→Medium, Minor→Low) |
| Parent | 依使用者指定(詢問) |
| Team | 依 `jira.boards[]` 選擇(詢問) |
| 驗收者 | `{{JIRA_REVIEWER_FIELD}}` = `{{JIRA_REVIEWER_ACCOUNT_ID}}` |
**附件上傳**(JIRA MCP 不支援檔案上傳):
1. `uploadFileToDrive` 上傳到 Google Drive
2. `set_drive_file_permissions` → link_sharing = reader
3. `addCommentToJiraIssue` 貼 Google Drive 連結
4. 命名規則:`{ticket號}_{描述}.{副檔名}`
> 若 `config.json#mode = markdown-only` 或 atlassian MCP 不可用,改走 [`modules/markdown-fallback.md`](./modules/markdown-fallback.md) 產出 `bug-{slug}.md` 檔案。
### Phase 5: 同步更新
**Google Sheet 回寫(如 Bug 來自測試用例):**
- Column C → `Fail`
- Column D → 失敗原因描述
- Column N → `=HYPERLINK("{{JIRA_INSTANCE_URL}}/browse/{{JIRA_PROJECT_KEY}}-xxxx", "{{JIRA_PROJECT_KEY}}-xxxx")`
**通知(依 `config.notifications.enabled_channels` 可多管道並存):**
- **Slack**(MCP,依 `slack.notification_rules.bug_report`):`dm` → `{{SLACK_USER_ID}}`、`channel` → `{{SLACK_BUG_CHANNEL_ID}}`
- **Telegram / Line**:見 [`modules/multichannel-notify.md`](./modules/multichannel-notify.md)(走 Bot API curl,token 從 config)
- 內容:ticket 號、標題、priority、關鍵資訊
**跨平台驗證建議**(若 `workflow.auto_cross_platform_check = true`,每次必做):
- iOS 有問題 → 主動建議驗證 Android 同一場景
- Android 有問題 → 主動建議驗證 iOS 同一場景
- 另一平台也有問題 → 在同一 ticket 補充或開新 ticket(用 Relates 連結)
**a11y 自動配對**(若 `workflow.auto_a11y_pairing = true`):
- a11y 相關 bug 預設開一對 iOS + Android ticket,並用 Relates 連結
### Phase 6: 後續追蹤
建完 ticket 後提醒使用者:
1. Bug 修復後需要重新驗證
2. 驗證通過 → 更新 Google Sheet(Fail → Pass)
3. 檢查此場景是否有對應 test case,沒有的話建議補上(→ `test-master` skill)
## 品質檢查
生成前自動驗證:
- [ ] 重現步驟清楚可執行
- [ ] 預期 vs 實際行為明確
- [ ] 環境資訊完整(9 項必填/條件必填)
- [ ] 嚴重度與影響範圍一致
- [ ] 避免主觀描述(「很慢」→「載入 > 5 秒」)
- [ ] 不包含敏感資訊(密碼、Token、個資用 `[已遮蔽]`)
- [ ] 已執行 Phase 2 查重
- [ ] 已執行 Phase 3 並在 JIRA Description 寫入獨立的「Root Cause 分析」段落(可能根因 + 與既有 Bug 的關聯 + 建議排查方向,`deep` 模式再加相關程式碼 file:line)——**沒有這個段落不算完成,不可只在 References 提一句「待查」**
- [ ] 標題全部用純中文 H2(不加 R/I/D/E/R 字母前綴),環境資訊用表格,結尾有「相關 Issue」段落(父系 Epic / 相關 ticket / 測試用例)——格式對照範例 `UOP-6804`
## 報告模板
詳見 [`templates.md`](./templates.md)(含互動式模板和 JIRA Description 模板)
## 範例
詳見 [`examples.md`](./examples.md)
## 整合其他 Skill
- 測試計劃中發現 Bug → 自動觸發 `bug-report`
- Bug 修復後 → `test-master` 補充防護測試
- Code Review 發現問題 → 詢問建立 Bug 報告或 Task
## 設定依賴
| 設定 Key | 用途 | 缺值時行為 |
|---------|------|-----------|
| `jira.instance_url` + `jira.project_key` | 建 ticket | 走 markdown fallback |
| `jira.reviewer_account_id` | 設驗收者 | 不設此欄位 |
| `jira.bug_issue_type_id` | Issue type | 預設 10046(標準 JIRA) |
| `slack.user_id` / `slack.bug_channel_id` | 通知 | 跳過對應通知 |
| `google.qa_tc_folder_id` | 批次模式 | 模式 3 不可用 |
| `platforms.ios.repo` / `platforms.android.repo` | Root Cause 分析 | 跳過版本→分支查找 |
| `workflow.auto_cross_platform_check` | 跨平台建議 | 不主動建議 |
| `workflow.auto_a11y_pairing` | a11y bug 配對 | 不自動開對 |
| `workflow.auto_root_cause_depth` | RCA 深度 | iOS 預設 deep、Android 預設 suggestion-only |
Files in this skill
- SKILL.en.md
- SKILL.md
- examples.md
- modules/config-loader.md
- modules/jira-integration.md
- modules/markdown-fallback.md
- modules/multichannel-notify.md
- modules/slack-integration.md
- rider-format.md
- templates.md
Attribution
Comments
Loading comments…
Newsletter
Get the weekly list of safe new skills, and the ones we pulled.