继续上次的测试作业,学习完程序插装的概念,今天学习测试的静态分析方法:绘制控制流图与计算圈复杂度。
一、控制流图:
一个过程或程序的抽象表现,常以数据结构链的形式表示。
二、圈复杂度:
复杂度越高,软件质量就越低,测试就越困难。
圈复杂度(McCabe),其复杂度V(G)可按以下公式计算:
V(G) = E – n + 2 其中,E为图G中的边数,n为图G中的节点数。
(这是最常用的计算方式,更多内容可以看百度百科)
三、实例:
举一个最简单的例子,以计算整数X和整数Y的最大公约数为例:
int gsd(int x,int y)
{
int q=x;
int r=y;
while(q!=r)
{
if (q>r)
q=q-r;
else
r=r-q;
}
return q;
}
根据以上代码绘制控制流图和计算圈复杂度:
1)控制流图
2)计算圈复杂度
在上图中边数为9,节点数为8,通过公式的计算结果为3,所以该程序的圈复杂度为3。
验证:
我们采用圈复杂度的其他计算方法进行验证:平面被控制流图划分成的区域数即为圈复杂度。
针对复杂的控制流图使用区域计算更为简单,但多数采用上述计算方式。