软件测试 - 循环复杂度
软件测试包括白盒和黑盒测试技术。在白盒测试中,代码的内部结构得到验证。循环复杂度是白盒测试下的概念之一,由 Thomas McCabe 开发。它是一种软件度量,通过获取决策点的总数来衡量程序的复杂度。
什么是循环复杂度?
循环复杂度是通过绘制代码的控制流图获得的,它计算贯穿整个程序的线性独立路径的总数。圈复杂度数值越高,更新和维护代码的风险就越高,发现问题的概率就越高,并且理解代码的难度也就越大。循环复杂度衡量代码的可读性,以及程序中不同线性独立路径的总数,从而了解实现逻辑的复杂程度。
计算循环复杂度的公式
有三个计算循环复杂度的公式,如下所示 −
公式 1
对于程序代码控制图 (G),用 V(G) 表示的循环复杂度等于 E - N + 2 * P,其中 E 等于边的总数,N 等于节点的数量,P 等于图中连通分量的总数。
公式 2
对于程序代码控制图 (G),用 V(G) 表示的循环复杂度等于 P + 1,其中 P 等于决策或条件节点的总数。决策或条件节点导致在控制流图中产生两个分支。
公式 3
对于程序代码控制图 (G),用 V(G) 表示的圈复杂度等于 R + 1,其中 R 是控制流图内封闭区域的总数。
示例
让我们以下面的代码块为例,我们将使用上面讨论的公式计算圈复杂度。
IF X = 300 THEN IF Y > Z THEN X = Y ELSE X = Z END IF END IF PRINT X
上述代码行的控制流图如下所示 −

在上述控制流图中,有七个节点(N),以蓝色圆圈表示。请注意,代码中的总行数等于节点总数。控制流图中红色表示有八条边(E),由于只有一种方法,图中连通分量(P)的总数为 1。因此根据公式,
V(G) = E - N + 2 * P = 8 - 7 + 2 * 1 = 3
在上述代码及其控制流图中,有两个条件语句,IF X = 300,THEN IF Y > Z,因此有两个条件节点(P),即 1 和 2,在控制流图中以绿色表示。因此根据公式,
V(G) = P + 1 = 2 + 1 = 3
在上面的控制流图中,有两个封闭区域(R),用两个透明圆圈表示,即控制流图中用橙色表示的 1 和 2。因此,根据公式,
V(G) = R + 1 = 2 + 1 = 3
因此,使用这三个公式,我们得到的圈复杂度值与 3 相同。
圈复杂度的用途
圈复杂度的用途列于下方 −
- 检测所有独立路径对开发人员和测试人员都非常有帮助。
- 它确认代码中的每条路径都至少被验证过一次。
- 它有助于检测程序代码中未覆盖的路径。
- 它有助于提高代码覆盖率。
- 它有助于识别潜在风险并减轻风险。
优点圈复杂度的优点如下 −
- 它用作软件开发代码的质量指标。
- 它比 Halstead 指标更快。
- 它有助于确定测试的工作量和关键领域。
- 它指导测试过程。
- 它可以轻松应用。
圈复杂度的缺点
圈复杂度的缺点如下 −
- 它只关心软件代码的复杂性,而不关心它处理的数据。
- 嵌套程序代码的圈复杂度值不易确定。
- 圈复杂度可能在简单比较时产生错误值,并且决策结构。
结论
至此,我们对软件测试 Mccabe 的圈复杂度教程进行了全面的介绍。我们首先描述了什么是圈复杂度、计算圈复杂度的公式、获取圈复杂度的示例、圈复杂度的用途、圈复杂度的优点和缺点。这使您具备了软件测试 - Mccabe 的圈复杂度的深入知识。明智的做法是继续练习您学到的知识并探索与软件测试相关的其他知识,以加深您的理解并拓展您的视野。