请教圈复杂度判定节点的计算方法?

来源:互联网 发布:西安临潼网络花店 编辑:程序博客网 时间:2024/05/16 08:26
     Int IsLeap(int year)
(1)   {
(2)    if (year % 4 == 0)
(3)    {
(4)     if (year % 100 == 0)
(5)     {
(6)      if ( year % 400 == 0)
(7)       leap = 1;
(8)      else
(9)      leap = 0;
(10)    }
(11)    else
(12)    leap = 1;
(13)   }
(14)   else
(15)   leap = 0;
(16)   return leap;
(17)  }
判定节点数该从第二行算起,还是第一行?还是if语句开始呢?(左边小括号为判定节点数)
 
 
圈复杂度是一种代码复杂度的衡量标准,中文名称叫做圈复杂度。在软件测试的概念里,圈复杂度“用来衡量一个模块判定结构的复杂程度,数量上表现为独立现行路径条数,即合理的预防错误所需测试的最少路径条数,圈复杂度大说明程序代码可能质量低且难于测试和维护,根据经验,程序的可能错误和高的圈复杂度有着很大关系”。
它的计算方法很简单,计算公式为:V(G)=e-n+2。其中,e表示控制流图中边的数量,n表示控制流图中节点的数量。其实,圈复杂度的计算还有更直观的方法,因为圈复杂度所反映的是“判定条件”的数量,所以圈复杂度实际上就是等于判定节点的数量再加上1,也即控制流图的区域数,对应的计算公式为:V(G)=区域数=判定节点数+1。
h r0U&T#@-g o,J o114943 对于多分支的CASE结构或IF-ELSEIF-ELSE结构,统计判定节点的个数时需要特别注意一点,要求必须统计全部实际的判定节点数,也即每个ELSEIF语句,以及每个CASE语句,都应该算为一个判定节点。判定节点在模块的控制流图中很容易被识别出来,所以,针对程序的控制流图计算圈复杂度V(G)时,最好还是采用第一个公式,也即V(G)=e-n+2;而针对模块的控制流图时,可以直接统计判定节点数,这样更为简单。