加载中...
认知复杂度是 SonarSource 于 2016 年提出的代码可理解性度量,用来弥补圈复杂度的不足:它按人脑理解代码的难度打分,对嵌套结构加重惩罚,对不打断线性阅读的结构不计分,已成为主流静态分析工具的常用指标。

| 中文名 | 认知复杂度 |
| 英文名 | Cognitive Complexity |
| 提出方 | SonarSource(安·坎贝尔) |
| 提出时间 | 2016 年 |
| 对比指标 | 圈复杂度 |
| 常见阈值 | 函数级 15 |
认知复杂度(Cognitive Complexity)是一种衡量代码被人类理解难度的度量指标,由静态分析公司 SonarSource 的安·坎贝尔(G. Ann Campbell)于 2016 年在白皮书中提出,并在 SonarQube 等工具中落地。它的目标是修正沿用数十年的圈复杂度在评估可读性上的失真。
圈复杂度诞生于 1976 年,度量的是控制流图中线性独立路径的数量,适合估算测试用例数量,但并不贴合人的阅读体验:一个由十个连续 case 组成的 switch 语句圈复杂度很高,读起来却一目了然;而一段三层嵌套的循环加条件,圈复杂度可能不高,理解成本却极大。认知复杂度针对这一点重新设计计分规则,让分数与开发者的直观感受一致,从而更适合作为可维护性门禁。
认知复杂度主要用于代码评审辅助与质量门禁:SonarQube 默认对超过阈值(常见为 15)的函数发出告警,提示拆分或简化。它也常被用作重构优先级的依据——优先处理认知复杂度高且改动频繁的热点函数,投入产出比最高。
问:认知复杂度会取代圈复杂度吗?答:不会,两者用途不同。圈复杂度仍适合指导测试覆盖(路径数),认知复杂度适合衡量可读性与维护成本,成熟团队通常同时参考。
问:分数多少算合格?答:没有绝对标准。SonarQube 默认函数级阈值为 15,许多团队对新代码收紧到 10 以内;关键是对超标函数强制评审,而非机械追求零分。

| 中文名 | 认知复杂度 |
| 英文名 | Cognitive Complexity |
| 提出方 | SonarSource(安·坎贝尔) |
| 提出时间 | 2016 年 |
| 对比指标 | 圈复杂度 |
| 常见阈值 | 函数级 15 |
登录 后参与讨论
暂无讨论,来发表第一条评论吧