当前位置:网站首页>Sonar:cognitive complexity
Sonar:cognitive complexity
2022-07-07 12:01:00 【Peipei Dad】
background
When scanning the code , Discover the use of sonar, Will prompt “Refactor this method to reduce its Cognitive Complexity from 31 to 15 allowed And so on .
Translated into Chinese is : refactoring , To reduce the cognitive complexity of code from 31 drop to 15.
It's easy to understand , The cognitive complexity of the current code is a little high , Not friendly to reading , It is recommended to refactor its code .
Cognitive Complexity
Cognitive Complexity Translating into Chinese is cognitive complexity .
In short, it is a measure of the complexity of the code being read and understood , The code is fixed The method is transformed into a numerical value of complexity .
The higher the cognitive complexity value , Explain that the more complex this code is !
Scoring example
Here is a very useful example , We can point out the problem of cyclomatic complexity . The following two methods have the same cycle complexity , But the difficulty of understanding is very poor :
Simple rules of cognitive complexity
- Some syntax sugar is used in the code , Reduce many sentences to one sentence , however The code doesn't get any more complicated
- appear "break" Stop linear code reading comprehension , If a cycle occurs 、 Conditions 、try-catch、switch-case、 A string of and or The operator 、 recursive , as well as goto Class jump , therefore The code is therefore more complex
- The multi-level nested structure makes The code is therefore more complex
Cognitive complexity scoring rules
Ignore abbreviations : Abbreviate multiple sentences of code into one readable code , Do not change the difficulty of understanding ;
In the formulation of cognitive complexity , A guiding principle is : Encourage users to write good coding specifications . in other words , You need to ignore or underestimate what makes the code more readable feature( Do not count into complexity ).
“ Method ” Itself is a simple example , Take apart a piece of code and separate a few sentences into a method , Replace with a method call ,“ Abbreviation ” it , Cognitive complexity will not increase because of this method call .
alike , Cognitive complexity will also be ignored null-coalescing The operator ,x?.myObject
Such operators do not add complexity , Because these operations also abbreviate multiple pieces of code into one
In linear code logic , There is something that breaks the logic , difficulty +1;
In the formulation of cognitive complexity , Another guiding principle is : Structural control will interrupt a linear flow from beginning to end , It takes code maintainers more effort to understand the code . On the premise that this will lead to additional burden , Cognitive complexity is assessed as increasing by Structural Class complexity :
loop : for, while, do while, ...
Conditions : Ternary operator , if, #if, #ifdef...
in addition , The following accounting department Hybrid Class complexity :
else if, elif, else, ...
But not included Nesting Class complexity , Because this quantity is before the calculation if
Statement has been counted .
These add complexity , In fact, it is very similar to the calculation method of cycle complexity , But the extra , Cognitive complexity is also calculated
When what breaks logic is a nest , difficulty +1;
Compared with five structures nested consecutively , Five linearly continuous if\for The structure is much better understood . Because such nesting will increase the cost of understanding code , Therefore, cognitive complexity will be regarded as a Nesting Class complexity increases .
Specially , Every time one leads to Structural Class or Hybrid Class complex structure , When another structure is nested , Each layer of nesting should be added again Nesting Class complexity .
Further said that , Complexity scores are derived from the following different types :
A. Nesting: Nesting one piece of code logic into another ;
B. Structural: Nested control flow structure ;
C. Fundamental: Statements that are not affected by nesting ;
D. Hybrid: Some control flow structures , But it is not included in the nesting ;
However, there is no mathematical difference between different types , It's all about adding one to the complexity . Distinguish between the different categories to be calculated , It is easier to know whether nested logic is applicable at a certain place . The following sections will further elaborate on these rules and the rationale behind them .
If you have a better interest in it , You can see the official introduction document :https://www.sonarsource.com/docs/CognitiveComplexity.pdf
边栏推荐
- R language Visual facet chart, hypothesis test, multivariable grouping t-test, visual multivariable grouping faceting boxplot, and add significance levels and jitter points
- 《论文阅读》Neural Approaches to Conversational AI(1)
- 110.网络安全渗透测试—[权限提升篇8]—[Windows SqlServer xp_cmdshell存储过程提权]
- 防红域名生成的3种方法介绍
- Flet教程之 18 Divider 分隔符组件 基础入门(教程含源码)
- Rationaldmis2022 advanced programming macro program
- Solve the problem that vscode can only open two tabs
- 问下flinkcdc2.2.0的版本,支持并发,这个并发是指多并行度吗,现在发现,mysqlcdc全
- [neural network] convolutional neural network CNN [including Matlab source code 1932]
- 核舟记(一):当“男妈妈”走进现实,生物科技革命能解放女性吗?
猜你喜欢
本地navicat连接liunx下的oracle报权限不足
Talk about SOC startup (x) kernel startup pilot knowledge
Enclosed please find. Net Maui's latest learning resources
Swiftui swift internal skill how to perform automatic trigonometric function calculation in swift
Superscalar processor design yaoyongbin Chapter 10 instruction submission excerpt
核舟记(一):当“男妈妈”走进现实,生物科技革命能解放女性吗?
How to write test cases for test coupons?
SwiftUI Swift 内功之如何在 Swift 中进行自动三角函数计算
超标量处理器设计 姚永斌 第8章 指令发射 摘录
【最短路】Acwing1128信使:floyd最短路
随机推荐
竟然有一半的人不知道 for 与 foreach 的区别???
Talk about SOC startup (VI) uboot startup process II
超标量处理器设计 姚永斌 第8章 指令发射 摘录
Use references
Mastering the new functions of swiftui 4 weatherkit and swift charts
112. Network security penetration test - [privilege promotion article 10] - [Windows 2003 lpk.ddl hijacking rights lifting & MSF local rights lifting]
110.网络安全渗透测试—[权限提升篇8]—[Windows SqlServer xp_cmdshell存储过程提权]
Various uses of vim are very practical. I learned and summarized them in my work
18 basic introduction to divider separator component of fleet tutorial (tutorial includes source code)
Swiftui swift internal skill how to perform automatic trigonometric function calculation in swift
R language uses image of magick package_ Mosaic functions and images_ The flatten function stacks multiple pictures together to form a stack layers on top of each other
Nuclear boat (I): when "male mothers" come into reality, can the biotechnology revolution liberate women?
千人規模互聯網公司研發效能成功之路
大佬们有没有人遇到过 flink oracle cdc,读取一个没有更新操作的表,隔十几秒就重复读取
Software design - "high cohesion and low coupling"
Excel公式知多少?
sink 消费 到 MySQL, 数据库表里面已经设置了 自增主键, flink 里面,如何 操作?
超标量处理器设计 姚永斌 第10章 指令提交 摘录
【紋理特征提取】基於matlab局部二值模式LBP圖像紋理特征提取【含Matlab源碼 1931期】
C#中在路径前加@的作用