当前位置:网站首页>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
边栏推荐
- Explore cloud database of cloud services together
- Unity中SmoothStep介绍和应用: 溶解特效优化
- HCIA复习整理
- Nuclear boat (I): when "male mothers" come into reality, can the biotechnology revolution liberate women?
- C#中在路径前加@的作用
- 《论文阅读》Neural Approaches to Conversational AI(1)
- STM32F1与STM32CubeIDE编程实例-315M超再生无线遥控模块驱动
- <No. 8> 1816. Truncate sentences (simple)
- 大佬们有没有人遇到过 flink oracle cdc,读取一个没有更新操作的表,隔十几秒就重复读取
- The road to success in R & D efficiency of 1000 person Internet companies
猜你喜欢
Talk about SOC startup (x) kernel startup pilot knowledge
Improve application security through nonce field of play integrity API
Review and arrangement of HCIA
Zhou Yajin, a top safety scholar of Zhejiang University, is a curiosity driven activist
110. Network security penetration test - [privilege promotion 8] - [windows sqlserver xp_cmdshell stored procedure authorization]
Explore cloud database of cloud services together
Swiftui swift internal skill how to perform automatic trigonometric function calculation in swift
zero-shot, one-shot和few-shot
Nuclear boat (I): when "male mothers" come into reality, can the biotechnology revolution liberate women?
108.网络安全渗透测试—[权限提升篇6]—[Windows内核溢出提权]
随机推荐
Explore cloud database of cloud services together
Fleet tutorial 19 introduction to verticaldivider separator component Foundation (tutorial includes source code)
一起探索云服务之云数据库
Steps of redis installation and self startup configuration under CentOS system
Automated testing framework
Superscalar processor design yaoyongbin Chapter 10 instruction submission excerpt
How to write test cases for test coupons?
UP Meta—Web3.0世界创新型元宇宙金融协议
Common locking table processing methods in Oracle
《论文阅读》Neural Approaches to Conversational AI(1)
Rationaldmis2022 array workpiece measurement
Poor math students who once dropped out of school won the fields award this year
[system design] index monitoring and alarm system
In my limited software testing experience, a full-time summary of automation testing experience
[shortest circuit] acwing 1127 Sweet butter (heap optimized dijsktra or SPFA)
Talk about SOC startup (x) kernel startup pilot knowledge
小红书微服务框架及治理等云原生业务架构演进案例
[data clustering] realize data clustering analysis based on multiverse optimization DBSCAN with matlab code
《通信软件开发与应用》课程结业报告
【系统设计】指标监控和告警系统