Cyclomatic复杂性是实现特定模块的全面测试覆盖所必需的测试用例数。
考虑以下伪代码:
If (A > B) and (C > D) then
A = A + 1
B = B + 1
Endif
我认为这里只需要两个测试用例,一个用于真实条件,另一个用于错误条件,因此圈复杂度应为2但答案为3(不确定原因)。
有人请帮助我理解为什么答案是3而不是2.
答案 0 :(得分:2)
Cyclomatic复杂度直接测量程序源代码中线性无关路径的数量。
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
所以Cyclomatic的复杂性将是3。
答案 1 :(得分:1)
代码将由编译器翻译成类似下面的伪assemley代码:
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个测试用例就足够了(用上面编译的代码),因为即使你没有分支,“branch if ...”指令仍然执行,因此对于A> B和C> D测试用例,您实际上会完成所有说明。
P.S。假设在这里:
Cyclomatic复杂性是必要的测试用例数 实现对特定模块的全面测试覆盖。