Skip to main content

dotnet-testing-code-coverage-analysis-lite

程式碼覆蓋率分析完整指南。當需要分析程式碼覆蓋率、產生覆蓋率報告或設定 CI/CD 覆蓋率檢查時使用。涵蓋 Coverlet 設定、報告產生、指標解讀與循環複雜度整合。包含 Fine Code Coverage、VS Code 內建工具與最佳實踐。 Keywords: code coverage, 程式碼覆蓋率, 覆蓋率分析, coverage report, Coverlet, Fine Code Coverage, dotnet-coverage, ReportGenerator, line coverage, branch coverage, 行覆蓋率, 分支覆蓋率, cyclomatic complexity, 循環複雜度, runsettings, cobertura

소스 정보

저장소
kevintsengtw/dotnet-testing-agent-orchestration-codex-lite
최근 소스 활동
2026년 10월 2일 07:49
감지된 SKILL.md 언어
중국어
스타
0
포크
0

설치 방법

기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.

소스 파일 검토

설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.

파일 탐색기
7 개 파일

SKILL.md 표시 중

SKILL.md
소스 지침 · 읽기 전용 미리보기
name
dotnet-testing-code-coverage-analysis-lite
description
程式碼覆蓋率分析完整指南。當需要分析程式碼覆蓋率、產生覆蓋率報告或設定 CI/CD 覆蓋率檢查時使用。涵蓋 Coverlet 設定、報告產生、指標解讀與循環複雜度整合。包含 Fine Code Coverage、VS Code 內建工具與最佳實踐。 Keywords: code coverage, 程式碼覆蓋率, 覆蓋率分析, coverage report, Coverlet, Fine Code Coverage, dotnet-coverage, ReportGenerator, line coverage, branch coverage, 行覆蓋率, 分支覆蓋率, cyclomatic complexity, 循環複雜度, runsettings, cobertura
# 程式碼覆蓋率分析指南 ## Code Coverage 核心概念 **程式碼覆蓋率 (Code Coverage)** 是一種測量指標,用來統計測試執行時實際執行了多少程式碼。 **實際價值:** 找出測試盲點、評估測試完整性、輔助重構決策、增加測試信心。 **常見誤解:** - 涵蓋率 100% 不代表沒有 Bug — 只代表程式碼有被執行,不代表驗證了正確行為 - 涵蓋率數字越高不一定越好 — 重點是測試的有效性 - 把涵蓋率當作 KPI 會適得其反 — 開發者會為了衝數字而寫沒有 Assert 的測試 ## 覆蓋率工具選擇 | 工具 | 優點 | 適用場景 | | ---------------------------- | ------------------------------ | -------------- | | Visual Studio Enterprise | 內建整合,完整 UI | 僅 Enterprise | | Fine Code Coverage(推薦) | 免費,即時顯示,編輯器直接標示 | VS 所有版本 | | .NET CLI + Coverlet | 跨平台,CLI 自動化 | CI/CD 流程 | | VS Code 內建 | 跨平台,無需額外擴充套件 | VS Code 開發 | ### Fine Code Coverage 設定 - **安裝方式:** Visual Studio 延伸模組管理 → 搜尋 "Fine Code Coverage" → 安裝 - **必要設定:** 工具 → 選項 → Fine Code Coverage → Enable: `True`、Editor Colouring Line Highlighting: `True` ### VS Code 內建測試覆蓋率 1. 安裝 C# Dev Kit 擴充套件 2. 開啟測試總管(燒杯圖示) 3. 點選「執行涵蓋範圍測試」 4. 查看結果:測試涵蓋範圍視圖、編輯器內顯示、檔案總管顯示 ## 執行覆蓋率分析 ```powershell # .NET CLI(推薦用於 CI/CD) dotnet test --collect:"XPlat Code Coverage" dotnet test --collect:"XPlat Code Coverage" --results-directory ./coverage # Fine Code Coverage:在 VS 中執行測試後自動顯示 # VS Code:開啟測試總管 → 點選「執行涵蓋範圍測試」 ``` ### 方法說明 | 方法 | 工具 | 操作步驟 | | ----------------- | --------------------- | --------------------------------------------- | | .NET CLI | Coverlet + CLI | 執行 `dotnet test --collect:"XPlat Code Coverage"` | | Fine Code Coverage | VS 擴充套件 | 在 VS 中執行測試後自動顯示 | | VS Code | C# Dev Kit | 開啟測試總管 → 執行涵蓋範圍測試 | ## 設定 Coverlet 測試專案需安裝 `coverlet.collector` 套件,並可透過 `runsettings` 檔案進行進階設定(排除規則、閾值、報告格式)。 > 完整 csproj 配置範例請參考 [references/coverlet-csproj-config.md](references/coverlet-csproj-config.md) ## 解讀覆蓋率報告 **顏色標示:** 綠色(已覆蓋)、黃色(部分覆蓋)、紅色(未覆蓋) **覆蓋率指標:** 1. **Line Coverage(行覆蓋率)** — 被執行的行數 / 總行數,最基本的指標 2. **Branch Coverage(分支覆蓋率)** — 被執行的分支數 / 總分支數,比行覆蓋率更準確 3. **Method Coverage(方法覆蓋率)** — 被執行的方法數 / 總方法數 **報告解讀策略:** 優先處理紅色區域(完全未測試)→ 檢查黃色區域(部分分支未測試)→ 評估必要性(簡單 getter/setter 可跳過) ## 結合複雜度指標 循環複雜度(Cyclomatic Complexity)代表程式中獨立邏輯路徑的數量,等於至少需要的測試案例數量。每個 if、for、while、case、&&、|| 都會增加複雜度。 **Visual Studio 擴充套件:** - **CodeMaintainability** — 顯示可維護性指標、計算循環複雜度 - **CodeMaid** — Spade 功能視覺化程式碼結構、顯示每個方法的複雜度 > 完整範例與測試策略請參考 [references/cyclomatic-complexity-example.md](references/cyclomatic-complexity-example.md) ## 改善覆蓋率的策略 **漸進式改善流程:** 1. 第一階段:覆蓋核心業務邏輯(目標 60-70%) 2. 第二階段:補充邊界條件測試(目標 70-80%) 3. 第三階段:處理異常情境(目標 80-85%) 4. 維持階段:新增功能必須有測試 **優先順序:** - **高優先級**:業務邏輯核心、金融計算、資料驗證、權限控制、異常處理 - **中優先級**:資料轉換、格式化邏輯、查詢邏輯 - **低優先級**:簡單 getter/setter、DTO 類別、自動產生的程式碼 **排除不必要的程式碼:** 使用 `[ExcludeFromCodeCoverage]` 屬性或在 runsettings 中排除。 ## 最佳實踐 ### 測試案例數量決策 1. **基於需求分析** — 列出使用案例、識別邊界條件和異常情況 2. **參考複雜度指標** — 循環複雜度提供測試案例下限 3. **平衡覆蓋率與品質** — 不以 100% 覆蓋率為唯一目標,專注於關鍵業務邏輯 ### 四大測試類型 1. **邊界測試**:測試輸入值的上下限 2. **異常測試**:驗證錯誤處理邏輯 3. **主流程測試**:覆蓋正常的業務流程 4. **條件分支測試**:確保所有分支都有測試 ### 持續改善 - 每次提交前檢查涵蓋率變化,Pull Request 時審查覆蓋率 - 關注未覆蓋的關鍵程式碼,優先處理高複雜度未測試區域 - 新功能必須包含測試,Code Review 包含測試檢查 ## CI/CD 整合 覆蓋率分析可整合至 CI/CD Pipeline,在 GitHub Actions 中使用 `dotnet test --collect:"XPlat Code Coverage"` 搭配 `reportgenerator` 產生報告;在 Azure DevOps 中使用 `DotNetCoreCLI@2` 任務搭配 `PublishCodeCoverageResults@1`。 > 完整 YAML 設定範例請參閱 [references/cicd-integration.md](references/cicd-integration.md) ## 常見問題與解決方案 ### Q1: 覆蓋率顯示 0%? 1. 確認已安裝 `coverlet.collector` 套件 2. 檢查 runsettings 設定是否正確 3. 確認測試有實際執行 4. 查看是否有排除設定過於廣泛 ### Q2: Visual Studio 看不到覆蓋率? - Community/Professional 版本:安裝 Fine Code Coverage 擴充套件 - Enterprise 版本:使用內建功能 - 確認已啟用覆蓋率收集 ### Q3: VS Code 無法顯示覆蓋率? 1. 確認已安裝 C# Dev Kit 2. 重新執行「執行涵蓋範圍測試」 3. 檢查 lcov 檔案是否產生 4. 嘗試重新載入視窗 ### Q4: 如何提升覆蓋率? 1. 識別未覆蓋的關鍵程式碼(紅色區域) 2. 補充邊界條件測試 3. 測試所有條件分支 4. 加入異常情境測試 5. 考慮重構過於複雜的方法 ## 檢查清單 - [ ] 已安裝 `coverlet.collector` 套件 - [ ] 可以執行 `dotnet test --collect:"XPlat Code Coverage"` - [ ] 工具可以正常顯示覆蓋率結果 - [ ] 了解覆蓋率數字的真正意義(不是 KPI) - [ ] 已排除不必要的程式碼 - [ ] 專注於測試品質而非覆蓋率數字 ## 範本檔案 - `templates/runsettings-template.xml` - 覆蓋率設定範本 - `templates/coverage-workflow.md` - 完整的工作流程說明 ## 核心理念 > **程式碼覆蓋率是手段,不是目的。** 重點在於關鍵業務邏輯是否都有測試、測試是否真正驗證了預期行為、是否能在重構時提供信心。 ## 輸出格式 - 產生 `coverage.runsettings` 設定檔,配置覆蓋率收集參數與排除規則 - 修改測試專案 `.csproj`,確保包含 `coverlet.collector` 套件參考 - 產生覆蓋率報告(cobertura XML 格式),可供 CI/CD 管線使用 - 提供覆蓋率分析摘要,標示未覆蓋的關鍵區域與改善建議 ## 參考資源 ### 原始文章 - **Day 06 - Code Coverage 程式碼涵蓋範圍實戰指南** - 鐵人賽文章:https://ithelp.ithome.com.tw/articles/10374467 ### 官方文件 - [使用程式碼涵蓋範圍進行單元測試](https://learn.microsoft.com/dotnet/core/testing/unit-testing-code-coverage) - [dotnet-coverage 工具](https://learn.microsoft.com/dotnet/core/additional-tools/dotnet-coverage) - [VS Code Testing](https://code.visualstudio.com/docs/editor/testing) ### 工具 - [Fine Code Coverage](https://marketplace.visualstudio.com/items?itemName=FortuneNgwenya.FineCodeCoverage2022) - [Coverlet](https://github.com/coverlet-coverage/coverlet) - [ReportGenerator](https://github.com/danielpalme/ReportGenerator) ### 相關技能 - `unit-test-fundamentals` - 單元測試基礎與 FIRST 原則 - `xunit-project-setup` - xUnit 專案設定
GitHub에서 보기