软件复杂度和圈复杂度

作者:翁松秀


软件复杂度和圈复杂度

软件复杂度

1,起源与应用

  • 成立于1976的McCabe & Associates公司开发出了McCabe Cyclomatic Complexity Metric(McCabe圈复杂度)技术对软件进行结构测试
  • McCabe复杂度是对软件结构进行严格的算术分析得来的,实质上是对程序拓扑结构复杂性的度量,明确指出了任务复杂部分。
  • McCabe复杂度能帮助工程师识别难以测试和维护的模块,已经成为评估软件质量的一个重要标准。
  • McCabe复杂度可以为软件开发过程中平衡成本、进度和性能提供指导

2,McCabe复杂度分类

软件复杂度和圈复杂度

(2)基本复杂度(Essential Complexity (ev(G)) )
概念: 基本复杂度用来衡量程序非结构化程度
计算方法: 将模块控制流图中的结构化部分简化成节点,计算简化后控制流图的圈复杂度就是基本复杂度。

(3)模块设计复杂度(Module Design Complexity (iv(G)) )
概念: 模块设计复杂度用来衡量模块之间的调用关系,复杂度越高,模块之间耦合性越高,越难隔离,维护和复用。
计算方法: 从模块控制流图中移去那些不包含调用子模块的判定循环结构后得到的圈复杂度。模块设计复杂度通常远小于圈复杂度。

(4)设计复杂度(Design Complexity (S0) )
概念: 用来衡量程序模块之间的相互作用关系。
计算方法: 程序中所有模块设计复杂度之和。

软件复杂度和圈复杂度
计算方法二: v(G)=判定节点数+1。对于多分支的CASE结构IF-ELSEIF-ELSE结构,要求必须统计全部实际的判定节点数,也即每个ELSEIF语句,以及每个CASE语句,都应该算为一个判定节点。
软件复杂度和圈复杂度

方法总结:

  • 针对程序的控制流图计算圈复杂度V(G)时,最好还是采用公式v(G)=e-n+2;
  • 针对模块的控制流图时,可以直接统计判定节点数,这样更为简单;
  • 针对复杂的控制流图时,使用区域计算公式v(G)=R更为简单。

来源:翁松秀

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2018年11月21日
下一篇 2018年11月21日

相关推荐