读取 lcov、llvm-cov JSON、Cobertura、JaCoCo、Istanbul、SimpleCov、Clover、OpenCover、coverage.py、gcov、Go、Coveralls、SonarQube、GNATcoverage、Bullseye、Visual Studio、Xcode、VectorCAST、Testwell CTC++、TRACE32、EMMA、UCIS/UCDB、NCover 和 dotCover 跟踪文件,归一化为一个规范模型,确定性地合并多次运行,并直接在编辑器装订线中查看结果 —— 在 VS Code 中,以及各个版本的 Visual Studio 2022 和 2026 中。无需离开编辑器去打开单独的查看器。
免费上手。Fucini Coverage Studio 在 14 天试用期内免费运行,全部功能解锁。试用结束后不会将您拒之门外,而是转入免费的 Community 层级 —— 除 MC/DC 外的每一项功能都可使用,其中少数几项带有宽松的每月用量上限。您可以随时升级以获得不受限制的完整功能集,也可以通过共享详细的使用遥测免费解锁全部功能。查看方案 →
接下来:所有这些覆盖率都将进入 Azure DevOps,以免费扩展的形式。 Azure DevOps 在构建上显示覆盖率,但仅限于其自身格式所及 —— 行,以及以百分比表示的分支。Fucini DevOps Studio 将显示 Coverage Studio 读取的全部内容:这 25 种格式中的每一种,适用于每种语言,带有 MC/DC、条件、综合分数和门槛,作为生成它的流水线上的 Coverage 选项卡。请关注新闻以获知首个版本的发布。
Screenshot pending — add assets/img/hero.png (see SCREENSHOTS.md).当测试是 AI 写的
语言模型几秒钟就能写出一套测试,读起来也很有说服力。它无法告诉你的是,这些测试有没有触及真正重要的地方——行覆盖率同样无法告诉你,因为一个完全没有断言的测试,照样会点亮它经过的每一行。
MC/DC 与分支覆盖率显示每个判定是否真的被执行,而不只是该行是否被走到。生成的测试通常只走顺利路径,把每个 if 的另一侧原封不动地留下——这读起来就是行覆盖 100%、分支覆盖 50%。这个差距就是结论。
死代码检测会列出没有任何测试触及的函数。生成的测试会在标题里提到它们,却从未真正到达——在一次全绿的测试运行里,这是看不见的。
差异覆盖率只衡量相对 git 基线发生变化的部分,于是"测试通过了"变成"你刚刚接受的代码已被测试"。无论是人写的还是助手写的,都一样适用。
这些都不能证明一个测试好——没有任何东西能证明。它逐行、精确地告诉你哪些代码从未运行过:这正是评审者记不住、助手也不会主动提起的部分。通过 Vitest、Jest 或 nyc 支持 TypeScript 和 JavaScript,并通过那些工具链本就生成的 tracefile 支持 C、C++、Java 和 Ruby。
有何不同
LCOV、llvm-cov JSON、Cobertura、JaCoCo、Istanbul/nyc、SimpleCov、Clover、OpenCover、coverage.py、gcov JSON 和纯文本、Go、Coveralls、SonarQube、GNATcoverage、Bullseye、Visual Studio、Xcode、VectorCAST、Testwell CTC++、TRACE32、EMMA、UCIS/UCDB、NCover 和 dotCover —— 自动检测并以确定性方式合并,同时记录来源信息。
行、分支和函数装订线标记、概览标尺、资源管理器徽章,以及 Covered Files 视图。
来自 llvm-cov 的 Modified Condition/Decision Coverage、区域覆盖率和 C++ 实例化覆盖率,悬停时可查看每个判定的详细分解。
跨所有指标的单一加权调和平均值,权重与 IEC 61508 / ISO 26262 / DO-178C 等级对齐。
基于每个指标阈值以及 strict、whm、both 或 either 模式给出的 COMPLIANT / NON-COMPLIANT 判定。
仅将装饰限制在相对于 git 基准引用发生更改的行上 —— 非常适合精确审查某个 PR 覆盖了什么、遗漏了什么。
Fucini Coverage: Run Tests with Coverage。它能识别 vitest、jest、pytest、go、cargo、dotnet、maven、gradle、phpunit 和 ctest,在开启覆盖率的情况下运行测试,并加载它们写出的结果。已经有跟踪文件?Fucini Coverage: Pick Coverage File 会加载并记住它。需要 VS Code ≥ 1.88,或 Visual Studio 2022 或 2026 —— Community、Professional 或 Enterprise —— 以及项目已经生成的覆盖率跟踪文件。在 Visual Studio 2022 中,内置覆盖率仅限 Enterprise;Coverage Studio for Visual Studio 在 Community 和 Professional 上也能显示它,来自您的构建已经写出的文件。
VS Code 本身和一些免费扩展也能显示覆盖率。下表列出截至 2026 年 9 月各自文档中所说明的功能;README 中未提及的内容,表中会如实注明,而不是凭猜测填写。
| Fucini Coverage Studio | VS Code 内置 | Coverage Gutters | Code Coverage (markis) | Gcov Viewer | |
|---|---|---|---|---|---|
| 覆盖率从哪里来 | 25 种跟踪文件格式,以及 PIT 和 Stryker 变异测试报告 | 报告覆盖率的测试扩展 | lcov 和 XML 文件 | lcov 文件 | GCC 的 .gcda 文件,通过 gcov |
| 编辑器中未覆盖的行 | ✓ | ✓ | ✓ | ✓,也显示在 Problems 中 | ✓ |
| 分支覆盖率(按分支) | ✓ | 当测试扩展报告时 | 未说明 | 未说明 | 未说明 |
| MC/DC | ✓ (Pro) | — | 未说明 | 未说明 | 未说明 |
| 合并多个跟踪文件,并显示每一行由哪个覆盖 | ✓ | — | 支持多个文件 | 未说明 | 未说明 |
| 跟踪文件变化时重新加载 | ✓ | 显示最近一次测试运行 | ✓ | 未说明 | 未说明 |
| 差异覆盖率、阈值和历史 | ✓ | 在差异编辑器中显示覆盖率 | 未说明 | 未说明 | 未说明 |
| HTML 报告 | 生成,自行托管 | — | 预览现有报告 | 未说明 | 未说明 |
| 面向 AI 智能体的覆盖率:语言模型工具和 MCP 服务器 | ✓ | 未说明 | 未说明 | 未说明 | 未说明 |
| 运行过某一行的测试,以及受您的更改影响的测试 | ✓ | 按测试的覆盖率(当测试扩展报告时) | 未说明 | 未说明 | 未说明 |
| 编辑器中的变异测试结果 | ✓ (PIT, Stryker) | 未说明 | 未说明 | 未说明 | 未说明 |
| 针对新代码的门槛 | ✓ | 未说明 | 未说明 | 未说明 | 未说明 |
| 在 Visual Studio 和命令行中得到相同的数字 | ✓ | — | 未说明 | 未说明 | 未说明 |
这并不是与 VS Code 自带视图二选一:每次加载也会发布到原生的 Test Coverage 面板,包括按测试筛选。如果这里有内容已经过时,请通过联系页面告诉我们。
| 格式 | 典型文件 |
|---|---|
| LCOV | lcov.info, *.info |
| llvm-cov JSON | llvm-cov export --format=json |
| Cobertura XML | coverage.xml |
| JaCoCo XML | jacoco.xml |
| Istanbul / nyc | coverage-final.json |
| SimpleCov (Ruby) | .resultset.json, coverage.json |
| Clover XML | clover.xml |
| OpenCover XML | coverage.opencover.xml |
| coverage.py JSON | coverage.json (coverage json) |
| gcov / gcovr JSON | gcov --json-format --stdout, gcovr --json |
| Go coverage profile | coverage.out |
| SonarQube generic | <coverage version="1"> XML |
| GNATcoverage XML (Ada) | gnatcov coverage --annotate=xml |
| BullseyeCoverage XML | covxml output |
| Visual Studio | .coveragexml (dotnet-coverage convert) |
| Coveralls JSON | coveralls.json |
| Xcode xccov JSON | xcrun xccov view --report --json |