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 :(得分: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:
有时可能会折叠前两个点,因为计算复杂性可能不一定涉及图形构建。但是,对于基本路径集,您需要在图像中至少初步勾勒出图形。
要计算复杂性,您需要决定如何处理它。
复杂性等于:
决策点= 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直到所有决策点都完全耗尽
您遍历的节点构成您的路径。