当前位置:网站首页>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

 

原网站

版权声明
本文为[Peipei Dad]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/188/202207071000356868.html

随机推荐