圈复杂度是实现特定模块的全面测试覆盖所必需的测试用例的数量。
考虑以下伪代码:
If (A > B) and (C > D) then
A = A + 1
B = B + 1
Endif
我认为这里只需要两个测试用例,一个用于真条件,另一个用于假条件,所以圈复杂度应该是 2,但答案是 3(不知道为什么)。
有人请帮我理解为什么答案是 3 而不是 2。
圈复杂度是实现特定模块的全面测试覆盖所必需的测试用例的数量。
考虑以下伪代码:
If (A > B) and (C > D) then
A = A + 1
B = B + 1
Endif
我认为这里只需要两个测试用例,一个用于真条件,另一个用于假条件,所以圈复杂度应该是 2,但答案是 3(不知道为什么)。
有人请帮我理解为什么答案是 3 而不是 2。
圈复杂度直接衡量通过程序源代码的线性独立路径的数量。
If (A > B) and (C > D) then
A = A + 1
B = B + 1
Endif
情况1。
If (true) and (true) then
// Execute some code
Endif
案例 2。
If (true) and (false) then
// Don't execute code
Endif
案例 3。
If (false) and (2nd part won't be executed) then
// Don't execute code
Endif
所以圈复杂度为3。
该代码将由编译器翻译成类似以下的伪汇编代码:
A - B
branch if greater then 0 to end
C - D
branch if greater then 0 to end
inc A
inc B
end:
...
现在,为了在所有分支中做出所有可能的选择,您需要 3 个测试用例:
请注意,对于“覆盖”的替代定义 - “所有指令覆盖”,1 个测试用例就足够了(使用上面的编译代码),因为即使你不分支,“分支 if..”指令仍然会执行,因此对于 A>B 和 C>D 测试用例,您实际上会阅读所有说明。
PS在这里假设:
圈复杂度是实现特定模块的全面测试覆盖所必需的测试用例的数量。