insertion_procedure (int a[], int p [], int N)
{
int i,j,k;
for (i=0; i<=N; i++) p[i] = i;
for (i=2; i<=N; i++)
{
k = p[i];
j = 1;
while (a[p[j-1]] > a[k]) {p[j] = p[j-1]; j--}
p[j] = k;
}
}
我必须找到此代码的圈复杂度,然后建议一些白盒测试用例和黑盒测试用例。但我无法为代码制作CFG。
也会对测试用例提供一些帮助。
答案 0 :(得分:27)
首先编写语句编号:
insertion_procedure (int a[], int p [], int N)
{
(1) Int i,j,k;
(2) for ((2a)i=0; (2b)i<=N; (2c)i++)
(3) p[i] = i;
(4) for ((4a)i=2; (4b)i<=N; (4c)i++)
{
(5) k=p[i];j=1;
(6) while (a[p[j-1]] > a[k]) {
(7) p[j] = p[j-1];
(8) j--
}
(9) p[j] = k;
}
现在你可以清楚地看到哪个语句首先执行,哪个语句最后执行等等,因此绘制cfg变得简单。
现在,要计算圈复杂度,请使用以下三种方法之一:
答案 1 :(得分:3)
圈复杂度为4。
1为过程+1为for循环+1为while循环+1为while循环的if条件。
答案 2 :(得分:2)
您也可以使用McCabe公式M = E-N + 2C
E =边缘
N =节点
C =组件
M =圈复杂度
E = 14
N = 12
C = 1
M = 14-12 + 2*1 = 4