使用工具Source Monitor测量您Java代码的环复杂度
代码的环复杂度(Cyclomatic complexity,有时也翻译成圈复杂度)是一种代码复杂度的衡量标准,在1976年由Thomas J. McCabe, Sr. 提出。
来看看计算公式。
代码环复杂度 = E − N + 2
E = 程序控制流图中边的个数
N = 程序控制流图中点的个数
很容易得出这样的结论:代码环复杂度越高,越容易出bug。
可以想象如果需要开发人员自己去把一段代码的控制流图画出来,然后去数图中边和点的个数,这种做法效率太低了也容易出错。
好消息是,有一款名为Source Monitor的免费软件,能够帮我们来度量Java代码的环复杂度。当然这款软件也支持C++和C#。
为了说明如何使用这款软件,我写了一段简单的Java代码。
package test;import java.util.ArrayList;public class monthTool {static ArrayList<String> monthCollection = new ArrayList<String>();public static void main(String[] args) {monthTool tool = new monthTool();tool.printV1(1);tool.printV2(2);tool.printV1(0);tool.printV2(-1);tool.printV3(3);tool.printV3(13);}public monthTool(){monthCollection.add("Invalid");monthCollection.add("January");monthCollection.add("Febrary");monthCollection.add("March");monthCollection.add("April");monthCollection.add("May");monthCollection.add("June");monthCollection.add("July");monthCollection.add("August");monthCollection.add("September");monthCollection.add("October");monthCollection.add("November");monthCollection.add("December");}public void printV1(int month){System.out.println("Month is: " + getMonthNameV1(month));}public void printV2(int month){if( month >= 1 && month <= 12)System.out.println("Month is: " + getMonthNameV2(month));elseSystem.out.println("Please specify a valid month");}public void printV3(int month) {System.out.println("Month is: " + getMonthNameV3(month));}public String getMonthNameV2(int month){if( month == 1)return "January";else if( month == 2)return "Febrary";else if( month == 3)return "March";else if( month == 4)return "April";else if( month == 5)return "May";else if( month == 6)return "June";else if( month == 7)return "July";else if( month == 8)return "August";else if( month == 9)return "September";else if( month == 10)return "October";else if( month == 11)return "November";else if( month == 12)return "December";elsereturn "Invalid";}public String getMonthNameV1(int month){switch (month){case 1:return "January";case 2:return "Febrary";case 3:return "March";case 4:return "April";case 5:return "May";case 6:return "June";case 7:return "July";case 8:return "August";case 9:return "September";case 10:return "October";case 11:return "November";case 12:return "December";default:return "Invalid";}}public String getMonthNameV3(int month){try {return monthCollection.get(month);}catch (java.lang.IndexOutOfBoundsException e){return "Invalid";}}}
其中我用了三种不同的方式实现了同一个逻辑,将一个代表月份的整数转成了月份名称。
下面是Source Monitor的具体用法。
1. 创建一个新的项目:
这里能看到所有Source Monitor支持的编程语言。
2. 指定您本地的Java项目文件地址:
3. 指定您的Java项目文件夹内,您希望SourceMonitor计算哪些Java文件的环复杂度。
4. 点OK,就可以开始扫描啦。
很快Source Monitor就将我们指定的Java文件的环复杂度计算完毕。点击菜单“Display Method Metrics”来查看结果:
从环复杂度扫描结果能看出,明显第三种从月份名称集合里通过ArrayList自带的get方法取得月份名称是最优的解法——环复杂度仅为2。
也可以通过图表的方式更直观得看到方法的环复杂度比较:
X轴的值代表每个方法的环复杂度,Y轴代表这些环复杂度的不同值出现的次数。
比如下图的意思是,环复杂度为1的方法(X轴刻度为1的节点)共有4个(Y轴刻度为4),环复杂度为2的方法(X轴刻度为2的节点)有1个(Y轴刻度为1)。以此类推。
要获取更多Jerry的原创技术文章,请关注公众号"汪子熙"或者扫描下面二维码:
使用工具Source Monitor测量您Java代码的环复杂度相关推荐
- 如何计算并测量ABAP及Java代码的环复杂度Cyclomatic complexity
代码的环复杂度(Cyclomatic complexity,有的地方又翻译成圈复杂度)是一种代码复杂度的衡量标准,在1976年由Thomas J. McCabe, Sr. 提出. 在软件测试的概念里, ...
- 使用Source Monitor检测Java代码的环复杂度
Today I found a useful free software called "SourceMonitor" which can help to calculate an ...
- java source folder作用_java项目把源码放到folder里,不是source folder,这个java代码还能被调用吗?...
看到这个问题,真心觉得初学入门就用IDE真心不是一个好方法.IDE屏蔽了太多基础知识,比如Java是需要编译的,运行的是编译后的class文件.编译命令有编译参数,执行命令有执行命令的参数.还有环境变 ...
- java代码质量 圈复杂度,代码圈复杂度(Cyclomatic Complexity,CC)和Oclint工具 介绍...
什么是代码圈复杂度 圈复杂度是一种度量程序复杂度的方法,由 Thomas McCabe 于 1976年定义,用来衡量一个模块判定结构的复杂程度,数量上表现为独立路径条数,即合理的预防错误所需测试的最少 ...
- xml与java代码相互装换的工具类
2019独角兽企业重金招聘Python工程师标准>>> 这是一个java操作xml文件的工具类,最大的亮点在于能够通过工具类直接生成xml同样层次结构的java代码,也就是说,只要你 ...
- java代码混淆器proguard使用大法3种
ProGuard注意事项 1.反射调用类或者方法,可能失败 2.对外接口的类和方法,不要混淆 3.嵌套类 4.native方法 5.枚举类 https://www.guardsquare.com/en ...
- 常见的5种方式看保护java代码(java混淆器)
在java代码中往往包含着一些非常敏感的信息,有些关系到开发者的利益,有些可能因为使用环境不同而关系到软件用户的利益,于是,java程序是赤膊上阵还是全副武装这个现实问题就摆在了java开发人员的面前 ...
- 08从零开始学Java之记事本怎么编写Java代码?
作者:孙玉昌,昵称[ 一一哥],另外[ 壹壹哥]也是我哦 CSDN博客专家.万粉博主.阿里云专家博主.掘金优质作者 配套开源项目资料 GitHub地址: https://github.com/SunL ...
- windows下 Source Monitor代码度量工具的使用
windows下 Source Monitor代码度量工具的使用 引用链接: https://www.cnblogs.com/xuehanyu/p/4520965.html 1.总体介绍 Source ...
最新文章
- Bootstrap按钮
- C 入门 第八节 指针
- MFC Radio Button 使用 分组 RadioButton 用法
- Android Shape Drawable Resources
- windows 下安装wamp环境
- leetcode22. 括号生成
- Java中对象和引用的理解
- lamuda表达式 list移除空元素_java8 Lambda表达式遍历并移除元素,报错:ConcurrentModificationException的解决办法...
- Java对字符串进行的操作
- python 几何计算_计算几何-凸包算法 Python实现与Matlab动画演示
- 引入springboot的两种方式以及springboot容器的引入
- skyline软件体系及工作流程
- 【实战】还记得校内网么(人人网)?当年的同学都在哪?爬取一下就知道
- O2O商业模式目前的状态需看透什么?未来会呈现怎样的特征?
- 电脑调试UC浏览器,或者本机浏览器
- GNU开发工具——WireShark网络分析工具
- IT人,更应该要注意保养!!
- (OJ)Java面向对象-构造方法
- css雪碧图如何调整大小
- python字符串取某位_python
热门文章
- WebAPI(part5)--排他操作
- 回归素材(part7)--机器学习入门到实战-MATLAB实践应用
- 125KHz 100cm ID 读卡电路_智能卡制作频率13.25MHZ与125KHZ的区别
- SAP BTP SDK for iOS 介绍
- Angular单元测试fixture.detectChanges()
- SAP Spartacus Org Unit明细页面的设计原理
- Slack设置根据关键字自动提醒的小技巧
- SAP Spartacus支持的语言和货币单位的数据源
- 如何在Cloud for Customer overview UI上扩展新的按钮
- SAP GUI是如何启动本地安装的office word应用的