定量度量程序复杂度的McCabe方法
请画出下面代码的程序流程图及对应的流图,并计算环形复杂度。
void func(int x,int y){ //画图时,不需要考虑此行
while(x>0){ //1
int sum = x+y; //2
if(sum>1){ //3
x--; //4
y--; //5
}else{
if(sum<-1){ //6
a-=2; //7
}else{
a-=4; //8
} //9
} // end of if(sum>1) //10
} // end of while
x = x+y; //11
} // end of func //画图时,不需要考虑此行
程序流程图画法总结:
- 只考虑方法体内代码。
- if..else..后必有被两条箭头所指节点,可以为空白,但必须有数字。
- 保留开始和结尾的空白圆框但不写数字。
环形复杂度的计算方法:
- 流图中线性无关的区域数等于环形复杂度。
- 流图G的环形复杂度 V(G)=E-N+2,其中,E是流图中边的条数,N是结点数。
- 流图G的环形复杂度V(G)=P+1,其中,P是流图中判定结点的数目。
上述例题的判定条件是单一的,如果涉及IF a OR b
这种包含复合条件的伪码,例如:
IF a OR b
then procedure x
else procedure y
ENDIF
版权声明:凡未经本网站书面授权,任何媒体、网站及个人不得转载、复制、重制、改动、展示或使用本网站的局部或全部的内容或服务,或在非本网站所属服务器上建立镜像。如果已转载,请自行删除。同时,我们保留进一步追究相关行为主体的法律责任的权利。我们希望与各媒体合作,签订著作权有偿使用许可合同,故转载方须书面/邮件申请,以待商榷。