首页/开发/软件测试速查/代码覆盖率类型:语句、分支、条件与 MC/DC
测试基础与分层67 条

代码覆盖率类型:语句、分支、条件与 MC/DC

不同覆盖准则的严格程度不同:语句覆盖最弱、判定与条件组合覆盖更强、MC/DC 兼顾强度与用例数量,常用于安全关键领域。

软件测试速查开发更新于 2026-10-13

覆盖类型是什么

代码覆盖率有多种准则,严格程度不同:语句覆盖最弱(每行执行一次),判定与分支覆盖居中,条件覆盖与组合覆盖更强,MC/DC 兼顾强度与用例数量,常用于安全关键领域。报告口径要先说清用的是哪种准则,混用术语是覆盖率争议的最大来源。

基本信息

语句覆盖每条可执行语句至少执行一次
判定(分支)覆盖每个判定的真假两条路径都执行
条件覆盖每个原子条件的真假都被覆盖
MC/DC每个条件独立影响判定结果至少一次
成本递增准则越强需要越多用例,按风险选级别

覆盖类型对照

准则要求典型用途
语句覆盖每条可执行语句至少执行一次入门门槛,最弱
判定(分支)覆盖每个判定真假两条路径都执行常用质量门禁
条件覆盖每个原子条件真假都覆盖复杂布尔表达式
MC/DC每个条件独立影响判定结果至少一次安全关键领域

工具侧配置示例

工具侧配置示例
# Python
coverage run -m pytest && coverage report -m
# Java(JaCoCo 在 CI 中生成报告)
mvn test jacoco:report
# 先看缺口文件,再看行级明细

典型使用场景

  • 质量门禁:为新代码设置覆盖门槛,存量不强制。
  • 安全关键模块:按行业标准选择更强的准则级别。
  • 缺口分析:用分支覆盖找出未测的错误处理路径。
  • 评审辅助:覆盖率变化作为评审输入之一,而不是唯一标准。
  • 回归评估:高风险改动前后对比覆盖变化。
  • 术语统一:报告注明准则名称,避免「覆盖 80%」的歧义。
准则越强需要越多用例;安全相关模块常按行业标准要求选择 MC/DC 级别。
覆盖率高不等于质量高:断言空转时,高覆盖只说明代码被执行过,没有验证行为。
覆盖率是发现「没测到」的工具,不是衡量「测得好」的结论:先看缺口,再评断言质量。

易错点

  • 把「分支覆盖」当成「条件覆盖」混用报告口径
  • 对简单 getter 也要求 MC/DC,成本与收益失衡
  • 断言空转:行被执行但没有有效断言,覆盖数字虚高
  • 只盯总量指标不看增量,新代码覆盖率被存量稀释
  • 覆盖工具统计口径不同(是否计入分支、异常路径),跨项目直接比较失真

数据来源与参考

  • JaCoCo 官方文档(覆盖计数器说明)
  • DO-178C 中的 MC/DC 要求(公开资料)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌