首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >声纳报告的认知复杂性是什么?

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

Stack Overflow用户
提问于 2018-10-10 13:46:31
回答 3查看 38.1K关注 0票数 20

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

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

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

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-10-10 13:46:31

认知复杂性

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

定义:

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

您编写的代码必须与上述定义一样简单易懂。

认知复杂性可读性

例如,让我们看一种计算CC的方法,现在我指的是kotlin语言,参见下面的图像:

在上面的图像中有一种方法getAppConfigData(),它的认知复杂性正在被测量。现在,该方法的CC为18。当您可以签入上面的屏幕快照时,有一个警告,它告诉我们,最大复杂度的限制是15,这比这个方法的当前CC要低。

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

按照下面的规则获得任何方法或类的CC,如下所示:

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

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

这就是我在认知复杂性方面所得到的全部信息。

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

谢谢

票数 49
EN

Stack Overflow用户

发布于 2021-12-14 20:16:28

Sonar 认知复杂性中的更多解释答案

基本标准和方法认知复杂性评分根据三个基本规则进行评估:

  1. 忽略允许将多个语句可读地缩短为一个的结构。
  2. 对代码的线性流中的每个中断增加(加一个)
  3. 断流结构嵌套时的增量

此外,复杂性评分由四种不同类型的增量组成:

  • 嵌套.相互内部嵌套控制流结构的评估
  • 结构-对受嵌套增量影响的控制流结构进行评估,并增加嵌套计数。
  • 基本-对不受嵌套增量限制的语句进行评估
  • 混合-评估控制流结构,这些结构不受嵌套增量的限制,但确实增加了嵌套计数。

虽然增量的类型在数学上没有什么区别--每个增量都在最后的分数中添加了一个--但是对正在计算的特性类别进行区分可以更容易地理解嵌套增量在哪里适用和不适用。以下各节将进一步详细介绍这些规则及其背后的原则。

票数 1
EN

Stack Overflow用户

发布于 2022-01-19 11:32:35

在我的例子中,认知的复杂性是由许多if条件造成的。我的SonarQue只允许15个如果和如果条件

代码语言:javascript
复制
if()       =>1
else if()  => 2
.
.
.
else     => 15

假设if超过15个条件,它向我展示了认知复杂性。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52741725

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档