optimization - 声纳报告中的认知复杂性是什么?
问题描述
现在有一天,我切换到声纳报告来进行静态代码审查和性能改进。在规则部分,我发现我的方法的认知复杂度很高。
您可以在声纳中找到认知复杂性错误:转到项目->问题选项卡->规则下拉菜单->认知复杂性
下面的屏幕截图为您提供声纳项目的参考:
我没有得到任何方法来计算和降低我的方法的认知复杂性。最后我找到了计算复杂度的准确方法,我将在下面的帖子中回答这个问题。请检查。
解决方案
认知复杂性
在搜索了一些博客并与声纳团队聊天后,我发现了一个简单的认知复杂度定义和计算,如下所示:
定义:
认知复杂性,因为可测试性!= 可理解性
你写的代码必须像上面的定义一样简单易懂,简单。
更少的认知复杂性更高的可读性
让我们看一个计算CC的方法,现在我指的是 kotlin 语言,见下图:
在上图中,有一种方法getAppConfigData()
正在测量其认知复杂性。现在这个方法的 CC 是18。正如您可以在上面的屏幕截图中看到的那样,有一个警告,它表明最大复杂度的限制是15,低于此方法的当前 CC。
现在实际的问题是:如何在开发时计算我的方法的 CC?
按照以下规则获取任何方法或类的 CC:
- 当代码的线性(从上到下,从左到右)流中断时递增
- 当破坏流的结构嵌套时增加
- 忽略将多行代码压缩为一行的“速记”结构
因此,只要上述规则匹配,只需将 + 计数添加到您的 CC 并记住计数将根据代码中断级别增加,例如,如果它是第一个代码中断但如果您使用了更多嵌套,则“if”条件得到 +1如果那么它将是该内部“如果”的+2,如下图所示。
这就是我在认知复杂性方面得到的全部内容。
您可以在sonar 博客上找到与 CC 相关的所有内容
谢谢你
推荐阅读
- css - 在向右或向左使用淡入时消除移动设备上的空白
- makefile - 为什么 Mingw64 中的 `make` 会启动一个新的 shell?
- javascript - GraphQL 订阅返回空对象不创建订阅
- parsing - Mojo::DOM - 如何从 dom 对象中解析数据集?
- python - 如何在没有掩码的情况下检索数字(或特定位)的第一位?
- mongodb - 是否有任何有效的方法可以以最新的一阶对给定的 mongodb 数据进行分页并避免排序超过大数据的内存限制?
- asp.net-core - asp.net core 中的多租户
- asp.net-core - aws lambda api gatewayc AmazonDynamoDBException
- post - 使用 unirest 库在 Post 请求中将文件作为表单数据正文发送
- pandas - 使用布尔索引时返回上一行