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 时遇到了麻烦。
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 时遇到了麻烦。
浏览复杂性相关材料时,我遇到了这个问题以及在某人的博客和某人的书中解决的示例。看到这个例子是相同的......
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:
前两点有时可能会被折叠,因为计算复杂性可能不一定涉及图形构建。然而,对于基本路径集,您需要在脑海中至少初步勾勒出图表。
要计算复杂性,您需要决定如何进行。
复杂度等于:
决策点 = IF、FOR、WHILE ... 由于 `if (a OR/AND b) 等价于 if a 和/或 if b,复合条件将复杂度加 2,因此这种 if 的复杂度为 2(因为它是 2如果无论如何)。
示例图表和更多阅读链接:https ://stackoverflow.com/a/21658235/999165 。
McCabe 指出,复杂度数是线性独立电路的数字 - 通过代码的路径,因此它也是最小测试用例数。因此,您需要构建与您拥有的路径一样多的测试用例。路径是通过遍历图来选择的,因为它是一个迷宫:
从零处的路径计数器开始,并且: 1. 向左走直到汇节点(出口点) 2. 路径计数器 + 1 3. 再次向左走,在到达汇点之前的最低决策点,选择右而不是左 4. 重复步骤 1 - 3,直到所有决策点完全用尽
您遍历的节点构成您的路径。