SonarQube:限定认知复杂性

问题描述 投票:0回答:2

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

sonarqube sonarqube-web
2个回答
39
投票

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

在班级层面,这取决于您对包的期望。

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

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

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

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

(披露:我是认知复杂性的主要作者)


0
投票

@g-ann-声纳源团队

除了15之外,您能否建议我们的团队价值观将类似于圈复杂性的认知复杂性分为以下几类?

圈复杂度的分类: 1 - 10:程序简单,风险小 11 - 20:更复杂,风险中等 21 - 50:复杂、高风险 超过 50:不可测试的代码,风险非常高

认知复杂性是一个很好的选择,我的公司将使用更多来提高我们公司的产品质量。

非常感谢您的帮助!

© www.soinside.com 2019 - 2024. All rights reserved.