【问题标题】:SonarQube: Qualify Cognitive ComplexitySonarQube:鉴定认知复杂性
【发布时间】:2017-12-18 09:57:18
【问题描述】:

我了解认知复杂性是什么以及如何计算它,但我现在不知道如何确定该度量的好值,所以我的代码不应该有多复杂。我需要一种客观的方法来估计它,而不是相互比较项目。一种公式,如“复杂性/行代码”或类似的东西。 或者,如果我为一个大项目定义了一个质量门,我该如何计算它的值。

【问题讨论】:

    标签: sonarqube sonarqube-web


    【解决方案1】:

    在方法级别,建议的最大值为 15。

    在课程级别,这取决于您对包中的期望。

    例如,在一个只应包含具有字段和简单 getter 或 setter 类的包中,认知复杂度超过 0(5?10?)的类可能值得重新审视。

    另一方面,在包含业务逻辑类的包中,类分数 >= ... 150(?) 可能表明是时候考虑拆分类了。

    就项目的限制而言,这是无法回答的,这让我们回到了 Fred Brooks 的基本复杂性与偶然性复杂性。基本上,完成工作需要一定数量的逻辑。超出此范围的复杂性是偶然的,理论上可以消除。找出两者之间的区别是问题的症结所在,在寻找意外的复杂性时,我将专注于复杂性超过默认阈值 15 的方法。

    要回答您最初的问题,“应用程序的限制应该是多少?”,我想说不应该有。因为一个简单的计算器应用程序的基本复杂性远远低于航天飞机上的程序。如果你试图让航天飞机程序适合计算器的阈值,你肯定会破坏一些东西。

    (披露:我是Cognitive Complexity的主要作者)

    【讨论】:

    • 感谢您的帮助,从原始发明者那里获得信息真是太棒了。我非常感谢。我想现在我可以使用它了。
    • 这是最好的解释,所以在几行中,我有一个关于方法级别认知复杂性的问题 - 如果我的方法需要更多条件语句 - ( if/else - switch ) - 和在特定限制之后 - 在我的情况下,我无法将其降低到 25-30 以下 - 有什么可能的解决方法来降低方法级别的认知复杂性
    • @AshishShetkar 讨论了一些重构方法in this video
    • 关于 Shuttle 复杂性的仅供参考?:citeseerx.ist.psu.edu/viewdoc/…
    猜你喜欢
    • 2020-11-18
    • 2018-09-19
    • 1970-01-01
    • 2021-09-22
    • 2019-03-08
    • 2018-11-29
    • 2022-07-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多