圈复杂度(Cyclomatic Complexity)是一种代码复杂度的衡量标准。它可以用来衡量一个模块判定结构的复杂程度,数量上表现为独立线性路径条数,也可理解为覆盖所有的可能情况最少使用的测试用例数。圈复杂度大说明程序代码的判断逻辑复杂,可能质量低且难于测试和维护。程序的可能错误和高的圈复杂度有着很大关系。
下面这个实例中,单元测试的覆盖率可以达到100%,但是很容易发现这其中已经漏掉了一个NPE的测试用例。case1方法的圈复杂度为2,因此至少需要2个用例才能完全覆盖到其所有的可能情况。
//程序原代码,圈复杂度为 2
public String case1(int num) {
String string = null;
if (num == 1) {
string = "String";
}
return string.substring(0);
}
//上面代码的单元测试代码
public void testCase1(){
String test1 = case1(1);
}
圈复杂度主要与分支语句(if、else、,switch 等)的个数成正相关。当一段代码中含有较多的分支语句,其逻辑复杂程度就会增加。
圈复杂度的计算方法,可以参考这篇文章:http://blog.csdn.net/lg707415323/article/details/7790660
降低圈复杂度的方法,可以参考《控制圈复杂度:9种重构技术》
相关推荐
可以通过转到ReSharper→Extensions Manager并搜索“ Cyclomatic Complexity”来安装它。 循环复杂度是旨在显示代码复杂度的度量。 它测量通过代码块的路径数-分支和条件语句越多,度量越高。 随着代码变得越来越...
一个pybuilder插件,使用radon检查项目的圈复杂度。 有关radon的更多信息,请参考。 要将这个插件添加到您的pybuilder项目中,请在build.py顶部添加以下行: use_plugin ( 'pypi:pybuilder_radon' , '~=0.1.0' ) ...
具有较高圈复杂度的功能需要更多的测试用例才能覆盖所有可能的路径,并且可能更难理解。 通过应用导致较小功能的通用重构技术,可以降低复杂性。 安装 要安装gocyclo命令,请运行 $ go get github.com/fzipp/gocy
圈复杂度 装箱以获取模块的圈复杂度 在本地发展 安装Rust 克隆github回购 执行execute.sh文件。 有关支持的操作的完整列表,请参见DevWorkflow.yml。 任务 编写读取一些命令行参数并设置config的基本代码。
复杂性检查器 概述 它测量 Go 代码的圈复杂度并教你复杂的函数。 争论 - 限制 允许的最大复杂度 默认值为 12 - 小路 项目评估路径 默认为当前目录
塞巴斯蒂安/复杂性 ... 安装 您可以使用将该库作为本地的,基于项目的依赖项添加到您的项目中: composer require sebastian/complexity 如果仅在开发过程中需要该库... composer require --dev sebastian/complexity
ShellMetrics 是用于 shell 脚本的圈复杂度分析器。 要求 ShellMetrics 是由 shell 脚本编写的。 以下其中一个壳是必需的: bash , mksh , yash , zsh 安装 curl -fsSL https://git.io/shellmetrics > ~ /bin/...
蜥蜴 Lizard是可扩展的Cyclomatic Complexity Analyzer,适用于许多编程语言,包括C / C ++(不需要所有头文件或Java导入)。 它还执行复制粘贴检测(代码克隆检测/代码重复检测)和许多其他形式的静态代码分析。 ...
这个单一的软件包将McCabe和Campbell的力量联合起来,提供了Python代码的圈复杂度和认知复杂度测量。 调用方式 usage: run.py [-h] [-i FILENAME] [-d PROJECT_DIR] [-c] [--clear] Python code complexity analyzer...
Complexity.java 是一个基于for、while和procedure数计算程序复杂度的程序。 以文件的形式给出一个程序作为输入。 文件名应该是 GetFile.java
技术负债,一个很好的隐喻去告诉Team,什么时候就算是有负债;
圈复杂度的结果是基于McCabe对这一指标的研究得出的。 此版本支持各种语言,包括Ada,ASP / ASP.NET,Assembly,Bash,C / C ++,C Shell,COBOL,ColdFusion,ColdFusion脚本,CSS,C#,DOS Batch,Fortran,HTML...
Chaos是一种强类型的,动态的但可编译的,面向测试的过程编程语言,可实现零循环复杂度。 被影响 TypeScript的类型安全 Python的语法,模块和可扩展性 JavaScript的跨平台支持 Ruby的循环和块,Rexx的FOREVER关键字...