圈复杂度及其运用

1.圈复杂度的定义

         圈复杂度是由Thomas J. McCabe, Sr. 在1976年提出的概念,用于判断代码复杂度。圈复杂度(Cyclomatic complexity)又称为条件复杂度或循环复杂度,用于衡量要给模块判定结构的复杂程度数量上表现为独立的现行的路径条数,也可理解为覆盖所有的可能情况的最少使用的测试用例数。

2.圈复杂度的计算方法        

圈复杂度的概念计算方法有3种。

        1)控制流程图

        一般来说,软件程序的流程分为三种:顺序、条件和循环。用流程图标识出所有分支,可以表示出所有的圈复杂度。如下如所示:  

         2)节点判定法

         一个比较简单的方法是:圈复杂度就是等于判定节点的数量加上1。在编程语言中国,条件判断if-else, swtich-case、for循环、while循环、三目运算符,都可以作为一个判定节点。(国内一些公司,比如华为等公司,就是这么计算的)

        样例如下:        

funciton complexityExample(param) {
    if(param > 0) {
        print(0);
    }
    else {
    
        print(1)
    }
 
    return param < -1 :True ? False;
}
       

   可知,这段程序的圈复杂度为3+1= 4.

  3)点边计算法

     计算方法为C = E - N + 2P,其中, E为控制流图(需要的方法为1)中的边的数量,N为控制流图中的节点数量,P为独立组件的数目。

     可得,E为9, N为6,P为1,可得C为5。

3.圈复杂度的衡量标准

         一般来说,代码复杂度第,代码不一定好;但代码复杂度高,代码质量一定差。具体衡量标准如下:


4.降低圈复杂度的方法

      降低圈复杂度的方法为重构。但是,重构应该保持原有功能不变,并不断完成。

      降低圈复杂度方法如下:

      1)抽象配置;

      2)单一职责-提炼函数;

      3)合并条件;

      4)提取条件。

      同事,针对圈复杂度过于高的语句部分,可以提出来一个函数。

猜你喜欢

转载自blog.csdn.net/liuqinhou/article/details/131723772