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

圈复杂度(Cyclomatic Complexity)

McCabe 1976 年提出:以控制流图判定点计数衡量分支规模,公式 M = E − N + 2P(边 − 节点 + 2×连通分量),实践中约等于判定点数量 + 1;它是分支测试数量的下界参考。

提出Thomas J. McCabe(1976 论文)
计算M = E − N + 2P;等价于 1 + 判定点个数
用途可测试性评估、模块拆分参考

计数示例

计数示例
int f(int a, int b) {
    if (a > 0) { ... }        // +1
    while (b-- > 0) { ... }    // +1
    return a > b ? 1 : 0;       // +1
}
// M = 1 + 3 = 4
常见阈值(如 10)是经验值而非标准:用于触发讨论与拆分,不用于个人考核。

易错点

  • 把复杂度当绩效指标:诱发拆分代码但逻辑依旧复杂
  • 不同工具计算口径不同:跨工具比较前先对齐规则

数据来源与参考

  • Thomas J. McCabe(1976)《A Complexity Measure》(IEEE TSE)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌