【SonarQube】Cyclomatic Complexity 圈复杂度

Cyclomatic Complexity 来自 SonarQube 函数的复杂度是通过函数体中的逻辑运算符(&&、||)和条件控制语句(if、while、do-while、for、?:、catch、case、default)的数量来衡量的。 计算规则: 默认复杂度是 1,每遇到一次上述符号,复杂度增加 1。 复杂度在 1 到 10 之间的方法被认为是简单的,易于理解和测试。 复杂度在 10 到 20 之间的值表示代码更复杂,但仍然可以理解;然而,由于代码可能包含更多的分支,测试变得更加困难。 复杂度在 20 及以上是典型的具有大量潜在执行路径的代码,只有经过极大的困难和努力才能完全掌握和测试。 复杂度大于 50,肯定是不可维护的,或者说非常然维护的。 错误提示 The Cyclomatic Complexity of this function is 31 which is greater than 20 authorized. The Cyclomatic Complexity of this function is 23 which is greater than 20 authorized. 分析 其中: +1: function definition 表示定义函数时,复杂度默认为 1。 +1: if statement 表示识别到 if 语句,复杂度加 1。 +1: while loop ...

January 18, 2026 · 2 min · 358 words

【SonarQube】Cognitive Complexity 认知复杂度

Cognitive Complexity 来自 SonarQube 认知复杂度旨在弥补传统的圈复杂度在衡量代码可维护性方面的不足: 对于不同结构的代码,即使圈复杂度相同,但是理解难度可能差异很大。 不适合现代的编程语言结构。 计算规则: 忽略简化写法 不计算那些使代码更简洁、已读的结构。 结构增量(Structural Increment) for、while、do-while、if、?:、#if、#ifdef 会增加 1 分。 catch 语句会增加 1 分。 try 和 finally 则不会加入统计。 switch 语句会增加 1 分。 switch 里面的 case 语句则不会加入统计。 同类型的运算符会增加 1 分,但是不同类型的运算符会增加 n 分(n 取决于实际个数)。 if (a && b && c && d) 会增加 1 分,if (a || b || c || d) 会增加 1 分。 if (a && b || c) 会增加 2 分,if (a || (b && c) || d) 会增加 3 分。 ...

January 18, 2026 · 2 min · 338 words