2013-10-18 26 views
-1
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。向我解释圈复杂度的控制流程

+0

示例似乎是从网上直播的?对于你的部分问题已经有了解释。另外,如果你有代码,你为什么要在这里提出黑盒测试?最后,请解释CFG,我的想法似乎都不符合上下文。 –

回答

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 - >去384页

不过,希望能够使有些问题对他人有用。

算法

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

  1. 计算程序图表。
  2. 计算圈复杂度。
  3. 选择一组基础路径。
  4. 生成测试用例对于每个这些路径

首先两点可以有时折叠的,因为计算的复杂性可以不必涉及图形建筑物。然而,对于基本的路径集,您至少需要在您的脑海中绘制草图。

计算

要计算的复杂性,你需要做出决定你如何去了解它。

  1. 从图中, 1.1。计数区域 1.2。与一个出口点计数边缘,节点,出口点
  2. 从源代码,计数条件句
  3. 从与许多出口点,计数条件句,减去出口点和添加2.

复杂等于源代码:

  • 区的量 - 这是最好的,在图可见,我做了一个在其他SO问题,以便将链接而不是复制有/粘贴
  • 个边缘 - 节点+ 2 *(出口点)
  • 边缘 - 节点+(出口点)//提供强连通图
  • (决策点)+ 1 //提供的一个入口点,一个出口点
  • (决策点) - (出口点)+ 2 //许多出口点

决策点= IF,FOR,WHILE ... 由于`如果(A或/和b)等同于如果一个和/或者如果b,复合条件将复杂度加2,那么if的复杂度就是2(因为无论如何它都是2)。

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

基础路径测试 - 白箱测试

麦凯布注意的是复杂号码是一个号码,如果线性独立的电路 - 通过代码路径,因而它也是一个最小的测试用例数。因此,您需要构建尽可能多的测试用例,以及您拥有的许多路径。路径由通过图形去选择,因为它是一个迷宫:

开始与路径计数器为零和: 1.向左走向上直到汇聚节点(退出点) 2.路径计数器+ 1 3.转到左再次,在达到接收器之前的最低决策点处,选择右边而不是左边 4.重复步骤1 - 3,直到所有决策点完全耗尽

您所遍历的节点组成您的路径。

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

+0

http://www.guru99.com/cyclomatic-complexity.html确切地说,我在找什么。如果需要注意 - 方法/模块中的“独立路径的最大数目”,则复杂性V(G)具有实际意义/相关性。或者换句话说,对于该方法的输入,可能有多少控制流(开始到结束)。 – parasrish