1. 基本知识
McCabe环路复杂度是一种用于衡量软件代码复杂性的指标,主要是通过计算代码中的控制流图中的环路数量来衡量的
核心概念是控制流图(Control Flow Graph,CFG)
对代码中控制结构(如条件语句、循环语句等)之间的控制流关系进行图形化表示的一种方法
在控制流图中,节点表示基本块(basic block),而边表示从一个基本块到另一个基本块的控制流转移。环路(或称为循环)则是在控制流图中形成闭合回路的一组节点
McCabe环路复杂度的计算基于以下公式:V(G)=E−N+2P
- V(G) 是McCabe环路复杂度
- E 是控制流图中的边数
- N 是控制流图中的节点数。
- P 是控制流图中的连通分量数(即图中的连通子图数)
假设代码如下:
def example_function(x, y):
if x > 10:
while y < 100:
y += 10
else:
for i in range(x):
y -= i
- 节点数 N:5(函数定义、条件语句、循环语句、循环内语句、条件语句的else分支)
- 边数 E:5(函数定义到条件语句、条件语句到循环语句、循环语句到循环内语句、循环内语句到循环语句、条件语句到条件语句的else分支)
- 连通分量数 P:1(整个控制流图是连通的)
总体计算如下:
V(G)=5−5+2∗1=2
2. 例题
原题如下:
计算方式:计算出最小环的数量为3,可以知道复杂度是3+1=4
计算方式2:最终是12-10+2