圈复杂度(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.

https://img1.mukewang.com/5b3dd9fc00012c1605020177.jpg

圈复杂度 代码状况 可测性 维护成本
1-10 清晰、结构化
11-20 复杂
21-30 非常复杂
>30 不可读 不可测 非常高