SonarQube:限定认知复杂性

SonarQube: Qualify Cognitive Complexity

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

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

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

例如,在一个只应包含 class 字段和简单 getter 或 setter 的包中,认知复杂度超过 0(5?10?)的 class 可能值得另一个看

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

关于项目的限制应该是多少,这是无法回答的,并且让我们回到 Fred Brooks 的基本复杂性和偶然复杂性。基本上,完成工作需要一定数量的逻辑。超出此范围的复杂性是偶然的,理论上可以消除。找出两者之间的区别是问题的关键,在寻找偶然的复杂性时,我会专注于复杂性超过默认阈值 15 的方法。

为了回答您最初的问题,"What should the limit for an application be?",我想说不应该有。因为一个简单的计算器应用程序的基本复杂性远远低于 Space Shuttle 上的程序。如果你试图让 Space Shuttle 程序适合计算器阈值,你绝对会破坏某些东西。

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