一、基本概念: 单元(Unit)、 条件(Condition)、 决策(Decision)

2. MCDC 四个原则
和1. 每个入口和出口点都被调用(测试第1行和第10行)
每个判定取所有可能的结果 (测试第7行和第9行,中止(真)或不中止(假))
判定中的每个条件取所有可能的结果: 条件需要分别测试真和假
判定中的每个条件都被证明能独立影响结果: 为什么?这仅在条件起作用时------即影响结果时------测试该条件
3. MCDC测试用例
MC/DC 的测试用例设计主要有两种主要形式:(可选择其中一种,或两者结合)
3.1 唯一原因(Unique-Cause)
-
每次只改变判定中的一个条件
-
保持其他所有条件不变
-
同时验证结果的变化
如下图右侧的decision,要覆盖所有条件,需要按照左侧的真值表进行测试(会产生8种测试用例情况):

进一步地结合前述MCDC四原则------每次只改变判定中的一个条件,保持其他条件不变,保留导致结果变化的测试用例(四个6,2,3,4):

在单元测试时,必须进行四次调用,才能完成MCDC测试:

测试用例数量=条件数量+1
3.2 掩码(Masking)
- 依赖计算机的'短路'求值, 一旦能做出判定就停止求值。
按照"自左向右"计算,如下图,x被标记为"无关变量"

对于没有x这种无关变量的情况,必须全部进行测试,如:

其他选一个测试用例即可。

4. 小结.
在单元测试的时候,开始MCDC测试,MC/DC 软件测试要点总结:
- • 测试所有有意义逻辑路径的最小集合
- • 不是代码中所有逻辑路径,而是只测试影响结果的路径
- • 四种规则确保全面覆盖
- • 唯一原因:N+1 个测试,每次只变一个条件
- • 掩码:2*N 个测试,利用短路求值
- • 可使用 gcov 等开源工具实现