---
title: AI 加速 PR / Code Review — QA 怎麼用 AI 抓 Regression 風險
date: 2026-06-23
category: ai-qa
description: QA 不寫 code 也要 review PR。這篇教你用 AI 跑 PR review:三層分工（AI 抓語法、你抓風險）、用 LLM 算 diff 的 regression blast radius、找漏掉的 test、CodeRabbit 設定、以及別被 100 條 nitpick 淹沒的反模式。
tags: [pr-review, code-review, regression, coderabbit, qa-ai]
faq:
  - q: QA 又不寫 code、為什麼要 review PR？
    a: QA review PR 不是看語法、是看「這個改動會不會弄壞別的功能」。你最懂 system 行為跟 regression 熱區。AI 幫你掃語法跟 convention、你專心評估 blast radius、缺哪些 test、業務邏輯對不對。
  - q: 有了 CodeRabbit 這類 AI review、QA 還需要看嗎？
    a: 需要。AI 擅長 syntax / null check / convention、但抓不到「這改動會連動到下游報表」這種 system 級 regression。AI 出 100 條、你挑 5 條關鍵 + 補 3 條 AI 看不到的業務風險。分工、不是取代。
  - q: 怎麼用 AI 快速判斷一個 PR 風險多大？
    a: 把 diff 丟給 LLM、問三件事:1) 這改動的 blast radius（會影響哪些模組/API/報表）；2) 哪些既有功能可能 regression；3) 這 diff 缺哪些 test。AI 給地圖、你決定要重測什麼。
  - q: AI review 最常出的錯是什麼？
    a: 兩個:一是「nitpick 洪水」— 100 條格式建議淹掉 3 條真風險；二是「假性肯定」— 看起來沒問題就說 LGTM、但沒理解業務上下文。對策:設定只報 high-severity、業務風險永遠人工把關。
---

# AI 加速 PR / Code Review

QA 不寫 code、但**最該 review PR** — 因為你最懂「這改動會不會弄壞別的東西」。問題是 PR 一天十幾個、人工看不完。AI 的角色不是幫你按 LGTM、是**幫你把 diff 變成一張風險地圖**、讓你把精力放在只有人能判斷的地方。

## 三層分工：AI 抓什麼、你抓什麼

```mermaid
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]」
```

```mermaid
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 先掃、你確認。

## 工具配置

```mermaid
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 流程

```mermaid
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 條真風險**。

```mermaid
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
```

對策：

```yaml
# CodeRabbit / PR bot 設定
review:
  severity_threshold: high      # 只報 high、過濾 nitpick
  group_nitpicks: true          # 格式類折疊成一條
  focus:
    - security
    - logic-error
    - missing-error-handling
  skip:
    - style-only
```

**讓 AI 只講重話、格式類交給 linter**。

## 反模式

```mermaid
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 句

1. **QA review PR 看的是風險、不是語法**
2. **AI 給 blast radius 地圖、你決定重測範圍**
3. **只讓 AI 報 high severity、nitpick 交給 linter**
4. **AI 沒抓到不代表安全**
5. **業務邏輯與跨系統連動、永遠人工把關**

## 最後

PR review 是 QA 把關上線品質的最後一道閘。AI 讓你從「追 code 追到累」進化成「看風險地圖做決策」。把語法層交給 CodeRabbit、把 blast radius 丟給 Claude、自己專心在只有人能判斷的業務 regression — 這才是 QA 在 AI 時代該站的位置。

延伸：
- [AI 寫的 Test 怎麼信任](/ai-qa/trusting-ai-generated-tests.html)
- [AI 生成 Code 怎麼測](/ai-qa/testing-ai-generated-code.html)
- [QA 的 AI Workflow Daily Routine](/ai-qa/qa-ai-daily-workflow.html)
- [QA 該懂的 CI/CD 基礎](/automation/cicd-for-qa-basics.html)
