现在有几天我切换到声纳报告,以进行静态代码检查和提高性能。在规则部分下,我发现我的方法的认知复杂性很高。
您可以在声纳中发现认知复杂性错误,如下所示: 转到项目->问题标签->规则下拉->认知复杂性
下面的屏幕快照为您提供了声纳项目的参考:
我没有任何方法来计算和降低方法的认知复杂性。最后,我找到了计算复杂度的准确方法,我将在下面的文章中回答。请退房。
答案 0 :(得分:3)
认知复杂度
在搜索了一些博客并与声纳团队聊天之后,我发现了一个简单的定义和认知复杂度的计算方法,如下所示:
定义:
认知复杂性,因为可测性!=可理解性
您的书面代码必须像上面的定义一样简单易懂。
较少认知复杂度更多可读性
让我们看一下计算 CC 的方法,现在我指的是Kotlin语言,请参见下图:
上图中有一种方法getAppConfigData()
,该方法的认知复杂度正在测量中。现在,此方法的抄送为 18 。正如您可以在上面的屏幕截图中检查的那样,有一个警告,告知您最大复杂度的限制为 15 ,该阈值低于此方法的当前CC。
现在的实际问题是,在开发时如何计算方法的CC?
按照以下规则进行操作,以获取任何方法或类的抄送:
因此,只要上述规则匹配,只需将+计数添加到CC中,并记住计数将根据代码中断级别而增加,例如,如果“ if”条件是第一个代码中断,则该条件为+1,但是如果您使用过下一个嵌套的if则为该内部“ if”的+2,如下图所示。
这就是我所获得的认知复杂性。
您可以在sonar blog
中找到与CC相关的所有内容谢谢