什么是圈复杂度?
———————————————————————————————————————
圈复杂度(Cyclomatic Complexity)是衡量计算机程序复杂程度的一种措施。它根据程序从开始到结束的线性独立路径的数量计算得来的。
圈复杂度越高,代码就越难复杂难维护。坑就越大。。。
从1开始,一直往下通过程序。
一但遇到以下关键字,或者其它同类的词,就加1:if,while,repeat,for,and,or。
给case语句中的每一种情况都加1。
例如下面这个函数,圈复杂度为1,意味着代码只有一条路径。:
def add(a, b):
return a + b
对于有一条分支的代码,它的圈复杂度为 2 ,比如下面递归计算阶乘的代码:
def factorial(n):
if n == 0:
return 1
else:
return n * factorial(n-1)
它的计算方法很简单:
计算公式1:V(G)=E-N+2P。其中,E表示控制流图中边的数量,N表示控制流图中节点的数量,P图的连接组件数目(图的组件数是相连节点的最大集合)。因为控制流图都是连通的,所以P为1.
圈复杂度
代码状况
可测性
维护成本
1-10
清晰、结构化
高
低
11-20
复杂
中
中
21-30
非常复杂
低
高
>30
不可读
不可测
非常高
如何测量程序的圈复杂度?
———————————————————————————————————————
在 Python 中可以使用 mccabe 包测量程序的圈复杂度。
只需要很简单的一行命令即可安装mccabe
pip install mccabe
运行下面这行命令,就可以检