圈复杂度(Cyclomatic Complexity)

 

圈复杂度是一种代码复杂度的衡量标准。 在软件测试的概念里,圈复杂度 用来衡量一个模块判定结构的复杂程度,数量上表现为独立现行路径条数,即合理的预防错误所需测试的最少路径条数,圈复杂度 大说明程序代码可能质量低且难于测试和维护,根据经验,程序的可能错误和高的圈复杂度有着很大关系

 

控制流图是McCabe 复杂度计算的基础,McCabe 度量标准是将软件的流程图转化为有向图,然后以图论的知识和计算方法来衡量软件的质量。 McCabe 复杂度包括圈复杂度(Cyclomatic complexity )、基本复杂度、模块涉及复杂度、设计复杂度和集成复杂度等。控制流程图分析是一个静态的分析过程,它提供静态的度量标准技术,一般主要运用在白盒测试的方法中。


   
控制流图的一个重要性质是它的可规约性(reducibility )。如果程序中不存在从循环外跳到循环内的goto 语句,那么这个程序对应的控制流图是 可规约的(reducible ),反之这个控制流图就是不可规约的(irreducible )。因此,模块符合结构化程序设计的准则是控制流图可规约的基 础。


    程序环路复杂性也即为McCabe 复杂性度量,它一般常用圈复杂度来描述,记录为VG )。它用来衡量一个程序模块所包含的判定结构的复杂程度,数量上表 现为独立路径的条数,即合理地预防错误所需测试的最少路径条数,圈复杂度大的程序,说明其代码可能质量低且难于测试和维护。经验表明,程序的可能存在的 Bug 数和圈复杂度有着很大的相关性


    圈复杂度的计算方法很简单,计算公式为:V(G)=e-n+2 。其中,e 表示控制流图中边的数量,n 表示控制流图中节点的数量。其实,圈复杂度的计算还有 更直观的方法,因为圈复杂度所反映的是 判定条件 的数量,所以圈复杂度实际上就是等于判定节点的数量再加上1 ,也即控制流图的区域数,对应的计算公式 为:V(G)= 区域数= 判定节点数+1


   
对于多分支的CASE 结构或IF-ELSEIF-ELSE 结构,统计判定节点的个数时需要特别注意一点,要求必须统计全部实际的判定节点数,也即每个 ELSEIF 语句,以及每个CASE 语句,都应该算为一个判定节点。判定节点在模块的控制流图中很容易被识别出来,所以,针对程序的控制流图计算圈复杂度 V(G) 时,最好还是采用第一个公式,也即V(G)=e-n+2 ;而针对模块的控制流图时,可以直接统计判定节点数,这样更为简单。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值