> 九號工具站
返回列表

AI 生成 Code 怎麼測 — Copilot / Cursor 寫的 Code 給 QA 的新挑戰

GitHub Copilot / Cursor / Claude Code 等 AI 工具產出的 code 風險與測試策略。Hallucination 模式、Security 漏洞、Edge case 漏洞、隱藏的相依性、QA 的新角色。

QA ai-code copilot cursor vibe-coding code-quality
· 最後更新 2026-06-17 · 最後審閱 2026-08-30

💡 本文原刊於 qa.9niche.com,2026-08 併入 9niche.com 懶人包,內容照原文完整搬遷。

1. 前言

「Dev 用 Copilot 寫 code 變 3 倍快、QA 接到的 bug 也變 5 倍多」 — 這是 2026 年大多公司的真實狀況。AI 寫 code 有它特有的 bug pattern、傳統 QA 方法抓不到。這篇給你新時代 framework。

2. AI 寫 code 風險地圖

mindmap root((AI Code<br>新風險)) Hallucination 幻覺 編造不存在 API 過時 library 用法 錯誤類型推斷 不存在 method Surface vs Deep 表面 bug 多 但會被 lint 抓 深層邏輯錯難發現 Security SQL injection 沒過濾 XSS 沒 escape Secrets in code 過時 crypto 重複度 Duplicate code Copy-paste 模式 技術債爆 Edge case Happy path OK 邊界漏洞多 Error handling 不一致 隱藏依賴 偷加 dependency 用過時 package License 風險

3. 研究數據(2024-2025)

結論:AI 不是讓 code 變好、是讓寫 code 變快、bug 變多。QA 工作量爆增、不是減少。

flowchart LR Y23[2023] --> Copilot[Copilot 採用爆] Copilot --> S1[GitClear 研究] S1 --> R1["Code churn +25%"] S1 --> R2["Duplicate code +17%"] S1 --> R3["Move code 操作 -39%"] Copilot --> S2[Stanford 研究] S2 --> SR1["Security vulnerabilities<br>+40% 含 AI code"] Copilot --> S3[Snyk / Sonar 2025] S3 --> SR2["LLM 寫的 code 有<br>已知 CVE 機率 +73%"] style R1 fill:#ef4444,color:#fff style R2 fill:#ef4444,color:#fff style SR1 fill:#ef4444,color:#fff style SR2 fill:#ef4444,color:#fff

4. 7 種 AI Code 特有 bug

1. 幻覺 API

// AI 寫的
import { useDebouncedCallback } from 'react-use';
const debouncedFn = useDebouncedCallback(handler, 500);

// 真實情況:'react-use' 沒有這 hook、是 use-debounce package 的
// → Build 過、runtime 爆

QA 對策

  • ESLint + eslint-plugin-import 抓不存在的 import
  • 跑 build 在 CI 上強制

2. 過時 library 用法

// AI 寫的 — 用 React 17 寫法
class MyComponent extends React.Component {
  componentWillMount() { /* deprecated */ }
}

// React 18+ 已 deprecate
// 跑得起來但會 warning + 之後爆

QA 對策

  • 升級 deprecated API checker
  • 看 console warnings

3. Security 漏洞

# AI 寫的
def search_users(query):
    sql = f"SELECT * FROM users WHERE name LIKE '%{query}%'"
    return db.execute(sql)

完美的 SQL Injection。AI 不會自動用 parameterized query。

QA 對策

  • SAST 工具(Semgrep / CodeQL)
  • 跑 OWASP Top 10 測試(見 Security Testing

4. Race condition

// AI 寫的
async function transferMoney(from, to, amount) {
  const balance = await getBalance(from);
  if (balance < amount) throw new Error('Insufficient');
  await updateBalance(from, balance - amount);
  await updateBalance(to, await getBalance(to) + amount);
}

沒 transaction、沒 lock、雙寫 race

QA 對策

  • Concurrent test case
  • 壓力測試(同時 100 個 request)

5. Edge case 漏

AI 寫 happy path 完美、邊界錯:

  • 空陣列 / null / undefined
  • 負數 / 零 / 極大值
  • 字串含特殊字元
  • 日期跨時區

QA 對策

  • 等價分割 + 邊界值 test
  • Property-based testing(hypothesis / fast-check)

6. Error handling 不一致

// 同 codebase 同 dev 同 session 寫的兩個函式

async function fn1() {
  try { return await api1(); }
  catch (e) { throw new Error('API1 failed'); }
}

async function fn2() {
  return await api2().catch(e => { console.log(e); return null; });
}

錯誤處理風格不一致、QA 測試行為差。

QA 對策

  • 強制 error handling 規範
  • Test「失敗路徑」跟「成功路徑」一樣多

7. 隱藏依賴

AI 自動 npm install some-package、可能:

  • 是 typosquatted package(typo 攻擊)
  • 過期 / abandoned
  • License 衝突(GPL → 商用問題)

QA 對策

  • Snyk / Socket.dev 掃 dependency
  • Dependabot alerts

5. QA 在 AI-Driven Dev 的新角色

flowchart LR Old[2023 QA] --> O1[測 dev 寫的 code] Old --> O2[找 bug] Old --> O3[寫 regression] New[2026 QA] --> N1["不只測結果<br>還測「這 code 對應到 spec 嗎」"] New --> N2[Spec 階段更深介入] New --> N3[補 dev 看不見的 edge case] New --> N4[Security / a11y / perf 等專業守門] New --> N5[Production observability 主要負責] style Old fill:#9ca3af,color:#fff style New fill:#10b981,color:#fff

6. Vibe Coding 時代 — QA 是唯一懂 system 的人

QA 的新技能:用 AI 反過來「審查」AI 寫的 code。

flowchart TD Vibe[Vibe Coding 工作流] --> Dev[Dev 用 Claude / Cursor 寫] Dev --> Quick[3 倍快出 feature] Quick --> Unknown[Dev 不完全懂自己的 code] Unknown --> Risk[上線後出事誰負責?] Risk --> QA[QA 變唯一懂 system 的人] QA --> NewSkill[QA 必須會讀 code + AI 一起對話] style Risk fill:#ef4444,color:#fff style QA fill:#a855f7,color:#fff

7. CI 整合:AI Code 守門

name: AI Code Guard

on: [pull_request]

jobs:
  ai-quality:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      # 1. Lint - 抓幻覺 API、過時用法
      - run: npx eslint --ext .ts,.tsx .

      # 2. SAST - 抓 security 漏洞
      - uses: github/codeql-action/init@v3
      - uses: github/codeql-action/analyze@v3
      - uses: returntocorp/semgrep-action@v1

      # 3. Dependency scan
      - uses: snyk/actions/node@master

      # 4. Build - 確認 import 對
      - run: npm run build

      # 5. Test - 確認業務邏輯
      - run: npm test

      # 6. Coverage - 強制覆蓋
      - run: npm run coverage
      - run: |
          COV=$(jq '.total.lines.pct' coverage/coverage-summary.json)
          if (( $(echo "$COV < 80" | bc -l) )); then exit 1; fi

      # 7. AI code review
      - uses: anc95/ChatGPT-CodeReview@main

8. QA 該設的 PR 守門條件

✓ Build pass
✓ Lint 0 errors
✓ All tests pass
✓ Coverage > 80%
✓ Snyk 0 high/critical
✓ Semgrep 0 security finding
✓ CodeRabbit / AI review 沒 P0/P1
✓ Reviewer 至少 1 個 senior approve

這 8 個全綠才能 merge

9. AI Code Review 工具

工具用途
CodeRabbitPR 自動 AI review
Greptile跨 repo 理解的 AI review
Codium PR-AgentOpen source
SourceryRefactor 建議
Sweep自動寫 fix code

10. 反模式

flowchart TD Anti[反模式] --> A1["完全信任 AI code、不 review"] Anti --> A2["test 只測 happy path"] Anti --> A3["AI 寫完直接 merge 不 build"] Anti --> A4["Coverage 高就放心"] Anti --> A5["不跑 SAST / Snyk"] Anti --> A6["QA 只跑 functional test"] 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

11. 給 QA 的 5 句

  1. AI 寫 code 越普及、QA 越重要
  2. 每篇 AI code 都假設「有幻覺 + 有 security 漏洞」
  3. Coverage 不代表品質、要看 edge case 覆蓋
  4. 建 CI 8 個守門關卡
  5. 學會用 AI 審 AI 寫的 code

12. 最後

AI 寫 code 不會殺掉 QA、是讓 QA 變得更稀缺、薪資更高。從建 CI 8 個守門 + 學會用 AI 抓 AI 的 bug 開始、半年後你會變 dev team 不可缺的「品質最後防線」。

延伸:

ℹ️

一般聲明

本站提供之資訊僅供參考,不保證其完整性與正確性。使用者應自行判斷資訊之適用性。

意見反饋