软件测试 - 圈复杂度



软件测试包含白盒黑盒测试技术。在白盒测试中,代码的内部结构得到验证。圈复杂度是白盒测试下的一个概念,由 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

以上代码行的控制流图如下所示:

cyclomatic complexity graph

在上面的控制流图中,有七个节点 (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 度量标准更快。
  • 它有助于确定测试的工作量和关键区域。
  • 它指导测试过程。
  • 它易于应用。

圈复杂度的缺点

圈复杂度的缺点如下所示:

  • 它只关注软件代码的复杂度,而不关注它处理的数据。
  • 嵌套程序代码的圈复杂度值不容易确定。
  • 对于简单的比较和决策结构,圈复杂度可能产生错误的值。

结论

本教程对软件测试麦卡比循环复杂度进行了全面概述。我们从描述什么是循环复杂度开始,讲解了计算循环复杂度的公式,并通过一个例子来获取循环复杂度,此外还介绍了循环复杂度的用途、优势和劣势。这将为您提供软件测试 - 麦卡比循环复杂度的深入知识。建议您持续练习所学内容,并探索与软件测试相关的其他内容,以加深理解并拓宽视野。

广告