mcpField
C
coverage-drop-investigator

coverage-drop-investigator

github.com/proffesor-for-testing测试与质量51960 次安装今天更新
代码仓库

关于 coverage-drop-investigator

coverage-drop-investigator 是用于排查测试覆盖率回退并建议针对性测试的操作指南式技能。它对比 main 分支的覆盖率、定位低覆盖文件,并关联近期变更。

主要功能

  1. 01测量当前测试覆盖率
  2. 02与 main 分支对比覆盖率
  3. 03按覆盖率排列文件
  4. 04将低覆盖率关联到近期变更
  5. 05为未覆盖路径建议测试

适用场景

  1. 01排查代码变更后的覆盖率下降
  2. 02查找近期修改文件中未覆盖的分支

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/proffesor-for-testing/agentic-qe --skill coverage-drop-investigator

安装后在 Claude Code 中输入/coverage-drop-investigator确认已加载。

详细介绍

覆盖率下降调查

用于调查覆盖率回归的操作手册式技能。找出导致覆盖率下降的变更,并推荐有针对性的测试。

激活

/coverage-drop-investigator

调查流程

步骤 1:测量当前覆盖率
# Generate coverage report
npx jest --coverage --coverageReporters=json-summary

# View summary
cat coverage/coverage-summary.json | jq '.total'
步骤 2:查找覆盖率下降的时间
# Compare coverage with main branch
git stash && npx jest --coverage --coverageReporters=json-summary
mv coverage/coverage-summary.json coverage/baseline.json
git stash pop && npx jest --coverage --coverageReporters=json-summary

# Compare
jq -s '.[0].total.statements.pct as $baseline | .[1].total.statements.pct as $current | {baseline: $baseline, current: $current, delta: ($current - $baseline)}' coverage/baseline.json coverage/coverage-summary.json
步骤 3:识别未覆盖的文件
# Find files with lowest coverage
cat coverage/coverage-summary.json | jq 'to_entries | map(select(.key != "total")) | sort_by(.value.statements.pct) | .[0:10] | .[] | {file: .key, statements: .value.statements.pct, branches: .value.branches.pct}'
步骤 4:关联近期变更
# Find recently changed files with low coverage
git diff --name-only main...HEAD | while read file; do
  jq --arg f "$file" '.[$f] // empty | {file: $f, statements: .statements.pct}' coverage/coverage-summary.json
done
步骤 5:推荐测试

对于每个未覆盖的文件,识别:

  1. 未覆盖的函数 — 需要新的测试用例
  2. 未覆盖的分支 — 需要针对条件的测试用例(if/else 路径)
  3. 未覆盖的行 — 可能表示死代码或缺少边界情况
步骤 6:报告
## Coverage Drop Report
- **Current**: {{current_pct}}%
- **Baseline (main)**: {{baseline_pct}}%
- **Delta**: {{delta}}%
- **Files causing drop**:
  | File | Coverage | Changed Lines | Tests Needed |
  |------|----------|--------------|-------------|
  | {{file}} | {{pct}}% | {{lines}} | {{count}} |
- **Recommended action**: {{write_tests / accept_drop / mark_as_excluded}}

组合使用

调查完成后:

  • /qe-test-generation — 为未覆盖的文件生成测试
  • /mutation-testing — 验证现有测试是否确实能捕获错误
  • /coverage-guard — 防止未来覆盖率下降

注意事项

  • 覆盖率下降可能是因为添加了新代码却没有测试,而不是因为删除了测试
  • 100% 覆盖率并非总是目标 — 应关注关键路径,而非 getter/setter
  • 分支覆盖率下降比行覆盖率下降更值得关注 — 分支代表逻辑路径
  • 覆盖率工具可能会统计生成的代码或类型定义 — 使用 coveragePathIgnorePatterns 将其排除

评论

支持 Markdown