McCabe概念:
McCabe度量法是一种基于程序控制流的复杂性度量方法。
McCabe复杂性度量又称环路度量,其计算公式为:V(g)=m-n+2
,其中m和n分别代表图中的边数
和顶点数
。
下面来分析几道往年软考例题
(2016年上半年试题)对下图所示流程图采用白盒测试方法进行测试,若要满足路径覆盖,则至少需要___个测试用例。采用McCabe度量法计算该程序对环路复杂性为___。
路径覆盖是指设计若干个测试用例,覆盖程序中的所有路径。
上图中一共有6条路径:12345678,1234568,1235678,123568,12678,1268。
根据McCabe度量法环路复杂性公式V(g)=m-n+2,图中m=10,n=8,V(g)=10-8+2=4。
那么答案应是:6个用例,环路复杂度为4。
(2015年上半年试题)若采用白盒测试方法测试以下代码,并满足条件覆盖,则至少需要___个测试用例。采用McCabe度量法算出该程序的环路复杂性为___。
int find_max(int i, int j, int k){
int max;
if(i > j) {
if(i > k){
max = i;
} else {
max = k;
}
} else {
if(j > k) {
max = j;
} else {
max = k;
}
}
return max;
}
先画出该代码的流程图,如下:
要满足条件覆盖,要求三个判断框的Y和N至少要经过一次,即:1Y2Y,1Y2N,1N3Y,1N3N,至少需要4个测试用例。
根据McCabe度量法环路复杂性公式V(g)=m-n+2,图中m=9,n=7, V(g)=9-7+2=4。
那么答案应是:4个用例,环路复杂度为4。
环形复杂度定量度量程序的逻辑复杂度。描绘程序控制流的流图之后,可以用下述3种方法中的任何一种来计算环形复杂度。
(1)流图中的区域数等于环形复杂度。
(2)流图G的环形复杂度V(G)=E-N+2,其中,E是流图中边的条数,N是结点数。
(3)流图G的环形复杂度V(G)=P+1,其中,P是流图中判定结点的数目。
参考文章1:McCabe度量方法计算程序复杂度 https://blog.csdn.net/t_1007/article/details/53034408
参考文章2: McCabe度量法计算程序的环路复杂性https://jingyan.baidu.com/article/9faa7231621806073c28cbdd.html
参考文章3:软考必考题型之McCabe度量法 https://blog.csdn.net/m0_37063785/article/details/88784913