AI 加速 PR / Code Review
QA 不寫 code、但最該 review PR — 因為你最懂「這改動會不會弄壞別的東西」。問題是 PR 一天十幾個、人工看不完。AI 的角色不是幫你按 LGTM、是幫你把 diff 變成一張風險地圖、讓你把精力放在只有人能判斷的地方。
三層分工:AI 抓什麼、你抓什麼
flowchart TB
PR[PR 進來] --> L1["第 1 層 · AI 自動<br>語法 / null / convention / 明顯 bug"]
L1 --> L2["第 2 層 · AI 輔助<br>blast radius / 缺的 test / 風險熱區"]
L2 --> L3["第 3 層 · 只有你能做<br>業務邏輯 / 跨系統連動 / regression 判斷"]
style L1 fill:#10b981,color:#fff
style L2 fill:#f59e0b,color:#fff
style L3 fill:#a855f7,color:#fff
| 層 | 誰做 | 抓什麼 |
|---|---|---|
| 語法層 | AI 全自動 | typo、null check、未處理 exception、code style |
| 風險層 | AI 出地圖、你判讀 | 改動影響範圍、缺的 test、可疑熱區 |
| 業務層 | 只有 QA | 業務規則對不對、會不會連動下游、該重測什麼 |
AI 越往下越不可信。語法層放心交給它、業務層永遠人工。
用 LLM 算 Regression Blast Radius
QA 看 PR 最該問的不是「這段 code 對嗎」、是「這改動會炸到哪」。把 diff 丟給 LLM:
Prompt:
「以下是一個 PR 的 diff。以 QA 角度分析:
1. Blast radius — 這改動會影響哪些模組 / API / 報表 / 下游流程?
2. Regression 風險 — 哪些『既有』功能可能因此壞掉?
3. 缺的 test — 這 diff 應該補哪些 test case 才安全?
4. 重測範圍 — 上線前我該手動重測哪些路徑?
只列 high / medium 風險、low 的略過。
[paste diff]」
flowchart LR
D[PR diff] --> AI[LLM 分析]
AI --> B1[影響模組清單]
AI --> B2[regression 熱區]
AI --> B3[缺的 test]
AI --> B4[該重測的路徑]
B1 & B2 & B3 & B4 --> You[你決定<br>重測 scope]
style AI fill:#a855f7,color:#fff
style You fill:#06b6d4,color:#fff
省:原本要追 code 半小時搞懂影響範圍、現在 3 分鐘拿到地圖、人工驗證熱區即可。
找出 diff 漏掉的 Test
AI 很擅長挑「這段改動沒被任何 test 蓋到」:
Prompt:
「以下是 diff + 現有 test 檔。
列出這次改動中『沒有對應 test』的邏輯分支、
依風險排序、並各給一個建議 test case 標題。」
合併條件可以設:新增/修改的邏輯分支必須有對應 test、AI 先掃、你確認。
工具配置
mindmap
root((AI PR Review 工具))
自動 review
CodeRabbit
GitHub Copilot review
Qodo Merge
互動分析
Claude 貼 diff 問風險
Cursor 跨檔追連動
CI 整合
PR 自動留言
風險標籤
缺 test 警示
| 工具 | 角色 | QA 用法 |
|---|---|---|
| CodeRabbit | PR 自動 review | 第 1 層語法、自動留言 |
| Claude / Cursor | 互動分析 | 貼 diff 問 blast radius |
| GitHub Copilot | inline 建議 | 補 test、看 diff |
| Qodo (PR-Agent) | 開源 PR bot | 自架、敏感 repo 用 |
一個 PR 的 review 流程
flowchart TB
A[PR 進來] --> B[CodeRabbit 自動掃<br>出 100 條 comment]
B --> C[你掃一眼<br>挑 5 條關鍵]
C --> D[貼 diff 給 Claude<br>問 blast radius + 缺 test]
D --> E[人工驗證熱區<br>跑該重測的路徑]
E --> F{業務邏輯對?}
F -->|是| G[Approve + 註明重測範圍]
F -->|否| H[Request changes<br>附 regression 風險]
style B fill:#10b981,color:#fff
style D fill:#a855f7,color:#fff
style E fill:#06b6d4,color:#fff
style F fill:#f59e0b,color:#fff
實測一個中型 PR:傳統人工 review 40 分鐘 → AI 輔助 15 分鐘、且風險覆蓋更完整。
別被 Nitpick 洪水淹沒
AI review 最大副作用:100 條格式建議、淹掉 3 條真風險。
flowchart LR
AI[AI 出 100 條] --> N["95 條 nitpick<br>命名 / 空行 / 格式"]
AI --> R["5 條真風險<br>null / 邏輯 / 安全"]
N -.淹沒.-> R
style N fill:#94a3b8,color:#fff
style R fill:#ef4444,color:#fff
對策:
# CodeRabbit / PR bot 設定
review:
severity_threshold: high # 只報 high、過濾 nitpick
group_nitpicks: true # 格式類折疊成一條
focus:
- security
- logic-error
- missing-error-handling
skip:
- style-only
讓 AI 只講重話、格式類交給 linter。
反模式
flowchart TD
Anti[AI PR Review 反模式] --> A1["看到 AI 說 LGTM 就合"]
Anti --> A2["100 條 nitpick 全貼給作者"]
Anti --> A3["AI 沒抓到 = 沒問題"]
Anti --> A4["不給 AI 上下文、只貼一段"]
Anti --> A5["業務邏輯也信 AI 判斷"]
Anti --> A6["不記重測範圍、合了就忘"]
style A1 fill:#ef4444,color:#fff
style A2 fill:#ef4444,color:#fff
style A3 fill:#ef4444,color:#fff
style A4 fill:#ef4444,color:#fff
style A5 fill:#ef4444,color:#fff
style A6 fill:#ef4444,color:#fff
特別注意 A3:「AI 沒抓到」不等於「沒問題」。AI 看不到 system 上下文、跨服務連動、歷史 incident — 這些正是 QA 的價值。
給 QA 的 5 句
- QA review PR 看的是風險、不是語法
- AI 給 blast radius 地圖、你決定重測範圍
- 只讓 AI 報 high severity、nitpick 交給 linter
- AI 沒抓到不代表安全
- 業務邏輯與跨系統連動、永遠人工把關
最後
PR review 是 QA 把關上線品質的最後一道閘。AI 讓你從「追 code 追到累」進化成「看風險地圖做決策」。把語法層交給 CodeRabbit、把 blast radius 丟給 Claude、自己專心在只有人能判斷的業務 regression — 這才是 QA 在 AI 時代該站的位置。
延伸: - AI 寫的 Test 怎麼信任 - AI 生成 Code 怎麼測 - QA 的 AI Workflow Daily Routine - QA 該懂的 CI/CD 基礎