向我解释圈复杂度的控制流程

时间:2013-10-18 00:41:36

标签: cyclomatic-complexity

i = 0; 
n=4; //N-Number of nodes present in the graph 
while (i<n-1) do 
j = i + 1;
while (j<n) do 
if A[i]<A[j] then 
swap(A[i], A[j]); 
end do;
i=i+1;
end do;

我必须找到此代码的圈复杂度,然后提出一些白盒测试用例和黑盒测试用例。但我无法为代码制作CFG。

1 个答案:

答案 0 :(得分:1)

浏览复杂性相关材料我遇到了这个问题,以及在某人的博客和某人的书中解决的例子。看作例子是相同的......

http://www.guru99.com/cyclomatic-complexity.html

http://books.google.pl/books?id=M-mhFtxaaskC&lpg=PA385&ots=jB8P0avJU7&d&hl=pl&pg=PR1#v=onepage&q&f=false - &gt;转到第384页

尽管如此,希望能在某种程度上使这个问题对其他人有用。

算法

取自http://www.cs.swan.ac.uk/~csmarkus/CS339/dissertations/GregoryL.pdf

  1. 计算程序图。
  2. 计算圈复杂度。
  3. 选择一组基础路径。
  4. 为每个路径生成测试用例
  5. 有时可能会折叠前两个点,因为计算复杂性可能不一定涉及图形构建。但是,对于基本路径集,您需要在图像中至少初步勾勒出图形。

    计算

    要计算复杂性,您需要决定如何处理它。

    1. 从图表中, 1.1。计算地区 1.2。计算边缘,节点,出口点
    2. 从具有一个退出点的源代码,计算条件
    3. 从包含许多退出点的源代码,计算条件,减去退出点并添加2。
    4. 复杂性等于:

      • 区域数量 - 最好在图表中看到,我在其他问题上做了一个,所以会链接到那里而不是复制/粘贴
      • 边缘 - 节点+ 2 *(出口点)
      • 边缘 - 节点+(退出点)//提供强连接图
      • (决策点)+ 1 //提供一个入口点,一个出口点
      • (决定点) - (退出点)+ 2 //多个退出点

      决策点= IF,FOR,WHILE ...... 由于`if(a OR / AND b)等于a和/或b,复合条件对复杂性加2,所以if的复杂度为2(因为它无论如何都是2)。

      示范图表和更多阅读的链接:https://stackoverflow.com/a/21658235/999165

      基础路径测试 - 白盒测试

      McCabe指出,复杂性数字是一个数字,如果是线性独立的电路 - 通过代码的路径,因此它也是最小的测试用例数。因此,您需要构建尽可能多的测试用例。通过图表选择路径,因为它是一个迷宫:

      从路径计数器开始为零,并且: 1.向左走到汇集节点(出口点) 2.路径计数器+ 1 3.再次向左走,在达到水槽之前的最低决定点,选择向右而不是向左 4.重复步骤1 - 3直到所有决策点都完全耗尽

      您遍历的节点构成您的路径。

      http://en.wikipedia.org/wiki/Basis_path_testing