【发布时间】:2014-05-21 12:03:06
【问题描述】:
我读到了圈复杂度和多个返回语句,但我有点困惑,因为对多个返回语句有不同的看法。
首先,在循环复杂度计算期间,我是否应该将每个返回语句都算作一个端点,这会增加我认为的复杂度?在公式(M = E - N + 2*P)中,我添加return语句时,它增加了1,对吗?
用于简单完整性检查的保护子句添加是另一种方法,而不是嵌套的 if 子句,以便尽快返回。但是,这会在代码中添加更多的返回语句并增加 CC 吗?
在 CC 方面是否有任何常见的最佳实践来使用保护子句和多个返回语句?
【问题讨论】:
-
我认为这是一个有趣的问题。但是,请考虑重新措辞 - 有些人不喜欢“您对……有何看法”,并将您的问题标记为“基于意见”。更清楚地表明您不是在询问意见,而是询问事实:)
-
这就是我在写问题时的想法。 :) 谢谢 Honza。
-
使用 if 对您没有帮助,因为它们还会增加圈复杂度,因为它通过您的代码测量不同的可能方式。
-
Uwe,你是对的,但是我们事先不知道调用流的路径(取决于参数等)。据我了解,CC 对最佳/平均/最坏情况分析(从计算复杂性)之类的东西不感兴趣。你说“因为它通过你的代码测量不同的可能方式”,但这听起来更像是一个假设而不是一个公式(我的意思是如果你有一个无效的参数,你会尽快返回,但是如果数据是有效的呢? )。
-
CC 的计算无法知道,通过代码的流程将如何,它只是衡量可能性(甚至不是像“复杂性较低,当你早点离开代码时”这样的概率)。它是关于可测试性和可维护性(很多 -bilities ;o),因为您必须涵盖 所有 方式,例如在单元测试中,与它们的使用频率无关。重要的是它们可以被使用。
标签: design-patterns cyclomatic-complexity