最近开始从事软件测试工作,有一些疑问。
成对测试是这个参数可以有的所有值的组合,它也适用于布尔表达式吗?
例如,
布尔表达式为 (A || B) && C (假设每个参数只有0和1。)
这里,是否适用于Boolean Exp ??
第二个问题是关于MC/DC的。
我学会了如何通过MC/DC制作测试用例
但是,我想知道 MC/DC 如何证明覆盖了几乎 90% 的代码覆盖率?
在(A || B) && C中,我猜测有4个组合测试用例。
但是,所有组合都是8个。MC/DC如何减少病例呢?
是的。它适用于布尔表达式。
获取布尔表达式的所有可能组合,我们可以得到上面的真值表。
MC/DC 无法保证超过 90% 的code 覆盖率。但是,它可以确保决策、分支和条件覆盖率,它们是一段代码的组成部分。
但是,它怎么能证明覆盖呢?
答案在于 MC/DC 准则的属性:
因此已经考虑了每个条件的布尔结果(TRUE/FALSE),并且这些条件的布尔结果(决策)的组合将产生每个可能的值(TRUE/FALSE)。
当您识别 MC/DC 对时,您将得出此表:
其中一些配对是相似的。为什么?因为当你计算布尔表达式时,你可以短路一些条件。这意味着即使至少有一个条件没有被评估,你的表达式也可以做出决定。
这将是最终结果。请注意,某些行具有 (-) 空值。这意味着它没有被评估,但可以推断出决定。
虽然相关,但不相关,我在这里写了一篇文章:MC/DC 如何加速单元测试创建
尽管迟到了,但希望这能有所帮助。 :D
MC/DC 测试有助于发现死代码。为了获得 100% 的 MC/DC 覆盖率,输入的每次变化都会影响输出。
对于条件“(A || B) && C”,有 3 个输入:至少需要 4 个测试用例 (n+1)。
A B C:是 1 0 1: 1 1 0 0: 0(C 从第一次测试更改) 0 0 1: 0(A 从第一次测试更改) 0 1 1: 1(B从第三次测试更改)
MC/DC 测试无法确认代码是否正确实现为 (A || B) && C。 如果使用串联输入,例如“(A或B)和(not(A)或C)。not(A)应被视为另一个输入。因此至少需要5个测试用例。