基于Cyclomatic Complexity公式,解释为什么程序节点的数量不会影响圈复杂度值

时间:2017-06-03 19:10:55

标签: metrics cyclomatic-complexity procedural

  • 一个。基于两个CC公式,解释为什么程序的数量 节点不会影响CC。

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

    d。对断裂的圈复杂度有什么影响,继续, 转到并返回语句?

    即对其他或默认的圈复杂度有什么影响 if / switch语句中的子句?

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

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

    小时。计算复杂性(用big-O表示法表示) 影响圈复杂度?

1 个答案:

答案 0 :(得分:1)

下面给出了我对你的问题的答案,如果给出的答案有任何问题,你可以纠正。

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

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

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

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

概念上违背公式,3个案例意味着3个决定。默认路径不计算在内。

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

无效

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

无效,否则默认子句不计入决策节点。

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

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

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

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

小时。计算复杂性(以big-O表示法表示)是否会影响圈复杂度?

计算复杂性衡量所用资源,空间和时间,而不是衡量计划的复杂程度。