首页/开发/代码质量与评审速查/认知复杂度(Cognitive Complexity)
技术债与度量63 条

认知复杂度(Cognitive Complexity)

SonarSource 提出的可读性导向复杂度:嵌套越深增分越多,线性顺序分支少加分,switch 整块计一次,直接回应「圈复杂度对可读性建模不足」的问题。

提出SonarSource(2016 起)
与圈复杂度的差别嵌套增量 + 结构惩罚,更贴近阅读难度
工具SonarQube / SonarLint 内置规则

计分示意

计分示意
if (a) {            // +1
    if (b) {        // +2(嵌套 +1 增量)
        if (c) { } // +3
    }
}
// 三个顺序 if 则为 +3(每个 +1),深嵌套更贵

易错点

  • 与圈复杂度混用比较:两套口径不同,需分别设阈值
  • 只看分数不看写法:提前 return 与卫语句已能消除大部分增分

数据来源与参考

  • SonarSource 认知复杂度白皮书(Cognitive Complexity)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌