乐趣区

关于后端:McCabe度量法

概论:

McCabe 度量法是由 托马斯·麦克凯 提出的一种基于程序控制流的复杂性度量办法。又称环路度量,循环复杂度(Cyclomatic complexity),也称为条件复杂度或圈复杂度,是一种软件度量。它认为程序的复杂性很大水平上取决于程序图的复杂性。繁多的程序构造最为简略,循环和抉择所形成的环路越多,程序就越简单。

McCabe 度量法以 图论 为工具,先画出程序图,而后用该图的 环路数 作为程序复杂性的度量值。程序图是进化的程序流程图。也就是说,把程序流程图的每一个解决符号都进化成一个结点,原来连贯不同解决符号的流线变成连贯不同结点的有向弧,这样失去的有向图就叫做程序图。

依据图论,在一个强连通的有向图 G 中,环的个数 V(G) 由以下公式给出:

$$V(G)=m-n+2$$

其中,V(G)是有向图 G 中 环路数 ,m 是图 G 中 弧数 ,n 是图 G 中 结点数 ,p 是图 G 中 强连通重量个数。在一个程序中,从程序图的入口点总能达到图中任何一个结点,因而,程序总是连通的,但不是强连通的。为了使图成为强连通图,从图的进口点到入口点加一条用虚线示意的有向边,使图成为强连通图。这样就能够应用上式计算环路复杂性了。

有的也有用 E 来代表图 G 中 弧数, 即

$$V(G)=E-N+2$$


例题:

例 1

采纳 McCabe 度量法计算下图所示程序的环路复杂性为()

A.1  
B.2  
C.3  
D.4  

解:

环形复杂度 $V(G)=M-N+2$,其中,E 是流图中边的条数,M 是结点数。

即 V(G) = 11-10+2 = 3


例 2

下图用 白盒测试 办法进行测试,图中有()条门路。采纳 McCabe 度量计算该程序图的环路复杂性为()

问题 1 选项
A.3  
B.4  
C.5  
D.6  

问题 2 选项
A.3  
B.4  
C.5  
D.6  

解:

<p> 将所有结点标注序号,依据图示,能够找到不同的门路共 4 条:

1-2-3-11;

1-2-3-4-5-6-10-11;

1-2-3-4-5-7-9-10-11;

1-2-3-4-5-7-8-9-10-11。

第一空抉择 B 选项。

依据环路复杂度计算公式 $V(G)=M-N+2=13-11+2=4$,第二空抉择 B 选项。


例 3

对下图所示的程序流程图进行断定 笼罩测试,则至多须要()个测试用例。采纳 McCabe 度量法计算其环路复杂度为()。

问题 1 选项
A.2  
B.3  
C.4  
D.5  

问题 2 选项
A.2  
B.3  
C.4  
D.5  

解:

断定笼罩是设计足够多的测试用例,使得程序中的每一个判断至多取得一次“真”和一次“假”,即便得程序流程图中的每一个虚实分支至多被执行一次。依据题意,只需 2 个测试用例即可;

依据环路复杂度的计算公式 $V(G)=m-n+2=11-10+2=3$

断定笼罩(分支笼罩)

断定笼罩与条件笼罩的区别

软件测试中条件笼罩,门路笼罩,语句笼罩,分支笼罩的区别


例 4

对下图所示流程图采纳白盒测试方法进行测试,若要满足门路笼罩,则至多须要()个测试用例。采纳 McCabe 度量法计算该程序的环路复杂性为()

问题 1 选项
A.3 
B.4 
C.6 
D.8 

问题 2 选项
A.1 
B.2 
C.3 
D.4 

解:

问题 1 考查白盒测试门路笼罩:笼罩所有可能的门路。

依据流程图,若要笼罩所有可能门路,对于 a 的取值须要 a =0,a<0,a>0 三种用例,而对于 i 的取值须要 i >0 和 i <= 0 两种用例,排列组合,共须要 6 组用测能力笼罩所有可能的门路。

问题 2 对于环形复杂度计算,依据公式 $V(G)=E-N+2$,其中,E 是流图中边的条数,N 是结点数。

$V(G)=E-N+2=10-8+2=4$。


例 5

采纳 McCabe 度量法计算下列程序图的环路复杂性为()

问题 1 选项

A.2 
B.3 
C.4 
D.5 

解:

McCabe 度量法先画出程序图,而后采纳公式 V(G)=m-n+ 2 计算环路复杂度,其中 m 是有向弧的数量,n 是结点的数量。10-8+2=4。


例 6

对以下的程序伪代码(用缩进示意程序块)进行门路笼罩测试,至多须要()个测试用例。采纳 McCabe 度量法计算其环路复杂度为()。

问题 1 选项

A.2 
B.4 
C.6 
D.8 

问题 2 选项
A.2 
B.3 
C.4 
D.5 

对于本题,用例(x,y,z)别离为(1,1,0)(1,-1,0)(-1,0,1)(-1,0,-1),这 4 个测试用例能够走完所有可能门路。因为在伪代码中,咱们能够看到,当 x >0 时,只须要对 Y 别离取大于 0 和不大于 0 的值即可,z 不参加比拟;当 x 不大于 0 时,只须要对 z 别离取大于 0 和不大于 0 的值即可,y 不参加比拟,只须要 4 个用例即可。

对于第二空,转换为结点图如下:

 依据 $V(G)=m-n+2$,其中 m 是有向图的弧,为 15,n 为有向图的节点数,为 13,15-13+2=4,即环路简单的为 4。


例 7

下图所示的程序流程图中有()条不同的简略门路。采纳 McCabe 度量法计算该程序图的环路复杂性为()

问题 1 选项

A.3 
B.4 
C.5 
D.6 

问题 2 选项

A.3 
B.4 
C.5 
D.6 

解:

环形复杂度定量度量程序的逻辑复杂度。描述程序控制流的流图之后,能够用下述 3 种办法中的任何一种来计算环形复杂度。(1)流图中的区域数等于环形复杂度。(2)流图 G 的环形复杂度 V(G)=E-N+2,其中,E 是流图中边的条数,N 是结点数。(3)流图 G 的环形复杂度 V(G)=P+1,其中,P 是流图中断定结点的数目。这种环路度量法,计算的思路是这样的:它是思考管制的复杂程度,即条件抉择的分支繁冗水平。图中有 3 次简略的判断。故 3 条简略门路,造成 3 块环形区域,区域复杂度为 3




例 8

软件的复杂性次要体现在程序的复杂性。()是度量软件复杂性的一个主要参数。若采纳 McCabe 度量法计算环路复杂性,则对于下图所示的程序图,其环路复杂度为()。

问题 1 选项

A. 代码行数 
B. 常量的数量 
C. 变量的数量 
D. 调用的库函数的数量 

问题 2 选项

A.2 
B.3 
C.4 
D.5 

解:

代码行数度量法以程序的总代码行数作为程序复杂性的度量值。

McCabe 度量法先画出程序图,而后采纳公式 $V(G)=m-n+2$ 计算环路复杂度,其中 m 是有向弧的数量,n 是结点的数量。在本题中,结点数为 9,弧为 11,所以环路复杂度为 11-9+2=4。



参考:

McCabe 度量办法计算程序复杂度

希赛题库

本文由 mdnice 多平台公布

退出移动版