伪代码的圈复杂度计算

Calculation of Cyclomatic Complexity for Pseudocode

while(m<n)
  if(x>y) AND (a<b) then
    a=a+1
    y=y-1
  end if 
m=m+1
end while

我正在计算上述伪代码的圈复杂度,我得出的结论是

M=(决策点)+ 1

其中 M 是圈复杂度

我得到了答案 3

是真的吗?

首先,让我们识别每个语句。我在这里使用的是字母,但也可以是数字。

A    while(m<n)              
B,C    if(x>y) AND (a<b) then
D        a=a+1
E        y=y-1
       end if 
F      m=m+1
G    end while
  • 请注意,第二个语句有两个 conditions/predicates/decision 点(或随便你怎么称呼它们),所以我将它们命名为 B 和 C。
  • 我打算用end while(G)作为退出点。

现在我们可以绘制控制流图 (CFG):

最后,用三种不同的方式计算圈复杂度 (M):

  1. M = E-V+2*K = 9-7+2*1 = 4

  2. M=C+1=3+1=4

  3. M = 地区(CFG) = 4

其中:

  • E=边数

  • V=顶点数

  • K=图分量数

  • C=conditions/decision 点数

与上述逻辑相比,@osEduSol 提到的是正确的,即

M=(决策点)+ 1

其中 M 是圈复杂度

有3个决策点

我得到了答案 4