SonarQube:限定认知复杂性

标签 sonarqube sonarqube-web

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

最佳答案

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

在类级别,这取决于您对包的期望。

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

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

就项目的限制而言,这是无法回答的,并且让我们回到 Fred Brooks 的本质复杂性与偶然复杂性。基本上,完成工作需要一定的逻辑。除此之外的复杂性是偶然的,理论上可以消除。弄清楚两者之间的差异是问题的关键,在寻找偶然的复杂性时,我会集中精力于复杂性超过默认阈值 15 的方法。

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

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

关于SonarQube:限定认知复杂性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45083653/

相关文章:

sonarqube - 如何在多模块java项目中的 Sonar 分析中跳过子模块

maven - tmatesoft.svn.core.SVNAuthenticationException : svn: E170001

Sonarqube PostProjectAnalysisTask 示例?

sonarqube - Sonar 中的 Findbugs 和 FindSecBugs

java - 并行 Sonar 扫描仪执行锁定错误

java - Sonar 在哪里检查记录的 Api 配置

Sonar Qube 6.1 : How can I see the changes over time without the dashboards?

SonarQube API 问题搜索仅返回 100 个结果

c# - 如何让 SonarQube 忽略 GlobalSuppressions.cs 文件?