📜  圈复杂度

📅  最后修改于: 2021-04-27 22:09:12             🧑  作者: Mango

代码段的循环复杂度是其中线性独立路径数量的定量度量。它是一种软件度量标准,用于指示程序的复杂性。它是使用程序的控制流图计算的。图中的节点表示程序的最小命令组,并且其中的有向边将两个节点连接在一起,即,如果第二个命令可能紧跟在第一个命令之后。

例如,如果源代码不包含控制流语句,则其循环复杂度将为1,并且源代码中仅包含一条路径。同样,如果源代码包含一个if条件,那么循环复杂度将为2,因为将存在两条路径,一条为true,另一条为false。

在数学上,对于结构化程序,控制流内部的有向图是连接程序的两个基本块的边,因为控制可能会从第一个传递到第二个。
因此,圈复杂度M将定义为

计算圈复杂度和测试用例设计时应遵循的步骤是:

  • 用代码构造带有节点和边的图形。
  • 识别独立路径。
  • 环复杂度计算
  • 测试用例的设计

让一段代码这样:

A = 10
   IF B > C THEN
      A = B
   ELSE
      A = C
   ENDIF
Print A
Print B
Print C

以上代码的控制流程图

圈复杂度

为上述代码计算的圈复杂度将来自控制流程图。该图显示了七个形状(节点),七个线(边),因此圈复杂度为7-7 + 2 = 2。

循环复杂度的使用:

  • 因此,确定独立路径执行对开发人员和测试人员非常有用。
  • 它可以确保每个路径都经过至少一次测试。
  • 因此,有助于将更多的注意力集中在未发现的路径上。
  • 代码覆盖率可以提高。
  • 可以评估与计划相关的风险。
  • 在程序的早期使用的这些度量标准有助于降低风险。

循环复杂性的优点:

  • 它可以用作质量度量,给出各种设计的相对复杂性。
  • 它的计算速度比Halstead的度量标准快。
  • 它用于测量最小的工作量和最佳的测试集中区域。
  • 它能够指导测试过程。
  • 这很容易申请。

循环复杂性的缺点:

  • 它是程序控制复杂度的量度,而不是数据和数据复杂度的量度。
  • 在这种情况下,嵌套条件结构比非嵌套结构更难理解。
  • 如果进行简单的比较和决策结构,则可能会产生误导性的数字。

参考: https://en.wikipedia.org/wiki/Cyclomatic_complexity