圈复杂度及其运用

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)提取条件。

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

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值