当前位置:网站首页>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
边栏推荐
- [extraction des caractéristiques de texture] extraction des caractéristiques de texture de l'image LBP basée sur le mode binaire local de Matlab [y compris le code source de Matlab 1931]
- 源代码防泄密中的技术区别再哪里
- 30. Few-shot Named Entity Recognition with Self-describing Networks 阅读笔记
- Basic introduction to the 16 tabs tab control in the fleet tutorial (the tutorial includes source code)
- Le Cluster kubernets en cours d'exécution veut ajuster l'adresse du segment réseau du pod
- Zhou Yajin, a top safety scholar of Zhejiang University, is a curiosity driven activist
- [texture feature extraction] LBP image texture feature extraction based on MATLAB local binary mode [including Matlab source code 1931]
- 相机标定(1): 单目相机标定及张正友标定基本原理
- [filter tracking] strapdown inertial navigation pure inertial navigation solution matlab implementation
- Mise en œuvre du codage Huffman et du décodage avec interface graphique par MATLAB
猜你喜欢

MySQL安装常见报错处理大全

Reasons for the failure of web side automation test

一起探索云服务之云数据库

Talk about SOC startup (11) kernel initialization

Le Cluster kubernets en cours d'exécution veut ajuster l'adresse du segment réseau du pod

SwiftUI 教程之如何在 2 秒内实现自动滚动功能

Solve the problem that vscode can only open two tabs

MATLAB實現Huffman編碼譯碼含GUI界面

HCIA复习整理

NPC Jincang was invited to participate in the "aerospace 706" I have an appointment with aerospace computer "national Partner Conference
随机推荐
什么是局域网域名?如何解析?
一起探索云服务之云数据库
Superscalar processor design yaoyongbin Chapter 10 instruction submission excerpt
千人規模互聯網公司研發效能成功之路
[shortest circuit] acwing 1127 Sweet butter (heap optimized dijsktra or SPFA)
How to write test cases for test coupons?
超标量处理器设计 姚永斌 第8章 指令发射 摘录
<No. 8> 1816. Truncate sentences (simple)
Various uses of vim are very practical. I learned and summarized them in my work
Basic introduction to the 16 tabs tab control in the fleet tutorial (the tutorial includes source code)
When sink is consumed in mysql, the self incrementing primary key has been set in the database table. How to operate in Flink?
C#中在路径前加@的作用
[shortest circuit] acwing1128 Messenger: Floyd shortest circuit
问题:先后键入字符串和字符,结果发生冲突
Complete collection of common error handling in MySQL installation
Problem: the string and characters are typed successively, and the results conflict
Unity中SmoothStep介绍和应用: 溶解特效优化
R Language Using Image of magick package Mosaic Function and Image La fonction flatten empile plusieurs images ensemble pour former des couches empilées sur chaque autre
Talk about SOC startup (11) kernel initialization
Automated testing framework