【问题标题】:Cyclomatic Complexity for multiple return statements多个返回语句的循环复杂度
【发布时间】: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


【解决方案1】:

尽管提出了许多衡量标准,但软件复杂性却难以衡量。尽管非常常用,但圈复杂度也有其局限性。以下是一些学术批评的参考。

要给出这个问题的具体答案,我不知道任何这样的最佳实践。我必须说,我认为 CC 充其量只是一个粗略的指标。保持警卫条件对我来说更重要。希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 2022-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多