# 測試覆蓋率 (Test Coverage) 分析測試覆蓋率,識別缺口,並生成缺失的測試,以達到 80% 以上的覆蓋率。 ## 步驟 1:偵測測試框架 | 指標 | 覆蓋率指令 | |-----------|-----------------| | `jest.config.*` 或 `package.json` 中的 jest | `npx jest --coverage --coverageReporters=json-summary` | | `vitest.config.*` | `npx vitest run --coverage` | | `pytest.ini` / `pyproject.toml` 中的 pytest | `pytest --cov=src --cov-report=json` | | `Cargo.toml` | `cargo llvm-cov --json` | | `pom.xml` 搭配 JaCoCo | `mvn test jacoco:report` | | `go.mod` | `go test -coverprofile=coverage.out ./...` | ## 步驟 2:分析覆蓋率報告 1. 執行覆蓋率指令並擷取輸出 2. 解析輸出結果 (JSON 摘要或終端機輸出) 3. 列出**覆蓋率低於 80%** 的檔案,按覆蓋率由低到高排序 4. 針對每個覆蓋率不足的檔案,識別: - 未經測試的函式或方法 - 缺失的分支覆蓋 (if/else, switch, 錯誤路徑) - 膨脹分母的死碼 (Dead code) ## 步驟 3:生成缺失的測試 針對每個覆蓋率不足的檔案,按以下優先順序生成測試: 1. **快樂路徑 (Happy path)** — 使用有效輸入測試核心功能 2. **錯誤處理 (Error handling)** — 無效輸入、缺少資料、網路故障 3. **邊緣情況 (Edge cases)** — 空陣列、null/undefined、邊界值 (0, -1, MAX_INT) 4. **分支覆蓋 (Branch coverage)** — 涵蓋每個 if/else, switch case, 三元運算子 ### 測試生成規則 - 測試檔案應鄰近原始碼:`foo.ts` → `foo.test.ts` (或遵循專案慣例) - 使用專案現有的測試模式 (匯入風格、斷言庫、Mock 方式) - Mock 部依賴 (資料庫、API、檔案系統) - 每個測試應相互獨立 — 測試之間不共享可變狀態 - 描述性的測試命名:`test_create_user_with_duplicate_email_returns_409` ## 步驟 4:驗證 1. 執行完整的測試套件 — 所有測試必須通過 2. 重新執行覆蓋率檢查 — 驗證改善情況 3. 如果仍低於 80%,針對剩餘缺口重覆步驟 3 ## 步驟 5:報告 顯示前後對比: ``` 覆蓋率報告 (Coverage Report) ────────────────────────────── 檔案 之前 之後 src/services/auth.ts 45% 88% src/utils/validation.ts 32% 82% ────────────────────────────── 總體覆蓋率: 67% 84% ✅ ``` ## 重點關注區域 - 具有複雜分支的函式 (高循環複雜度) - 錯誤處理器與 catch 區塊 - 程式碼庫中通用的工具函式 (Utility functions) - API 端點處理程序 (Request → Response 流程) - 邊緣情況:null, undefined, 空字串, 空陣列, 零, 負數