【问题标题】:Based on both Cyclomatic Complexity formulas, explain why the number of procedural nodes does not influence on cyclomatic complexity value基于两个圈复杂度公式,解释为什么程序节点的数量不会影响圈复杂度值
【发布时间】:2017-06-03 19:10:54
【问题描述】:
  • 一个。基于这两个 CC 公式,解释为什么程序的数量 节点不影响 CC。

    b.如果你有多个停止节点会发生什么?

    d。 break、continue 对圈复杂度的影响是什么? goto 和 return 语句?

    e。 else 或 default 对圈复杂度有什么影响 if/switch 语句中的子句?

    f。对递归的圈复杂度有什么影响 方法调用?

    g.通过循环的可能路径总数(for、while 或 do...while) 实际上是无限的,因为它可以重复任意数量的 次。那么为什么循环只会增加圈复杂度 一?

    h。计算复杂度(以大 O 表示法表示) 影响圈复杂度?

【问题讨论】:

标签: metrics cyclomatic-complexity procedural


【解决方案1】:

以下是我对你的问题的回答,如果给定的答案有任何问题,你可以纠正。

一个。根据两个 CC 公式,解释为什么程序节点的数量不会影响 CC。 CC 是通过代码的线性独立路径数的度量。 程序节点可以组合在一起成为一个节点,因此只有一条路径通过代码。无论程序节点的数量 cc =1。由于决策节点 d= 0 .

b.如果你有多个停止节点会发生什么?

CC 测量线性独立路径。退出点不会向代码添加路径,它们会终止路径,从而减少 CC(或者至少,它们当然不会增加 CC)。 https://stackoverflow.com/a/2073485/5156517

c。假设您使用 V(G) = d + 1 公式,但不是计算 switch 语句,而是计算 case 子句。这在概念上是否正确?解释为什么你会得到正确的答案,即使 case 子句不是决策节点。

从概念上讲,3个案例意味着3个决定。默认路径不计算在内。

d。 break、continue、goto 和 return 语句对圈复杂度有何影响?

没有效果

e。 if/switch 语句中 else 或 default 子句的圈复杂度有什么影响?

无效,else 和 default 子句不计入决策节点。

f。递归方法调用的圈复杂度有什么影响?

没有。在您的示例中,递归方法只有一条线性独立路径,因此不会增加圈复杂度。

g.通过循环(for、while 或 do…while)的可能路径总数实际上是无限的,因为它可以重复任意次数。那么为什么循环只会将圈复杂度增加一?

因为它不会增加线性独立路径的数量。,for while do循环并不意味着多条控制路径。。那里因为它不添加到cc。返回时只添加一条路径每次从循环返回后的起始决策节点检查条件,因此只添加一个路径。

h。计算复杂度(用大 O 表示法表示)会影响圈复杂度吗?

计算复杂性衡量的是资源消耗、空间和时间,而不是程序复杂性的衡量标准。

【讨论】:

  • 谢谢。这真的很有帮助
  • "如果由语言指定,则在计算复杂度时必须考虑隐式默认或直通分支。"......我认为"默认”被考虑在内。 mccabe.com/pdf/mccabe-nist235r.pdf 第 26 页
猜你喜欢
  • 2012-10-29
  • 2010-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多