软件测试 - 圈复杂度
软件测试包含白盒和黑盒测试技术。在白盒测试中,代码的内部结构得到验证。圈复杂度是白盒测试下的一个概念,由 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,然后 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 度量标准更快。
- 它有助于确定测试的工作量和关键区域。
- 它指导测试过程。
- 它易于应用。
圈复杂度的缺点
圈复杂度的缺点如下所示:
- 它只关注软件代码的复杂度,而不关注它处理的数据。
- 嵌套程序代码的圈复杂度值不容易确定。
- 对于简单的比较和决策结构,圈复杂度可能产生错误的值。
结论
本教程对软件测试麦卡比循环复杂度进行了全面概述。我们从描述什么是循环复杂度开始,讲解了计算循环复杂度的公式,并通过一个例子来获取循环复杂度,此外还介绍了循环复杂度的用途、优势和劣势。这将为您提供软件测试 - 麦卡比循环复杂度的深入知识。建议您持续练习所学内容,并探索与软件测试相关的其他内容,以加深理解并拓宽视野。