当前位置:网站首页>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 uses the quantile function to calculate the quantile of the score value (20%, 40%, 60%, 80%), uses the logical operator to encode the corresponding quantile interval (quantile) into the cla
- Camera calibration (1): basic principles of monocular camera calibration and Zhang Zhengyou calibration
- Neural approvals to conversational AI (1)
- 小红书微服务框架及治理等云原生业务架构演进案例
- SwiftUI Swift 内功之如何在 Swift 中进行自动三角函数计算
- Superscalar processor design yaoyongbin Chapter 10 instruction submission excerpt
- 《论文阅读》Neural Approaches to Conversational AI(1)
- Flet教程之 15 GridView 基础入门(教程含源码)
- .NET MAUI 性能提升
- zero-shot, one-shot和few-shot
猜你喜欢
MATLAB实现Huffman编码译码含GUI界面
STM32F1与STM32CubeIDE编程实例-MAX7219驱动8位7段数码管(基于SPI)
108.网络安全渗透测试—[权限提升篇6]—[Windows内核溢出提权]
<No. 9> 1805. 字符串中不同整数的数目 (简单)
[shortest circuit] acwing1128 Messenger: Floyd shortest circuit
正在运行的Kubernetes集群想要调整Pod的网段地址
In SQL, I want to set foreign keys. Why is this problem
Rationaldmis2022 advanced programming macro program
Problem: the string and characters are typed successively, and the results conflict
CMU15445 (Fall 2019) 之 Project#2 - Hash Table 详解
随机推荐
Test the foundation of development, and teach you to prepare for a fully functional web platform environment
源代码防泄密中的技术区别再哪里
Fleet tutorial 19 introduction to verticaldivider separator component Foundation (tutorial includes source code)
请查收.NET MAUI 的最新学习资源
SwiftUI Swift 内功之 Swift 中使用不透明类型的 5 个技巧
【数据聚类】基于多元宇宙优化DBSCAN实现数据聚类分析附matlab代码
[neural network] convolutional neural network CNN [including Matlab source code 1932]
Explore cloud database of cloud services together
Various uses of vim are very practical. I learned and summarized them in my work
Camera calibration (2): summary of monocular camera calibration
<No. 9> 1805. 字符串中不同整数的数目 (简单)
2022年在启牛开华泰的账户安全吗?
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
Some opinions and code implementation of Siou loss: more powerful learning for bounding box regression zhora gevorgyan
In my limited software testing experience, a full-time summary of automation testing experience
Improve application security through nonce field of play integrity API
相机标定(2): 单目相机标定总结
千人規模互聯網公司研發效能成功之路
The function of adding @ before the path in C #
30. Few-shot Named Entity Recognition with Self-describing Networks 阅读笔记