【问题标题】:Maximal cyclomatic complexity for Angular appsAngular 应用程序的最大圈复杂度
【发布时间】:2014-11-21 14:40:27
【问题描述】:

我想知道 Cyclomatic Complexity 应该有一个 Angular 应用程序(每个控制器、服务等)以便于测试和维护。我在 Microsoft Documentation 中发现 Visual Studio 已将其警告级别设置为 25,但我认为它更多地依赖于语言/技术。

【问题讨论】:

    标签: angularjs testing automated-tests jshint cyclomatic-complexity


    【解决方案1】:

    圈复杂度不依赖于语言/技术。它是根据函数中的逻辑可能路径计算得出的。

    没有“最大”圈复杂度。 它越高,代码越难快速理解。 它越高,您错误理解它的可能性就越大,并且如果您不得不对其进行修改,您在该函数中引入错误的可能性就越大。

    如果要维护您的代码,或者要发展您的代码,则必须考虑到这一点。 (维护成本被远远低估了。)

    这个 SO 问题Do you find cyclomatic complexity a useful measure? 有一些有价值的答案。

    我个人使用 7 规则。(科学研究表明,人脑一次只能掌握大约 7 个事物/概念)。当 CC >= 7 时,我开始质疑我的设计,当函数的行数 >= 7 时,当我的类有 >= 7 个数据成员时,当我的函数有 >= 7 个参数时......等等.

    【讨论】:

    • CC > 7 通常是一个问题,而 OP 的“25”将是完全的疯狂。不过,该规则也有例外,有些仅适用于某些语言。如果该语言强制您使用 else-if 链而不是表查找,那么您将具有相同的复杂性,但在形式上您的 CC 增加了。另外我想知道如何编写一个角度控制器,在不到 7 行的时间内处理超过 5 个输入的形式。
    【解决方案2】:

    我猜,没有明确的答案。 CC of 25 很可能无法用任何语言维护,是的,一种语言与另一种语言存在差异。在某些语言中,您可以将函数放入字典并从该字典中选择一个函数会使 CC 增加 1,而在其他没有 lambda 的语言中,您可以使用 switch 甚至 else-if 链会为每个案例添加一个 CC,但如果所有案例都以 return; 结尾,则可维护性不会成为问题。

    正如 Stephane 所说,7 是一个很好的数字,并且有静态代码分析工具默认为 Java 的 7,但您总是会遇到异常情况,将一个函数分成两个会正式减少 CC,但人类会更难时间跟踪正在发生的事情。

    考虑一下,角度控制器通常具有非常低的 CC (promises 没有向 CC 添加任何内容,因为现在代码流将在另一个函数中(例如 success()failure())。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多