【发布时间】:2017-12-18 09:57:18
【问题描述】:
我了解认知复杂性是什么以及如何计算它,但我现在不知道如何确定该度量的好值,所以我的代码不应该有多复杂。我需要一种客观的方法来估计它,而不是相互比较项目。一种公式,如“复杂性/行代码”或类似的东西。 或者,如果我为一个大项目定义了一个质量门,我该如何计算它的值。
【问题讨论】:
我了解认知复杂性是什么以及如何计算它,但我现在不知道如何确定该度量的好值,所以我的代码不应该有多复杂。我需要一种客观的方法来估计它,而不是相互比较项目。一种公式,如“复杂性/行代码”或类似的东西。 或者,如果我为一个大项目定义了一个质量门,我该如何计算它的值。
【问题讨论】:
在方法级别,建议的最大值为 15。
在课程级别,这取决于您对包中的期望。
例如,在一个只应包含具有字段和简单 getter 或 setter 类的包中,认知复杂度超过 0(5?10?)的类可能值得重新审视。
另一方面,在包含业务逻辑类的包中,类分数 >= ... 150(?) 可能表明是时候考虑拆分类了。
就项目的限制而言,这是无法回答的,这让我们回到了 Fred Brooks 的基本复杂性与偶然性复杂性。基本上,完成工作需要一定数量的逻辑。超出此范围的复杂性是偶然的,理论上可以消除。找出两者之间的区别是问题的症结所在,在寻找意外的复杂性时,我将专注于复杂性超过默认阈值 15 的方法。
要回答您最初的问题,“应用程序的限制应该是多少?”,我想说不应该有。因为一个简单的计算器应用程序的基本复杂性远远低于航天飞机上的程序。如果你试图让航天飞机程序适合计算器的阈值,你肯定会破坏一些东西。
(披露:我是Cognitive Complexity的主要作者)
【讨论】: