java 圈复杂度 工具_java sourcemonitor圈复杂度计算
sourcemonitor集成至eclipse的方法:
1、安装sourcemonitor工具
2、run New_Configration菜单 -> External Tools Configurations..
设置参数:/DJava${container_loc}/${resource_name}
圈复杂度(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 等)的个数成正相关。可以在图1中看到常用到的几种语句的
控制流图(表示程序执行流程的有向图)。 当一段代码中含有较多的分支语句,其逻辑复杂程度就会增加。
在计算圈复杂度时可以通过程序控制流图方便的计算出来。通常使用的计算公式是 V(G) = e – n + 2 e代表
在控制流图中的边的数量(对应代码中顺序结构的部分),n 代表在控制流图中的节点数量,包括起点和终点
(1、所有终点只计算一次,即便有多个return或者throw;2、节点对应代码中的分支语句)
知道了如何计算圈复杂度,我们来使用控制流图重新计算一次case1方法的圈复杂度,其控制流图如下图。
状态1表示 if(num == 1 )的条件判断, 状态2表示string=”String”的赋值操作。可以通过下面的控
制流图得到 e = 4 ; n = 4;那么全复杂度V(G) = 4 - 4 + 2 = 2,既case1的圈复杂度为2
public String case2(int index, String string) {
String returnString = null;
if (index < 0) {
throw new IndexOutOfBoundsException("exception <0 ");
}
if (index == 1) {
if (string.length() < 2) {
return string;
}
returnString = "returnString1";
} else if (index == 2) {
if (string.length() < 5) {
return string;
}
returnString = "returnString2";
} else {
throw new IndexOutOfBoundsException("exception >2 ");
}
return returnString;
}
根据公式 V(G) = e – n + 2 = 12 – 8 + 2 = 6 。case2的圈复杂段为6。说明一下为什么n = 8,
虽然图上的真正节点有12个,但是其中有5个节点为throw、return,这样的节点为end节点,
只能记做一个在开发中常用的检测圈复杂度的工具,PMD,checkstyle ,sourcemonitor都可以检
测到高复杂度的代码块。在代码的开发中,配合各种圈复杂度的检测插件,将高复杂度的代码
进行适当的拆分、优化,可以大大提高代码整体的质量,减少潜在bug存在。
另外,提下/DJava${container_loc}/${resource_name},可以参考博文[container_loc]
eclipse所有的插件都会在showView展示出来,比如eclipses->svn插件,当我们要清除
svn插件中记录的svn目录时,可以在showView中找出svn,然后remove repository
java 圈复杂度 工具_java sourcemonitor圈复杂度计算相关推荐
- java命令行参数工具_Java方法中的参数太多,第8部分:工具
java命令行参数工具 在我的系列文章的前七篇文章中,有关处理Java方法中期望的参数过多的内容集中在减少方法或构造函数期望的参数数量的替代方法上. 在本系列的第八篇文章中,我将介绍一些工具,这些工具 ...
- java web 漏洞扫描工具_java编写web漏洞扫描系列 一、GET/POST
今天是java编写漏洞扫描工具系列一,在整个系列中我将以案例驱动方式进行,从基本的请求,到常规漏洞扫描,Burp插件,调用SQLmap api,整合burp+sqlmap(Web平台),漏洞扫描平台( ...
- java需要会的工具_Java开发者必备的几款工具,一定要掌握!
原标题:Java开发者必备的几款工具,一定要掌握! Notepad++ Notepad++是用于编辑xml.脚本以及记笔记的最佳工具.这个工具的最好部分在于,你在Notepad++上打开的任何一个文档 ...
- java解析excel的工具_Java 解析 Excel 工具 easyexcel
软件介绍 easyexcel -- JAVA 解析 Excel 工具 Java 解析.生成 Excel 比较有名的框架有 Apache poi.jxl .但他们都存在一个严重的问题就是非常的耗内存,p ...
- java gps时间转换工具_java 时间戳和时间互转工具 和 时间偏移量计算
时间互转代码片段: * 时间戳 转 时间 * * @param beginDate * @return * @see [类.类#方法.类#成员] */ public static String tim ...
- java序列化和反序列化工具_Java 序列化和反序列化工具类并解决StreamCorruptedException问题 | 学步园...
问题: 若通过ObjectOutputStream向一个文件中多次以追加的方式写入Object,为什么用ObjectInputStream读取这些Object时,会产生StreamCorruptedE ...
- 用java做一个截图工具_Java制作屏幕截图软件(还可以保存到剪切板内)
原标题:Java制作屏幕截图软件(还可以保存到剪切板内) package com.kaige123;import java.awt.Rectangle;import java.awt.Robot;im ...
- java对象布局查看工具_Java 查看对象布局工具 - Java Object Layout
引入依赖 org.openjdk.jol jol-core 0.10 使用方式/** * 测试 User 对象在内存中的布局 * * @author CHAN * @date 2020/04/28 * ...
- java 汉字转拼音工具_java汉字转拼音工具类
public classPinYinUtils {public staticHanyuPinyinOutputFormat PINYIN_FORMAT;static{ PINYIN_FORMAT= n ...
最新文章
- 标准h5的定位_H5中的定位
- libsvm学习(二)——第一次体验libsvm(转)
- [Python] Window机器上同时安装Python 2 和 Python 3,如何兼容切换使用?
- 使用SoapUI调用不同的安全WCF SOAP服务-基本身份验证,第一部分
- 如何改变php的语言变中文,yii2怎么设置切换语言
- 洛谷 P2257 YY的GCD
- 【snmp】测试流程
- Go语言(golang)开源项目大全
- 通过 PackageManager 获得你想要的 App 信息
- mern技术栈好处?_如何开始使用MERN堆栈
- 怦然心动(Flipped)-4
- 从高考到程序员,一生无悔的选择,码农的成长之路
- linux内核5.8.1,Linus Torvalds宣布大规模更新Linux内核5.8
- linux系统怎么进入救援模式,Linux怎么进入救援模式?
- Selenium Chrome设置代理之后验证依旧是本机ip原因
- 【踩坑专栏】feign.codec.EncodeException: Error converting request body
- UWP Brush画笔详解
- Codeforces 450 B. Jzzhu and Sequences
- window10下libpng编译
- openssl x509 证书命令