




已阅读5页,还剩11页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Findbugs使用简介Findbugs是一个在java程序中查找bug的程序,它查找bug模式的实例,也就是可能出错的代码实例,注意Findbugs是检查java字节码,也就是*.class文件。其实准确的说,它是寻找代码缺陷的,很多我们写的不好的地方,可以优化的地方,它都能检查出来。例如:未关闭的数据库连接,缺少必要的null check,多余的 null check,多余的if后置条件,相同的条件分支,重复的代码块,错误的使用了=,建议使用StringBuffer代替字符串连加等等。而且我们还可以自己配置检查规则(做哪些检查,不做哪些检查),也可以自己来实现独有的校验规则(用户自定义特定的bug模式需要继承它的接口,编写自己的校验类,属于高级技巧)。Findbugs是一个静态分析工具,它检查类或者JAR 文件,将字节码与一组缺陷模式进行对比以发现可能的问题。Findbugs自带检测器,其中有60余种Bad practice,80余种Correctness,1种 Internationalization,12种Malicious code vulnerability,27种Multithreaded correctness,23种Performance,43种Dodgy。Bad practice 坏的实践一些不好的实践,下面列举几个:HE: 类定义了equals(),却没有hashCode();或类定义了equals(),却使用Object.hashCode();或类定义了hashCode(),却没有equals();或类定义了hashCode(),却使用Object.equals();类继承了equals(),却使用Object.hashCode()。SQL:Statement 的execute方法调用了非常量的字符串;或Prepared Statement是由一个非常量的字符串产生。DE: 方法终止或不处理异常,一般情况下,异常应该被处理或报告,或被方法抛出。Correctness 一般的正确性问题可能导致错误的代码,下面列举几个:NP: 空指针被引用;在方法的异常路径里,空指针被引用;方法没有检查参数是否null;null值产生并被引用;null值产生并在方法的异常路径被引用;传给方法一个声明为NonNull的null参数;方法的返回值声明为NonNull实际是null。Nm: 类定义了hashcode()方法,但实际上并未覆盖父类Object的hashCode();类定义了tostring()方法,但实际上并未覆盖父类Object的toString();很明显的方法和构造器混淆;方法名容易混淆。SQL:方法尝试访问一个Prepared Statement的0索引;方法尝试访问一个ResultSet的0索引。UwF:所有的write都把属性置成null,这样所有的读取都是null,这样这个属性是否有必要存在;或属性从没有被write。Internationalization 国际化当对字符串使用upper或lowercase方法,如果是国际的字符串,可能会不恰当的转换。Malicious code vulnerability 可能受到的恶意攻击如果代码公开,可能受到恶意攻击的代码,下面列举几个:FI: 一个类的finalize()应该是protected,而不是public的。MS:属性是可变的数组;属性是可变的Hashtable;属性应该是package protected的。Multithreaded correctness 多线程的正确性多线程编程时,可能导致错误的代码,下面列举几个:ESync:空的同步块,很难被正确使用。MWN:错误使用notify(),可能导致IllegalMonitorStateException异常;或错误的使用wait()。No: 使用notify()而不是notifyAll(),只是唤醒一个线程而不是所有等待的线程。SC: 构造器调用了Thread.start(),当该类被继承可能会导致错误。Performance 性能问题可能导致性能不佳的代码,下面列举几个:DM:方法调用了低效的Boolean的构造器,而应该用Boolean.valueOf();用类似Integer.toString(1) 代替new Integer(1).toString();方法调用了低效的float的构造器,应该用静态的valueOf方法。SIC:如果一个内部类想在更广泛的地方被引用,它应该声明为static。SS: 如果一个实例属性不被读取,考虑声明为static。UrF:如果一个属性从没有被read,考虑从类中去掉。UuF:如果一个属性从没有被使用,考虑从类中去掉。Dodgy 危险的具有潜在危险的代码,可能运行期产生错误,下面列举几个:CI: 类声明为final但声明了protected的属性。DLS:对一个本地变量赋值,但却没有读取该本地变量;本地变量赋值成null,却没有读取该本地变量。ICAST: 整型数字相乘结果转化为长整型数字,应该将整型先转化为长整型数字再相乘。INT:没必要的整型数字比较,如X = Integer.MAX_VALUE。NP: 对readline()的直接引用,而没有判断是否null;对方法调用的直接引用,而方法可能返回null。REC:直接捕获Exception,而实际上可能是RuntimeException。ST: 从实例方法里直接修改类变量,即static属性。1、和Ant配合使用从/downloads.html下载最新版本的Findbugs,目前的版本是1.3.0, 于2007年11月8日发布。把解压后目录复制到项目的lib目录下,然后就可以和Ant配合使用了。FindBugs工作在j2se1.4.0或以后的版本中,需要至少256MB内存。在Ant脚本中,首先定义Findbugs的解压目录位置:接着声明Findbugs任务:然后建立Findbugs任务:最后运行ant findbugs即可。2、Eclipse插件在Eclipse当中安装Findbugs插件和安装CheckStyle一样,可以参照以下五个步骤进行:a. 在Eclipse当中分别打开一下菜单 Help-Software Updates-Find and Installb. 选择 Search for new features to install 选项然后点击 Nextc. 新建一个 New Remote Site.d. 输入名称(比如:Findbugs Plug-in)和下面的URL:/eclipsee. 开始安装安装好Findbugs以后,选择Windows - Show View - Other - FindBugs - BugDetails打开Bug Details视图。然后在Package Explorer或Navigator视图中,选中你的Java项目,点击右键,可以看到“Find Bugs”菜单项,子菜单项里有“Find Bugs”和“Clear Bug Markers”两项内容。我们点中“Find Bugs”,运行结束后可以在Problems中看到增加了如下的警告信息内容。(图略)FindBugs运行后的警告信息内容不仅在Problems视图中显示,而且将标记在源代码标记框中,在源代码编辑器中我们可以看到警告标识, 当光标指向你的警告信息的代码上面时,就会有相应的错误提示信息,与Eclipse本身的错误或警告信息提示类似。选中Problems视图里出现的相应问题,就会在代码编辑器里切换到相应的代码上去,方便根据相应的提示信息进行代码的修改。在Problems视图里,选中相应的问题条目,右键,在弹出的菜单中,可以看到“Show Bug Details”。点中它,会切换到Bug Details视图上去,显示更加详细的提示信息。当然,在代码编辑窗口中,点击带有警告提示信息的图标时,也会自动切换到Bug Details窗口去,查看详细的警告信息。选择你的项目,右键点击 Properties,选择 FindBugs可以配置Findbugs的一些选项。3、 使用过滤器使用过滤器我们就可以定义使用哪些bug检测器和针对哪些类进行检查,因为一旦项目比较庞大,那查看冗长的bug报告也是十分痛苦的事情。使用过滤器,过滤器用来包含或排除特殊的bug报告。这样做有助于在特定的时间段内,聚焦我们的关注点。过滤器实际是在一个xml文件定义的,xml配置文件的内容如下: 4、Findbugs过滤器的一些元素讲解: 官方网站:/Eclipse插件:/插件管理技巧提示:新下载的插件PlugIn一定不要都放在原始的Eclipse目录下去。前提是你已经安装好了Eclipse工具了,比如安装在E:OpenSourceEclipse目录下,以下这个目录以%ECLIPSE_HOME%来进行表示; 此时默认的插件是在%ECLIPSE_HOME%plugins目录中的; 在%ECLIPSE_HOME%下建立一个PlugInsNew的目录;比如:E:OpenSourceEclipsePlugInsNew 你下载了个新的插件,比如叫做:XYZ 那么就在%ECLIPSE_HOME%PlugInsNew目录下建立XYZ目录,目录里面是eclipse目录,eclipse目录包含有features与plugins两个子目录;结构如下图所示:把下载的新插件的文件放在以下相应目录中 %ECLIPSE_HOME%PlugInsNewXYZeclipsefeatures%ECLIPSE_HOME%PlugInsNew XYZeclipseplugins建立相关的.link的文件 然后在%ECLIPSE_HOME%links目录里建立一个XYZ.link的文件 内容如是:path=E:/OpenSource/Eclipse/PlugInsNew/XYZ就一行这样的路径指示而已。 当然,采用相对路径来表示可能更直观一些,方便进行文件整体移动和小组全部成员的共享命名用,省得移动后要改动Link文件里的绝对路径而费心费力。直接拷贝过去就可以使用。 即XYZ.link文件的内容如是:path=./PlugInsNew/XYZ 这样,如果你下载了多个插件就可以如法炮制建立多个Link文件,想加载哪个插件就把哪个插件的Link文件放到%ECLIPSE_HOME%links的目录中即可,使用与管理都很方便,建议千万不要放在默认的安装目录中; 如果你的%ECLIPSE_HOME%与此不同,请修改XYZ.link文件里的路径删除,关闭Eclipse 删除%ECLIPSE_HOME%linksXYZ.link文件即可 删除%ECLIPSE_HOME%PlugInsNewXYZ整个目录及文件重新启动Eclipse即可 使用重新启动Eclipse后,在Help = About Eclipse SDK = Plug-in Details你可以看到由“FindBugs Project”提供的“FindBugs Plug-in”版本0.0.17插件,如下图所示:FindBugs的使用方法FindBugs是一个可以在Java程序中发现Bugs的程序。 它是专门用来寻找处于“Bug Patterns”列表中的代码的。 Bug Patterns指很有可能是错误的代码的实例。目前FindBugs最高版本0.9.4,不过更新速度很快的,你应当经常上去看看是否有新版本发布。Eclipse plugin for FindBugs最高版本0.0.17。系统要求使用FindBugs至少需要JDK1.4.0以上版本,FindBugs是平台独立的,可以运行于GNU/Linux、Windows、MacOS X等平台上。运行FindBugs至少需要有256 MB内存,如果你要分析一个很大的项目,那就需要更加多的内存了。FindBugs独立运行和与Ant结合的详细操作就不介绍了,可以看官方的文档/manual/独立运行的效果图如下:本文主要介绍在Eclipse中使用的情况打开Bug Details视图Windows = Show View = Other = FindBugs = BugDetails在Package Explorer或Navigator视图中,选中你的Java项目,右键,可以看到“Find Bugs”菜单项,子菜单项里有“Find Bugs”和“Clear Bug Markers”两项内容,如下图所示:我们建立一个简单的测试文件Test.java 内容如下: public class Test private String name; public String getName() return name; public void setName(String name) = name; 我们点中“Find Bugs”,运行时会出现如下进度框:运行结束后可以在Problems中看到增加了如下的警告信息内容FindBugs运行后的警告信息内容不仅在Problems视图中显示,而且将标记在源代码标记框中,在源代码编辑器中我们可以看到警告标识,如下图: 当光标指向你的警告信息的代码上面时,就会有相应的错误提示信息,与Eclipse本身的错误或警告信息提示类似。 选中Problems视图里出现的相应问题,就会在代码编辑器里切换到相应的代码上去,方便根据相应的提示信息进行代码的修改。 在Problems视图里,选中相应的问题条目,右键,在弹出的菜单中,可以看到“Show Bug Details”,如下图所示:点中它,会切换到Bug Details视图上去,显示更加详细的提示信息。当然,在代码编辑窗口中,点击带有警告提示信息的图标时,也会自动切换到Bud Details窗口去,查看详细的警告信息,如下图所示。根据这里详细的信息,你可以得到FindBugs为什么会对你的代码报警告信息,及相应的处理办法,根据它的提示,你可以快速方便地进行代码修改。根据提示,我们将代码修改成如下,再运行就不会报有警告信息了。public class Test private String name; public String getName() String temp = name; return temp; public void setName(String name) String temp = name; = temp; 配置FindBugs选择你的项目,右键 = Properties = FindBugs =可以配置的信息包括如上图所示的四个选项的相关设置:Run FindBugs Automatically开关 当此项选中后,FindBugs将会在你修改Java类时自动运行,如你设置了Eclipse自动编译开关后,当你修改完Java文件保存,FindBugs就会运行,并将相应的信息显示出来。 当此项没有选中,你只能每次在需要的时候自己去运行FindBugs来检查你的代码。 Minimum priority to report选择项 这个选择项是让你选择哪个级别的信息进行显示,有Low、Medium、High三个选择项可以选择,很类似于Log4J的级别设置啦。 比如: 你选择了High选择项,那么只有是High级别的提示信息才会被显示。 你选择了Medium选择项,那么只有是Medium和High级别的提示信息才会被显示。 你选择了Low选择项,那么所有级别的提示信息都会被显示。Enable bug categories选择项 在这里是一些显示Bug分类的选择: Correctness关于代码正确性相关方面的 Performance关于代码性能相关方面的 Internationalization关于代码国际化相关方面的 Multithreaded correctness关于代码多线程正确性相关方面的Style关于代码样式相关方面的Malicious code vulnerability关于恶意破坏代码相关方面的 比如:如果你把Style的检查框去掉不选择中它,那么与Style分类相关的警告信息就不会显示了。其它的类似。Select bug patterns to check for选择项 在这里你可以选择所要进行检查的相关的Bug Pattern条目 可以从Bug codes、Detector name、Detector description中看到相应的是要检查哪些方面的内容,你可以根据需要选择或去掉相应的 检查条件。 总结 此插件的功能很不错,可以帮助我们提升Java代码的编写能力,写出更加安全可靠的代码。建议使用或加在Ant里进行持续构建。 现在,你可以马上拿出你已经开发的一个项目,检查一下你的代码有没有问题了 目录回到顶部引子 案例介绍. 1 第1章 自动化测试入门 7 1.1 初识自动化测试 8 1.2 自动化测试和手工测试有什么不同 13 1.3 什么是自动化测试 15 1.4 自动化测试的引入 16 1.5 如何选择合适的测试工具 23 1.6 小结 31 第2章 自动化测试的原理 33 2.1 代码分析 34 2.2 GUI对象识别 41 2.3 DOM对象识别 44 2.4 脚本技术 48 2.5 自动比较技术 53 2.6 小结 55 第3章 莫问剑Selenium的Web功能测试 57 3.1 Selenium概述 58 3.2 Selenium Test Tunner 66 3.3 Selenium Core扩展及其应用 72 3.4 Selenium RC使用 81 .3.5 Selenium Grid部署及其应用 90 3.6 小结 96 第4章 游龙剑AutoIT实施功能测试 97 4.1 AutoIT简介 98 4.2 AutoIT脚本的语法特征 100 4.3 如何使用AutoIT 完成单机测试 102 4.4 如何使用AutoIT完成多机交互测试 111 4.5 测试报告 115 4.6 小结 118 第5章 舍神剑JMeter的性能测试 119 5.1 JMeter简介 120 5.2 脚本录制 124 5.3 JMeter的脚本开发 131 5.4 复杂的分布式大规模压力测试 134 5.5 数据库性能测试 137 5.6 借助Ant进行批量测试和报表生成
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 元模型驱动的服务编排-洞察及研究
- 调味品绿色包装材料-洞察及研究
- 天王星重力场分析-洞察及研究
- 智能制造系统中的人机协作机制研究-洞察及研究
- 跨地域协同制作-洞察及研究
- GB/T 3810.20-2025陶瓷砖试验方法第20部分:陶瓷砖曲率半径计算中挠度的测定
- 四川省成都市天府新区九级2026届数学七年级第一学期期末经典模拟试题含解析
- 海南2025年中国热带农业科学院椰子研究所第二批招聘(第1号)笔试历年参考题库附带答案详解
- 河南河南省第三人民医院(河南省职业病医院)2025年招聘3名高层次人才笔试历年参考题库附带答案详解
- 2025年鹤壁市面向社会招聘看护队员30名模拟试卷及完整答案详解1套
- 2024-2025学年江苏省苏州市高二上册10月月考数学学情检测试题
- 2025年度会计代理记账机构员工劳动合同范本
- 《慢性肾脏病相关心肌病综合管理中国专家共识(2024版)》解读
- 牛津译林版九年级英语上学期期中热点题型专练刷题03名校选词填空20篇(原卷版+解析)
- DB11T 2032-2022 工程建设项目多测合一技术规程
- 中小学教师职称评审讲课答辩英语学科全英答辩题目汇编(附汉语翻译)
- HG∕T 5087-2016 2,6-二叔丁基苯酚
- (完整)马克思主义政治经济学习题及参考答案
- 大规模模型蒸馏技术
- 12、口腔科诊疗指南及技术操作规范
- 我的家乡-枣阳
评论
0/150
提交评论