让我们考虑一下我们有以下方法:
public void testIt(boolean a, boolean b){
if (a && b){
...
}
if (a){
....
}
}
此方法的循环复杂度= 3。因此,根据基础路径测试,我们应该进行3次测试,以实现陈述和决策覆盖。 但是,我看到我只能使用两个测试(true,true)和(false,false)来实现语句和决策覆盖。我的错误在哪里?
答案 0 :(得分:7)
是的,你是对的。 Cyclomatic复杂度为3,您应该验证的案例是:
a是假的,b - 我们不在乎(我稍后会解释......) - >什么都没发生
a是真的,b是假的 - >只执行了第二个条件
a和b为真 - >第一个和第二个条件都已执行
如果只查看参数,我提到的第一个选项有2个不同的输入(b true / false),但是在这两种情况下都应该发生相同的情况,所以我建议你只验证一次或使用等效的C# test case attribute
答案 1 :(得分:2)
我的错误在哪里?
CC是分支覆盖的上限,但它是路径覆盖的下限(与行/语句覆盖不同,见下文)。因此,您需要最多3次测试以涵盖所有分支/条件,至少3次测试以涵盖所有路径。
以下是您的功能图:
CC = 6 - 5 + 1 * 2 = 3 根据definition
要覆盖所有分支,最多需要3个测试,实际上你需要全部3个覆盖(真,真),(真,假)和(假,*)
要覆盖至少需要3次测试的所有路径,图表中有3种可能的独立路径,因此您只需要3次测试即可覆盖所有路径。
对于不同输入的数量可能存在一些混淆,即4,但并非所有由这些输入形成的路径都是独立的,其中两个(当a为假时)实际上是相同的,因此只有 3条独立路径
结论,3个测试用例是必要的,足以为您的函数提供分支和路径覆盖。
现在关于行/语句覆盖:您需要执行每行至少一行,为此,您只需要一次测试(true,true),但显然它不足以用于其他类型的覆盖。