什么叫圈复杂度(cyclomatic complexity)?为什么它很重要?

·NET知识,本人尽力了……望高手指教

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

2、重要性:程序的可能错误和高的圈复杂度有着很大关系。

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

扩展资料:

下面的列表显示了 Visual Studio( VS 2008 Team Suite Edition)计算的代码度量结果:

可维护性指数:计算一个介于 0 和 100 之间的指数值,表示维护代码的相对容易度。值越大表示可维护性越好。该计算基于 Halstead Volume、圈复杂度和代码的行数。按颜色标记的等级可用于迅速发现代码中的故障点。

绿色等级介于 20 和 100 之间,表示代码的可维护性良好。黄色等级介于 10 和 19 之间,表示代码的可维护性中等。红色等级是介于 0 和 9 之间的等级,表示可维护性低。

圈复杂度:衡量代码在结构上的复杂程度。它通过计算程序流中的不同代码路径的数目(例如 if 块、switch case 以及 do、while、foreach 和 for 循环),然后在总数中加 1 来创建。具有复杂控制流的程序需要更多单元测试才能实现良好的代码覆盖率,并且不容易维护。

继承深度:指明扩展到类层次结构根的类定义的数目。层次结构越深,则越难了解特定方法和字段是在何处定义或/和重新定义的。

在类级别,该数目是通过计算继承树中从 0 开始的类型之上的类型数目(不包括接口)来创建的。在命名空间和项目级别,该计算包括命名空间或项目内所有类型的最高继承深度计算。

耦合:通过参数、局部变量、返回类型、方法调用、泛型或模板实例化、基类、接口实现、在外部类型上定义的字段以及属性修饰来衡量与唯一类的耦合程度。该计算不包括基元类型和内置类型,例如 int32、字符串和对象。

良好的软件设计要求类型和方法应具有较高的内聚力和较低的耦合。耦合较高表示设计难以重用和维护,这是因为它与其他类型之间存在许多依存关系。

代码的行数:指明代码中的大概行数。该计数基于 IL 代码,因此并不是源代码文件中的确切行数。该计算不包括空白、注释、括号以及成员、类型和命名空间的声明。计数过高可能表示某个类型或方法正在尝试执行过多的工作,应予以拆分。还可能表示该类型或方法难以维护。

参考资料来源:百度百科——圈复杂度

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-06-02
所谓圈复杂度是一种代码复杂度的衡量标准,中文名称叫做圈复杂度。在软件测试的概念里,圈复杂度“用来衡量一个模块判定结构的复杂程度,数量上表现为独立现行路径条数,即合理的预防错误所需测试的最少路径条数,圈复杂度大说明程序代码可能质量低且难于测试和维护,根据经验,程序的可能错误和高的圈复杂度有着很大关系”。它的计算方法很简单,计算公式为:V(G)=e-n+2。其中,e表示控制流图中边的数量,n表示控制流图中节点的数量。其实,圈复杂度的计算还有更直观的方法,因为圈复杂度所反映的是“判定条件”的数量,所以圈复杂度实际上就是等于判定节点的数量再加上1,也即控制流图的区域数,对应的计算公式为:V(G)=区域数=判定节点数+1。本回答被网友采纳
第2个回答  2013-03-27
一种代码复杂度的衡量标准
再软件测试的概念里,圈复杂度“用来衡量一个模块判定结构的复杂程度,数量上表现为独立现行路径条数,即合理的预防错误所需测试的最少路径条数,圈复杂度大说明程序代码可能质量低且难于测试和维护。

具体内容,见《软件复杂度概述》。