Cognitive Complexity
认知复杂度:衡量代码被阅读和理解的复杂度的一个度量方法
朴素的考虑
- 代码中用到一些语法糖,把多句话融合成一句话,但代码没有变得更复杂,有利于降低认知复杂度
- 出现了
break
等终止线性的代码阅读,如出现循环、条件、try-catch
、switch-case
、一连串的and or
操作符、递归以及goto
类的跳转,代码认知复杂度应该会上升 - 多层嵌套结构让代码变得复杂
评分规则
对线性的代码逻辑中,出现一个打断逻辑的东西,+1
当打断逻辑的是一个嵌套时,+1
Cyclomatic Complexity
圈复杂度v(G)
:衡量一个模块判定结构的复杂度,数量上表现为独立线性路径的条数
当一个代码中含有较多的分支语句,其逻辑复杂度就会增加
Module Design Complexity
模块设计复杂度iv(G)
:移去那些不包含子模块的判定和循环结构后,得到的圈复杂度
Essential Complexity
基本圈复杂度ev(G)
Average Operation Complexity
平均操作复杂度OCAvg
:一个类的所有非抽象的方法的平均圈复杂度
Maximum Operation Complexity
最大操作复杂度OCmax
:一个类的所有非抽象方法的最大圈复杂度
Weighted Method Complexity
加权方法复杂度WMC
:一个类的所有方法的圈复杂度之和