覆盖类型是什么
代码覆盖率有多种准则,严格程度不同:语句覆盖最弱(每行执行一次),判定与分支覆盖居中,条件覆盖与组合覆盖更强,MC/DC 兼顾强度与用例数量,常用于安全关键领域。报告口径要先说清用的是哪种准则,混用术语是覆盖率争议的最大来源。
基本信息
| 语句覆盖 | 每条可执行语句至少执行一次 |
|---|---|
| 判定(分支)覆盖 | 每个判定的真假两条路径都执行 |
| 条件覆盖 | 每个原子条件的真假都被覆盖 |
| MC/DC | 每个条件独立影响判定结果至少一次 |
| 成本递增 | 准则越强需要越多用例,按风险选级别 |
覆盖类型对照
| 准则 | 要求 | 典型用途 |
|---|---|---|
| 语句覆盖 | 每条可执行语句至少执行一次 | 入门门槛,最弱 |
| 判定(分支)覆盖 | 每个判定真假两条路径都执行 | 常用质量门禁 |
| 条件覆盖 | 每个原子条件真假都覆盖 | 复杂布尔表达式 |
| MC/DC | 每个条件独立影响判定结果至少一次 | 安全关键领域 |
工具侧配置示例
工具侧配置示例
# Python
coverage run -m pytest && coverage report -m
# Java(JaCoCo 在 CI 中生成报告)
mvn test jacoco:report
# 先看缺口文件,再看行级明细典型使用场景
- 质量门禁:为新代码设置覆盖门槛,存量不强制。
- 安全关键模块:按行业标准选择更强的准则级别。
- 缺口分析:用分支覆盖找出未测的错误处理路径。
- 评审辅助:覆盖率变化作为评审输入之一,而不是唯一标准。
- 回归评估:高风险改动前后对比覆盖变化。
- 术语统一:报告注明准则名称,避免「覆盖 80%」的歧义。
准则越强需要越多用例;安全相关模块常按行业标准要求选择 MC/DC 级别。
覆盖率高不等于质量高:断言空转时,高覆盖只说明代码被执行过,没有验证行为。
覆盖率是发现「没测到」的工具,不是衡量「测得好」的结论:先看缺口,再评断言质量。