条件覆盖是什么
条件覆盖关注复合判断里每个原子条件的取值是否都被测试到:条件覆盖要求每个条件真假都取过,判定覆盖只要求整个判断结果真假都出现,判定条件覆盖(DC)要求两者同时满足,条件组合覆盖要求每个判定内条件的全组合,修正条件判定覆盖(MC/DC)则要求每个条件能独立影响判定结果一次。安全关键软件常以 MC/DC 作为达标线。
基本信息
| 原子条件 | 复合判断中不可再分的单个布尔表达式 |
|---|---|
| 条件覆盖 | 每个原子条件真假各取至少一次 |
| 判定覆盖 | 每个判断整体结果真假各取至少一次 |
| 判定条件覆盖 | 条件与判定两类覆盖同时满足 |
| 条件组合覆盖 | 每个判定内所有条件组合出现,数量随条件数指数增长 |
| MC/DC | 每个条件独立改变判定结果一次,在证明强度与用例数量间折中 |
四种覆盖强度对比
| 覆盖类型 | 覆盖对象 | 用例规模 | 典型应用 |
|---|---|---|---|
| 条件覆盖 | 单个条件的真假 | 小 | 一般业务代码 |
| 判定覆盖 | 判断整体的真假 | 小 | 常规单元测试门槛 |
| 判定条件覆盖 | 两者同时 | 中 | 质量要求较高的模块 |
| MC/DC | 条件独立影响判定 | 中偏大 | 航空航天、轨交、医疗 |
| 条件组合 | 判定内全部组合 | 指数级 | 条件数很少的关键判断 |
典型使用场景
- 单元测试评审:检查复合条件中的短路分支是否都有人测。
- 安全关键模块:按 MC/DC 设计用例并留存分析记录供审计。
- 缺陷复盘:条件覆盖盲区导致漏检时,补齐条件级用例。
- 覆盖率工具配置:在流水线中启用条件覆盖率统计作为参考项。
- 新人培训:用复合条件例子讲清条件与判定覆盖的差别。
短路求值要留意:很多语言从左到右短路,后面的条件可能从未执行,工具与用例都要确认实际求值路径。
条件数两个以内考虑组合覆盖:三层以上组合爆炸,MC/DC 更现实。
覆盖率高不等于逻辑正确:条件覆盖证明的是取值配齐,不是业务规则正确。