加载中...

圈复杂度(Cyclomatic Complexity)是 Thomas J. McCabe 于 1976 年提出的软件度量指标,用于衡量一段程序控制流的复杂程度,定义为控制流图中线性独立路径的数量。其计算公式为 V(G) = E - N + 2P,其中 E 为控制流图的边数,N 为节点数,P 为连通分量数。
工程上常用简化算法:从 1 开始,每出现一个分支点(if、while、for、case、&& 与 || 等)加 1。一段没有任何分支的顺序代码圈复杂度为 1;分支和循环越多,数值越高。
圈复杂度与代码的理解难度、出错概率和测试成本正相关:它给出了达到分支覆盖所需测试用例数的下界。McCabe 建议单个模块不超过 10,许多团队在 Lint 或 SonarQube 中据此设阈值,超标函数被要求拆分重构。
它只度量分支结构,不反映嵌套深度与代码可读性——深度嵌套与平铺的 switch 可能得分相同但理解难度迥异,为此业界提出了认知复杂度(Cognitive Complexity)等改进指标作为补充。

登录 后参与讨论
暂无讨论,来发表第一条评论吧