圈复杂度和代码覆盖率
(转载请注明来源于金庆的专栏)
100%代码覆盖率的单元测试并不代表是足够的测试,下面是一个例子:
int foo(bool isOK)
{
const int ZERO = 0;
int* pInt = NULL;
if (isOk)
{
pInt = &ZERO;
}
return *pInt;
}
如果仅仅测试一种情况:
foo(true);
结果是,测试通过,并具有100%的代码覆盖率。但我们知道foo(false);就会失败。
这里就要引入圈复杂度(Cyclomatic Complexity,CC)的概念。
圈复杂度是一种度量方法,由 Thomas McCabe 于 1975 年定义。
圈复杂度是一个方法中执行路径的数量。
起始CC从 1 开始。每一个条件,如 if、switch、while 和 for 语句,都被分配一个 1 值和异常路径。
一个方法的 CC 表明了它的复杂度。
以上foo()的CC为2,所以至少需要2个单元测试路径。
幸运的是,foo()的CC仅为2。
设想一下如果该缺陷被隐藏在 CC 为 102 的方法中,祝您好运找到它!
可使用一些开放源码工具来报告圈复杂度。C++可用Cppncss.
Cppncss是度量c++代码复杂度的工具,可度量函数级、文件级、工程级的复杂度。
可运行在windows(需要cygwin)及linux上。
参考:
追求代码质量: 监视圈复杂度 ( http://www.ibm.com/developerworks/cn/java/j-cq03316/ )
C++代码复杂度度量工具cppncss ( http://www.51testing.com/?uid-13997-action-viewspace-itemid-202260 )
分享到:
相关推荐
根据sonar分析结果,获取圈复杂度和方法来计算最大平均圈复杂度。
v(G) 用来衡量模块判定结构的复杂程度,数量上表现独立路径条数,即合理预防错误所需测试最少路径条数,圈复杂度大说明程序代码可能质量低且难于测试和维护,经验表明程序可能错误和高的圈复杂度有着很大关系。
圈复杂度插件
这个工具是用于检测代码圈复杂度的,可以显而易见的标注每个方法的圈复杂度,并且依据大小有颜色直观的显示
source monitor 圈复杂度检测工具
详细介绍了代码的圈复杂度,常见的圈复杂度侧脸方法,及9中常规降低圈复杂度的方法。
在sourceinsight中查看单个函数圈复杂度的方法 sourceinsight SourceMonitor 方法一、集成SourceMonitor工具,查看单个函数圈复杂度 方法二、利用SoureceInsight自身的度量功能
php圈复杂度 phploc.phar
从圈复杂度谈谈代码质量.在软件行业里,几乎所有的开发人员都在谈代码质量,而每个人对代码质量都有一套自己的看法。甚至术语代码味道(codesmell)也已进入大众词汇表,成为描述代码需要改进的一种方式。 在软件...
面向Python的圈复杂度静态分析方法研究.pdf
对算法分析与设计课程的实验报告,对算法里面的时间复杂度,和增长率有很好的研究。
如何计算程序圈复杂度,找出程序的线性独立路径
NULL 博文链接:https://lsz1023-126-com.iteye.com/blog/2341644
圈复杂度metrics,
Cyclo-C语言的圈复杂度工具 原始版本的版权(c)1993 Roger Binns 更新版权(c)2016 Stephen L Arnold 这些工具由Roger Binns作为英国大学计算机科学系的四年级项目(作为计算机科学学位的一部分)生产,用于...
所谓圈复杂度是一种代码复杂度的衡量标准。在软件测试的概念里,圈复杂度“用来衡量一个模块判定结构的复杂程度
C#代码 NET复杂度检查工具,可以检查出C#的语法,哪些未用变量等。
最优雅的方法,通过降低圈复杂度,实现问题的解决。最大的亮点就是降低圈复杂度。 输入星期得出星期几。
复杂度分数越高,代码越复杂,这通常会转化为更难于理解,维护和测试的代码。 圈复杂度的数量取决于代码的输入量,可以执行多少条不同的执行路径或代码的控制流。 圈复杂度的度量标准是: 分数 复杂 风险类型 1至...
sonar 安装 使用,圈复杂度,使用。代码覆盖率统计。程序代码分割检测、