现在,有一天,我转到声纳报告进行静态代码审查和性能改进。在规则部分,我发现我的方法的认知复杂性很高。
您可以在声纳中发现认知复杂性错误,如:转到项目->问题选项卡->规则下拉->认知复杂性。
下面的屏幕截图为您提供声纳项目的参考:

我没有任何方法来计算和降低我的方法的认知复杂性。最后,我找到了计算复杂性的准确方法,我将在下面的帖子中回答这个问题。请退房。
发布于 2018-10-10 13:46:31
认知复杂性
在搜索了一些博客并与声纳团队聊天后,我发现了认知复杂性的简单定义和计算,如下所示:
定义:
认知复杂性,因为可测试性!=可理解性
您编写的代码必须与上述定义一样简单易懂。
少认知复杂性多可读性
例如,让我们看一种计算CC的方法,现在我指的是kotlin语言,参见下面的图像:

在上面的图像中有一种方法getAppConfigData(),它的认知复杂性正在被测量。现在,该方法的CC为18。当您可以签入上面的屏幕快照时,有一个警告,它告诉我们,最大复杂度的限制是15,这比这个方法的当前CC要低。
现在的实际问题是:,在开发时如何计算我的方法的CC?
按照下面的规则获得任何方法或类的CC,如下所示:
因此,每当上述规则匹配时,只要将+计数添加到CC中,记住计数就会根据代码中断的级别增加,例如" if“条件获得+1,如果这是第一个代码中断,但是如果您使用了多一个嵌套的如果,那么它将是一个+2的内部" if”,如下图所示。

这就是我在认知复杂性方面所得到的全部信息。
您可以在声纳博客找到与CC相关的所有内容
谢谢
发布于 2021-12-14 20:16:28
Sonar 认知复杂性中的更多解释答案
基本标准和方法认知复杂性评分根据三个基本规则进行评估:
此外,复杂性评分由四种不同类型的增量组成:
虽然增量的类型在数学上没有什么区别--每个增量都在最后的分数中添加了一个--但是对正在计算的特性类别进行区分可以更容易地理解嵌套增量在哪里适用和不适用。以下各节将进一步详细介绍这些规则及其背后的原则。
发布于 2022-01-19 11:32:35
在我的例子中,认知的复杂性是由许多if条件造成的。我的SonarQue只允许15个如果和如果条件
if() =>1
else if() => 2
.
.
.
else => 15假设if超过15个条件,它向我展示了认知复杂性。
https://stackoverflow.com/questions/52741725
复制相似问题