首页 > 解决方案 > 声纳报告中的认知复杂性是什么?

问题描述

现在有一天,我切换到声纳报告来进行静态代码审查和性能改进。在规则部分,我发现我的方法的认知复杂度很高。

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

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

在此处输入图像描述

我没有得到任何方法来计算和降低我的方法的认知复杂性。最后我找到了计算复杂度的准确方法,我将在下面的帖子中回答这个问题。请检查。

标签: optimizationkotlinsonarqubecode-readability

解决方案


认知复杂性

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

定义:

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

你写的代码必须像上面的定义一样简单易懂,简单。

更少的认知复杂性更高的可读性

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

声纳捕获

在上图中,有一种方法getAppConfigData()正在测量其认知复杂性。现在这个方法的 CC 是18。正如您可以在上面的屏幕截图中看到的那样,有一个警告,它表明最大复杂度的限制是15,低于此方法的当前 CC。

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

按照以下规则获取任何方法或类的 CC:

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

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

在此处输入图像描述

这就是我在认知复杂性方面得到的全部内容。

您可以在sonar 博客上找到与 CC 相关的所有内容

谢谢你


推荐阅读