新闻资讯
看你所看,想你所想

圈复杂度

圈复杂度(Cyclomatic complexity)是一种代码复杂度的衡量标准,在1976年由Thomas J. McCabe, Sr. 提出。

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

  • 中文名称 圈复杂度
  • 外文名称 Cyclomatic complexity
  • 属性 一种代码复杂度的衡量标准
  • 计算公式 V(G)=e-n+2p

定义

  软件源码某部分的圈复杂度就是这部分代码中线性无关路径的数量。

举例

  如果一眼般余增棉段源码中不包含控制流语句(条件或决策点),那么这段代码的圈复杂度为1,因为这段代码中只会有一条路径;如果一段代码中仅包含来自一个if语句,且if语句仅有一个条件,那么这段代码的圈复杂度为2;包含两个嵌套的if语句,或是一个if语句有两个条件的代码块的圈复杂度为360百科3。

计算

  它的部若粉上长真行屋计算方法很简单:

  计算公式1:V(G)=e-n+2p。其中,来自e表示控制流图中边的数量,客印水免n表示控制流图中节点的数量,p图的连接组件数目(图的组件数是相连节点的最大集合)。因为控制流图都是连通的,所以p为360百科1.

  计算公式2:V(G)=区域数=判定节点数+1。其实,圈复杂度的计算还有更直观的方法,因为圈复杂度所反映的是"判定条件"的数量,所以圈复杂度实际上就是等于判定节点的数量再额输加上1,也即控制流图的区域数。

  对于多分支的CASE结构或IF-ELSEIF-ELSE结构,统计判定均举远感胜成传激陆凯节点的个数时需要特别注意一点,要求必须统计全部实际的判定节点数,也即每个ELSEIF语句,以及每个CASE语句,都应该算为一个判定节点。

  计算公式3:V(G)=R。其中R代表平面被控制流图划分成的区域数。

  针对程序的控制流图计算圈复杂度V(G)时,最好还是采用第一个公式,也即V(G)=e-n+2;而针对模块的控制流图时,可以直接统计判定节点数,这或积审烧七亚无著坏编样更为简单;针对复杂的控制流图是,使用区域计算公式V(G)=R微花奏命张洋北阿坚某更为简单。

转载请注明出处安可林文章网 » 圈复杂度

相关推荐

    声明:此文信息来源于网络,登载此文只为提供信息参考,并不用于任何商业目的。如有侵权,请及时联系我们:fendou3451@163.com