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

Aks*_*wal 2 optimization code-readability kotlin sonarqube

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

您可以在声纳中找到认知复杂性错误,方法如下:转到“ 项目”->“问题”选项卡->“规则”下拉菜单->“认知复杂性”

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

在此处输入图片说明

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

Aks*_*wal 7

认知复杂性

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

定义:

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

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

更少的认知复杂性,更多的可读性

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

在此处输入图片说明

在上图中,有一种方法getAppConfigData()正在测量其认知复杂性。现在,此方法的CC为18。正如您可以在上面的屏幕快照中检查的那样,有一个警告,告诉您最大复杂度的限制为15,这比该方法的当前CC低。

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

请遵循以下规则,将任何方法或类的CC设置为:

  • 代码的线性(从上到下,从左到右)流中断时增加
  • 嵌套破坏流程的结构时增加
  • 忽略“简写”结构,这些结构将多行代码可读地压缩为一个

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

在此处输入图片说明

认知复杂性而言,这就是我所得到的。

您可以在声纳博客中找到与CC相关的所有内容

谢谢