声纳报告中的认知复杂性是什么?

时间:2018-10-10 13:46:32

标签: optimization kotlin sonarqube code-readability

现在有几天我切换到声纳报告,以进行静态代码检查和提高性能。在规则部分下,我发现我的方法的认知复杂性很高。

您可以在声纳中发现认知复杂性错误,如下所示: 转到项目->问题标签->规则下拉->认知复杂性

下面的屏幕快照为您提供了声纳项目的参考:

enter image description here

我没有任何方法来计算和降低方法的认知复杂性。最后,我找到了计算复杂度的准确方法,我将在下面的文章中回答。请退房。

1 个答案:

答案 0 :(得分:3)

认知复杂度

在搜索了一些博客并与声纳团队聊天之后,我发现了一个简单的定义和认知复杂度的计算方法,如下所示:

定义:

  

认知复杂性,因为可测性!=可理解性

您的书面代码必须像上面的定义一样简单易懂。

  

较少认知复杂度更多可读性

让我们看一下计算 CC 的方法,现在我指的是Kotlin语言,请参见下图:

enter image description here

上图中有一种方法getAppConfigData(),该方法的认知复杂度正在测量中。现在,此方法的抄送为 18 。正如您可以在上面的屏幕截图中检查的那样,有一个警告,告知您最大复杂度的限制为 15 ,该阈值低于此方法的当前CC。

现在的实际问题是,在开发时如何计算方法的CC?

按照以下规则进行操作,以获取任何方法或类的抄送:

  • 当线性(从上到下, 从左到右)的代码流
  • 结构破裂时增加 流是嵌套的
  • 忽略可读的“速记”结构 将多行代码压缩为一个

因此,只要上述规则匹配,只需将+计数添加到CC中,并记住计数将根据代码中断级别而增加,例如,如果“ if”条件是第一个代码中断,则该条件为+1,但是如果您使用过下一个嵌套的if则为该内部“ if”的+2,如下图所示。

enter image description here

这就是我所获得的认知复杂性

您可以在sonar blog

中找到与CC相关的所有内容

谢谢