2017-10-10 277 views
2

W.r.t对java项目之一的影响,我们最近开始使用SonarLint。代码分析的输出显示了太多关键代码异味警报。认知复杂性及其对代码

Critical code smell: Refactor this method to reduce its Cognitive Complexity. 

我听说过圆形复杂性,但不是关于认知复杂性。 我对该群组的问题:

  • 认知复杂性是行业标准吗?
  • 除了可读性和可维护性之外,认知复杂性对代码的影响。
  • 认知复杂性是否仅适用于方法或代码的任何其他部分?
  • 认知复杂性依赖于的任何特定标准?
  • 提高代码的认知复杂度的最佳实践。

我已经经历了这个link,但无法得到我所有问题的答案。

在此先感谢。

+2

该链接还包含有关该主题的白皮书的链接,其中包含更多详细信息。你也经历过吗? – janos

+0

谢谢你指出。我错过了。该白皮书中的信息看起来足以让开发人员对认知复杂性有一个正确的理解以及如何处理它。 – vmorusu

回答

5

人类可以很容易地记住大约7个实体+/- 2(wikipedia)。 当有人需要阅读代码时,他们可能会遇到这个限制。有时会有太多的局部变量需要跟踪,或者太多的if/for语句。在所有情况下,它使得更难理解代码应该做什么,因为很难对算法保持心理状态。

行业标准:第

可读性和可维护性:它更容易调试/提高代码简单且易于阅读。

适用于方法或其他部分:一些人可能想要了解的东西。如果你试图解释你的设计,我需要跟踪20个以上的课程,我会迷路。如果我需要快速使用你的界面,但我需要记住10位状态,我将无法做到。

它依赖于的任何具体标准:事物的数量一旦需要记住来理解代码。

最佳做法:制作更多更好的定义功能。将相关概念提取到组/包中。减少代码中嵌套级别的数量(如果您阅读嵌套代码,则需要记住那里的条件)。减少任何一点使用变量的数量(对提取函数很有效)。

+0

随着您的意见,它看起来像我们可以在任何领域应用认知复杂性,不仅仅是编码。让我从不同方面探讨其适用性。谢谢。 – vmorusu