Eclipse 插件 FindBugs 使用手册
findbugs在eclipse中的安装及使用
Findbugs在eclipse中的安装及使用
1Findbugs插件安装与使用
1.1插件安装
1)点击eclipse菜单栏Help->Eclipse Marketplace搜索关键字findbugs,搜索到插件并点击安装即可,如下图:
2)安装完毕后,点击重启eclipse
1.2使用
1)添加findbugs explorer:选择window->show view->other,选择Bug Exploer,点击“ok”
2)选择要检查的项目,选择project->Build project进行编译
3)选择整个项目或者选择指定的包或者类进行findbug:右键,选择Find Bugs->Find Bugs (之前最好先Clear Bug Markers),此时findbugs会遍历指定的包或者类,进行分析,找出代码bug,然后集中显示在find bugs的bugs explorer 中。
4)在Bug Explorer中能看到检查出来的bug,双击bug就可以在编辑窗口自动打开相关代
码文件并连接到代码片段。
1.3Bug说明
找出的bug有3中颜色,黑色的臭虫标志是分类,红色的臭虫表示严重bug发现后必须修改代码,橘黄色的臭虫表示潜在警告性bug 尽量修改。
eclipse代码缺陷查找插件findbugs的使用
静态分析工具承诺无需开发人员费劲就能找出代码中已有的缺陷。
当然,如果有多年的编写经验,就会知道这些承诺并不是一定能兑现。
尽管如此,好的静态分析工具仍然是工具箱中的无价之宝。
在这个由两部分组成的系列文章的第一部分中,高级软件工程师Chris Grindstaff 分析了FindBugs 如何帮助提高代码质量以及排除隐含的缺陷。
代码质量工具的一个问题是它们容易为开发人员提供大量但并非真正问题的问题——即伪问题(false positives)。
出现伪问题时,开发人员要学会忽略工具的输出或者放弃它。
FindBugs 的设计者David Hovemeyer 和William Pugh 注意到了这个问题,并努力减少他们所报告的伪问题数量。
与其他静态分析工具不同,FindBugs 不注重样式或者格式,它试图只寻找真正的缺陷或者潜在的性能问题。
FindBugs 是什么?FindBugs 是一个静态分析工具,它检查类或者JAR 文件,将字节码与一组缺陷模式进行对比以发现可能的问题。
有了静态分析工具,就可以在不实际运行程序的情况对软件进行分析。
不是通过分析类文件的形式或结构来确定程序的意图,而是通常使用Visitor 模式(请参阅参考资料)。
图 1 显示了分析一个匿名项目的结果(为防止可怕的犯罪,这里不给出它的名字):在FindBugs的GUI中,需要先选择待扫描的.class文件(FindBugs其实就是对编译后的class 进行扫描,藉以发现一些隐藏的bug。
)。
如果你拥有这些.class档对应的源文件,可把这些.java文件再选上,这样便可以从稍后得出的报告中快捷的定位到出问题的代码上面。
此外,还可以选上工程所使用的library,这样似乎可以帮助FindBugs做一些高阶的检查,藉以发现一些更深层的bug。
选定了以上各项后,便可以开始检测了。
检测的过程可能会花好几分钟,具体视工程的规模而定。
检测完毕可生成一份详细的报告,藉由这份报告,可以发现许多代码中间潜在的bug。
FindBugs错误修改中文说明大全
45.
46.
47.
48.
49.
在一个JUnit类中声明的一个suite()方法必须声明为
public static junit.framework.Test suite()
或者
public static junit.framework.TestSuite suite()的形式。
50.
集合本身作为add方法的参数,这样会引起容溢出。
27.
28.
29.
30.
Eq: Covariant equals() method defined for enum (EQ_DONT_DEFINE_EQUALS_FOR_ENUM)
This class defines an enumeration, and equality on enumerations are defined using object identity. Defining a covariant equals method for an enumeration value is exceptionally bad practice, since it would likely result in having two different enumeration values that compare as equals using the covariant enum method, and as not equal when compared normally. Don't do it.
In rare cases, people do define nonsymmetrical equals methods and still manage to make their code work. Although none of the APIs document or guarantee it, it is typically the case that if you check if a Collection<String> contains a Foo, the equals method of argument (e.g., the equals method of the Foo class) used to perform the eq现方式做保护处理对用户上传分享的文档内容本身不做任何修改或编辑并不能对任何下载内容负责
FindBugs使用手册教案资料
文件编号:配置项编号:FindBugs使用手册文档版本号V 1.0农信银资金清算中心创新研发部文档修订记录目录1、FindBugs简介 (3)2、FindBugs的检查规则 (4)2.1Correctness(正确性) (4)2.2 Bad practice(不良实践) (5)2.3 Performance(性能) (5)2.4Multithreaded correctness(多线程正确性) (6)2.5 Dodgy(不可靠) (7)3、FindBugs使用 (8)3.1安装FindBugs (8)3.2配置FindBugs (8)3.3使用FindBugs (8)1、FindBugs简介FindBugs是用于java代码检查的一种静态分析工具,它检查类或者JAR 文件,将字节码与一组缺陷模式进行对比以发现可能的问题。
有了静态分析工具,就可以在不实际运行程序的情况对软件进行分析。
FindBugs专注于找出潜在程序错误,而不是编码风格问题,目的在于提高程序的健壮性。
2、FindBugs的检查规则FindBugs提出了超过200种规则,这些规则可主要分为如下类别:2.1Correctness(正确性)这些问题涉及到可能在某些方面不正确的代码。
如:代码有无限递归,或者读取为写入的字段,这类问题几乎无疑是程序的错误。
例1:使用未初始化的类成员,可能导致NullPointException代码:FindBugs检测结果:例2:不使用方法的返回值代码:FindBugs检测结果:2.2Bad practice(不良实践)这类问题明确违反建议的编程标准。
如:删除异常,或未关闭文件,或未数据库连接资源等。
例3:未关闭打开的文件输出流资源代码:FindBugs检测结果:2.3Performance(性能)这类规则的目的在于检测潜在的性能问题。
如:代码创建了不需要的对象,或者在循环中使用字符串连接而不是使用StringBuffer。
FindBugs安装及配置使用说明
FindBugs插件安装及配置使用说明目录FindBugs插件安装及配置使用说明 (1)用途 (1)安装 (1)配置 (2)运行 (3)其他说明 (8)额外收获 (10)用途FindBugs 是一个java bytecode静态分析工具,它可以帮助java工程师提高代码质量以及排除隐含的缺陷,以期尽可能在项目的初始阶段将代码问题解决。
FindBugs检查类或者JAR 文件,将字节码与一组缺陷模式进行对比以发现可能的问题。
有了静态分析工具,就可以在不实际运行程序的情况对软件进行分析。
FindBugs不是通过分析类文件的形式或结构来确定程序的意图,而是通常使用Visitor 模式进行分析。
安装1.打开eclipse.Help > Software Updates ->Find and Install.选择Search for new features to install.>next> New Remote Site…在对话框里填写如下:Name: findbugs.URL: /eclipse>确定选中findbugs>Finish2. 在新出来的对话框中,选中findbugs(注意: 此时如果装了Myeclipse插件, 这里可能会报错. 请先在eclipse的links文件夹下面将Myeclipse的link文件移除, 然后等findbugs装完之后, 再将Myeclipse的link文件放进来)>next选中”I accept the terms in the license agreement”>Next>Finish>Install>Yes (重启eclipse)findbugs 安装完成配置1.打开FindBugs视图:Windows => Show View => Other… => FindBugs => Bug Info 、Bug Explorer、Bug Reviews2.配置FindBugs 选择你的项目=>右键=> Properties => FindBugs => 选中”runfindbugs automatically”=> OKFindbugs各项属性的配置说明:Run Findbugs automnaticaly:编译工程和文件的时候自动运行Minimum priority to report:根据bug的优先权级别报告bug。
findbugs
FingBugs1.Run FindBugs Automatically开关当此项选中后,FindBugs将会在你修改Java类时自动运行,如你设置了Eclipse自动编译开关后,当你修改完Java文件保存,FindBugs就会运行,并将相应的信息显示出来。
当此项没有选中,你只能每次在需要的时候自己去运行FindBugs来检查你的代码。
2.Minimum priority to report选择项这个选择项是让你选择哪个级别的信息进行显示,有Low、Medium、High三个选择项可以选择,很类似于Log4J的级别设置啦。
比如:你选择了High选择项,那么只有是High级别的提示信息才会被显示。
你选择了Medium选择项,那么只有是Medium和High级别的提示信息才会被显示。
你选择了Low选择项,那么所有级别的提示信息都会被显示。
3.Enable bug categories选择项在这里是一些显示Bug分类的选择:Correctness关于代码正确性相关方面的Performance关于代码性能相关方面的Internationalization关于代码国际化相关方面的Multithreaded correctness关于代码多线程正确性相关方面的Style关于代码样式相关方面的Malicious code vulnerability关于恶意破坏代码相关方面的比如:如果你把Style的检查框去掉不选择中它,那么与Style分类相关的警告信息就不会显示了。
其它的类似。
4.Select bug patterns to check for选择项在这里你可以选择所要进行检查的相关的Bug Pattern条目可以从Bug codes、Detector name、Detector description中看到相应的是要检查哪些方面的内容,你可以根据需要选择或去掉相应的检查条件。
找出的bug有3中颜色,黑色的臭虫标志是分类,红色的臭虫表示严重bug发现后必须修改代码,橘黄色的臭虫表示潜在警告性bug 尽量修改。
Eclipse插件FindBugs安装使用说明
FindBugs 安装使用FindBugs是个专门用来发现Java代码中的Bug的Eclipse小插件,与Eclipse无缝结合,可以实现敲入代码、保存文件、编译时即时反馈给用户Bug信息,比Eclipse自带的Java Bug 管理功能要强。
FindBugs一共有三个版本,除过Eclipse插件板本外,还提供一个独立版本的Java程序(基于SWing)和一个Ant Task版本;下面介绍Eclipse的插件版。
一、安装打开MyEclipse 的help -> SoftWave Updates -> Find and Install如图:点击next在下图中,点击New Remote site,在弹出的窗口中输入Name:findBugs,URL:/eclipse点击ok然后按下图操作。
点击完成最后按提示安装。
二、配置在工程栏选中一个项目,按Alt + Enter 键三、使用1、对项目使用findBugs选中项目,如下图操作:点击Find Bugs后,findBugs会查找整个项目的bug。
之后,如图操作:在弹出的窗口,如图操作:最后,窗口会按bug的高低级别显示程序bug:2、在编写代码时使用findBugs编写代码时,findBugs会查找bug,并给有bug行一个爬虫logo标示,如下图:点击爬虫图标会显示具体的bug,如下图:Findbugs缺陷描述: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()。
Findbugs使用文档
目录一、FindBugs 是什么? (2)二、FindBugs 安装 (3)三、Bug类型注意事项 (6)一、FindBugs 是什么?FindBugs 是一个静态分析工具,它检查类或者JAR 文件,将字节码与一组缺陷模式进行对比以发现可能的问题。
有了静态分析工具,就可以在不实际运行程序的情况对软件进行分析。
在FindBugs的GUI中,需要先选择待扫描的.class文件(FindBugs其实就是对编译后的class进行扫描,藉以发现一些隐藏的bug)。
如果你拥有这些.class对应的源文件,可把这些.java文件再选上,这样便可以从稍后得出的报告中快捷的定位到出问题的代码上面。
此外,还可以选上工程所使用的library,这样似乎可以帮助FindBugs做一些高阶的检查,藉以发现一些更深层的bug。
选定了以上各项后,便可以开始检测了。
检测的过程可能会花好几分钟,具体视工程的规模而定。
检测完毕可生成一份详细的报告,藉由这份报告,可以发现许多代码中间潜在的bug。
比较典型的,如引用了空指针(null pointer dereference), 特定的资源(db connection)未关闭,等等。
如果用人工检查的方式,这些bug可能很难才会被发现,或许永远也无法发现,直到运行时发作…当除掉了这些典型的(classic) bug后,可以确信的是,我们的系统稳定度将会上一个新的台阶。
二、FindBugs 安装1.进入Eclipse菜单Help→Install New Software,添加站点信息如下:站定地址:/eclipse,安装完毕后重启Eclipse。
2.进入Eclipse菜单Window→Show view→Other,选择Bug Explorer,在主界面上显示bug信息,如下图3.选择需要检查代码错误的目录,比如src目录,在右键菜单里选择Find Bugs FindBugs,插件将自动扫描src目录下面的java文件,寻找bug,需要耗时一段时间,检查结果显示在Bug Explorer窗口下。
FindBugs安装及使用说明
FindBug安装及使用说明目录1.简介 (3)1.1说明 (3)1.2环境要求 (3)1.3注意事项 (3)2.FINDBUGS安装 (3)2.1在线安装 (3)2.2离线安装 (9)3.FINDBUGS使用 (10)3.1F IND B UGS操作 (10)3.2F IND B UGS常见故障模式 (11)3.2.1NP_NULL_ON_SOME_PATH: Possible null pointer dereference (11)3.2.2DLS_DEAD_LOCAL_STORE: Dead store to local variable (11)3.2.3BX_BOXING_IMMEDIATELY_UNBOXED: Primitive value is boxed and then immediately unboxed .. 123.2.4DM_NUMBER_CTOR: Method invokes inefficient Number constructor; use static valueOf instead 123.2.5Cloneable Not Implemented Correctly (CN) (12)3.2.6OBL_UNSATISFIED_OBLIGATION: Method may fail to clean up stream or resource (12)3.2.7Double Checked Locking (DC) (13)3.2.8Dropped Exception (DE) (14)3.2.9Suspicious Equals Comparison (EC) (14)3.2.10Bad Covariant Definition of Equals (Eq) (15)3.2.11Equal Objects Must Have Equal Hashcodes (HE) (15)3.2.12Static Field Modifiable By Untrusted Code (MS) (15)3.2.13Null Pointer Dereference (NP), Redundant Comparison to Null (RCN) (16)3.2.14Non-Short-Circuit Boolean Operator (NS) (17)3.2.15Open Stream (17)3.2.16Read Return Should Be Checked (RR) (17)3.2.17Return Value Should Be Checked (RV) (18)3.2.18Non-serializable Serializable class (SE) (18)3.2.19Uninitialized Read In Constructor (UR) (18)3.2.20Unconditional Wait (UW) (19)3.2.21Wait Not In Loop (Wa) (19)1.简介1.1说明FindBugs 是一个java bytecode静态分析工具,它可以帮助java工程师提高代码质量以及排除隐含的缺陷。
跟我学Java代码质量检测FindBugs工具——如何应用FindBugs工具静态分析和检查代码中的错误
1.1跟我学Java代码质量检测FindBugs工具——如何应用FindBugs工具静态分析和检查代码中的错误1.1.1在Eclipse开发工具中应用FindBugs工具静态分析和检查代码中的错误1、为什么要使用FindBugs工具检测和发现编程早期的缺陷对于这个问题的回答,可以引用一句生活中的俗语来说明——“治病不如防病”!尽管开发人员在编写并完成了软件系统中的各个功能类的代码后,同时也完成了单元测试和集成等方面的测试,但这些测试也只能检测系统中的各种功能是否满足要求,而不能发现出编程开发中的代码是否规范、以及是否存在“潜在”和“隐藏”的缺陷。
而这些缺陷在以后的系统升级和维护过程中,将有可能会“暴露”或者“转变”为错误。
隐藏在软件系统中的这些“缺陷代码”如果是遗留到在软件系统运行的过程中才被发现出,然后再进行相应的修改和完善的代价就会非常高。
J2EE开源领域中的FindBugs等代码检查工具,可以辅助开发人员及早地发现出项目中不规范的代码、乃至隐藏的缺陷。
因此,FindBugs代码检查工具不仅提升了开发人员的代码质量,也在一定的程度上提高了软件系统的可靠性。
2、在FindBugs官方网站中提供有FindBugs检测工具的在线帮助文档读者可以在/manual/index.html网页中在线浏览FindBugs 检测工具的在线帮助文档信息。
3、在FindBugs官方网站中提供有在应用FindBugs工具时的FAQ文档信息读者可以在/FAQ.html网页中在线浏览在FindBugs官方网站中提供有在应用FindBugs工具时的FAQ文档信息。
4、启用FindBugs检测工具的视图为了能够在Eclipse工具中及时地观看到FindBugs检测工具的检测结果信息,可以启用FindBugs检测工具的视图。
只需要通过选择【Windows】菜单中的【Show View】子菜单,然后再进一步选择其中的【Other…】子菜单。
myeclipse,eclipse插件之FindBugs_静态分析工具
myeclipse 、eclipse插件之FindBugs (静态分析工具)
作者:轻描淡写
介绍:
FindBugs概念/view/2367937.htm
FindBugs主页/
FindBugs手册/manual/index.html
作者主页:
为什么要使用FindBugs
FindBugs 是一个静态分析工具,它检查类或者JAR 文件,将字节码与一组缺陷模式进行对比以发现可能的问题。
本文只介绍findbugs在myeclipse eclipse中的用法
findbugs2.0.1
安装:
1.下载插件进入下载页面/downloads.html
选择
进入/projects/findbugs/files/
选择
点击Download findbugs-2.0.1-rc2.zip (8.3 MB)
2.,.解压下载文件edu.umd.cs.findbugs.plugin.eclipse_2.0.0.20111220.zip ,并放入plugins 插件文件夹(进入myeclipse 、eclipse目录找到plugins文件夹)
3.重新打开myeclipse 、eclipse就OK!!
4.检查是否安装成功
选中某个项目,右键,在export下有FindBugs 点击Find Bugs 开始分析ing!!可能分析需要一段时间还是去喝杯咖啡吧!!!
分析完毕弹出如下对话框请点YES !!!
进入Bug Explorer 界面、点击黑色虫子在点击内部的对应的类即可看到代码中潜在的问题就会标识出来了(黄色虫子部分)
鼠标放在小虫上的话,会给出原因!!!!。
FindBugs的使用
FindBugs的使用1 FindBugs简介FindBugs是一个静态分析工具,它检查类或者JAR文件,将字节码与一组缺陷模式进行对比以发现可能的问题。
有了静态分析工具,就可以在不实际运行程序的情况对软件进行分析。
FindBugs有几种,有的为单机程序版,有的为与Eclipse 相结合的插件版,等等。
本文介绍的就是Java程序员最喜欢的插件版。
2 FindBugs的安装在网上下载FindBugs插件,解压后,直接将解压后的文件(edu.umd.cs.findbugs.plugin.eclipse_3.0.1.20150306-5afe4d1)放到eclipse的dropins目录,然后重启eclipse即可。
右键点击项目,看到Find Bugs出现就可以了。
3 FindBugs在Eclipse的使用在需要静态检查的项目上点击右键,按照上图所示,点击Find Bugs,等待静态检查进度完成。
小瓢虫所在位置即为问题代码所在位置。
检测出的bugs可以到《详解FindBugs的各项检测器》中查找对应原因。
4 FindBugs可以检测的内容FindBugs提供了35个检测器来检测字节码中可能的缺陷。
其可以做的事情主要有:4.1 找出hash equals不匹配找与equals()和hashCode()的实现相关的几个问题。
这两个方法非常重要,因为几乎所有基于集合的类---List、Map、Set等都调用它们。
一般来说,这个检测器寻找两种不同类型的问题:①当一个类重写对象的equals()方法,但是没有重写它的hashCode方法,或者相反的情况时。
②定义一个co-variant版本的equals()或compareTo()方法。
例如,Bob类定义其equals()方法为布尔equals(Bob),它覆盖了对象中定义的equals()方法。
因为Java代码在编译时解析重载方法的方式,在运行时使用的几乎总是在对象中定义的这个版本的方法,而不是在Bob中定义的那一个(除非显式将equals()方法的参数强制转换为Bob类型)。
用Eclipse自带插件创建自定义findbugs检测器
用Eclipse自带插件创建findbugs的检测器1.准备工作1.1.为Eclipse安装插件插件1:ByteCode下载地址:http://andrei.gmxhome.de/eclipse/用法:在Eclipse菜单栏上单击windows->show view->other…->Java->Bytecode即可打开Bytecode窗口,方便查看当前文件的字节码,效果如图1所示。
图1插件2:Findbugs下载地址:/eclipse用法:在Eclipse菜单栏上单击windows->show view->other…->Findbugs->Bug Explorer即可打开Bug Explorer窗口,进入Findbugs浏览状态,效果如图2所示。
图21.2.以下操作需要用的软件(可选)为了操作方便,建议使用winRAR用来打开jar文件;使用Notepad++打开xml 文件2.创建自己的Findbugs检测器2.1.编写自定义的检测器Detector项目中需要引入Findbugs的jar文件:findbugs.jar自定义的检测器需要继承OpcodeStackDetector,重写其sawOpcode方法。
下面这个检查器Detector用来查找项目中有没有System.out和System.error情况出现。
package edu.umd.cs.findbugs.detect;import org.apache.bcel.classfile.Code;import edu.umd.cs.findbugs.BugInstance;import edu.umd.cs.findbugs.BugReporter;import edu.umd.cs.findbugs.bcel.OpcodeStackDetector;/*** @author判断System.out和System.error这种情况*/public class ForbiddenSystemOutClass extends OpcodeStackDetector { BugReporter bugReporter;public ForbiddenSystemOutClass(BugReporter bugReporter) {this.bugReporter = bugReporter;}/*** visit方法,在每次进入字节码方法的时候调用在每次进入新方法的时候清空标志位*/@Overridepublic void visit(Code obj) {super.visit(obj);}/*** 每扫描一条字节码就会进入sawOpcode方法** @param seen 字节码的枚举值*/@Overridepublic void sawOpcode(int seen) {if (seen == GETSTATIC) {if (getClassConstantOperand().equals("java/lang/System")// get class mapping&& (getNameConstantOperand().equals("out") // get static field mapping|| getNameConstantOperand().equals("err"))) {BugInstance bug = new BugInstance(this, "CHECK_SYSTEMCLASS",NORMAL_PRIORITY).addClassAndMethod(this).addSourceLine(this, getPC());bug.addInt(getPC());bugReporter.reportBug(bug);}}}}文件1:自定义检测器ForbiddenSystemOutClass.java接下来找到Eclipse编译的ForbiddenSystemOutClass.class文件,一般在项目的lib目录里可以找到。
FindBugs_简明教程
FindBugs 简明教程前言:本文重点在FindBugs的入门使用相关的介绍内容请看本文后面的推荐链接FindBugs的使用入门下面将介绍2种方式利用FindBugs去自检代码第一种适用于Eclipse下开发的应用程序第二种适用于Framework层的局部代码准备方面a.FingBugs Eclipse plug-in/eclipseb.FindBugs tools with Swing Interface/findbugs/findbugs-1.3.9.zip?download 1.使用步骤2.1Eclipse下安装FindBugs plug-in1)点击Install New Software 进行安装2)点击Add之后在弹出的地址框中填入FindBugs Plug-in的地址3)将FindBugs Feature勾选并点击Next4)猛点Next5)勾选accept 并点击Finish6)Waiting…7)点击OK8)安装成功后提示重启Eclipse,点击Restart Now2.2Eclipse下使用FindBugs, 在此使用ApiDemo为例1)右键点击工程,点击FindBugs2)FindBugs分析完成后自动跳转到Bug Explorer. 点击一个Bug自动定位到代码行,然后点击代码行最左端的”Bugs”,在Properties中显示该Bug的详细情况建议修改的方式等等(自动生成的R文件相关的可略过)3)点击Windows->Preferences->Java->FindBugs 可配置FindBugs自检规则4)自检完成后可将FindBugs结果以xml的形式保存下来作为凭证2.3利用FindBugs tool自检(适用于局部代码自检例如framework修改的代码在此举例)1)下载FindBugstools with Swing Interface 并解压点进bin下的findbugs.bat2) 将待检代码文件及对应的class文件准备好并导入并点击完成这里拿AbsListView.java举例将out\target\common\obj\JAVA_LIBRARIES\framework_intermediates\classes.jar 中有关AbsListView的class都拿出来包括内部类3)根据分析结果定位到代码进行修改下面有相关的Bug行数及方法名及变量名2.4运用Findbugs 命令行的方式检查指定的类或者jar命令行常用命令:$FINDBUGS_HOME $/bin/findbugs -textui [options…] <Jar or class file path>Options:-low (Report all bugs)-medium (Report medium and high priority bug. This is the default setting.)-high (Report only high priority bugs.)-xml (Produce the bug reports as XML)-help (displays help information for the FindBugs command line user interface)利用基本基本命令去检查会在命令行中打印每个Bug的信息以行为单位使用了-xml 参数后打印的是xml报告可以将其导入Fingbugs plug-in或者Swing GUI中查看使用命令行的时候为了方便查看及保存可以把结果重定向到文本中FindBugs推荐资料IBM-FindBugs详细说明/developerworks/cn/java/j-findbug1//developerworks/cn/java/j-findbug2/FindBugs官网/Baidu百科FindBugs/view/2367937.htm。
FindBugs错误分析说明
FindBugs 错误修改指南版本号 修改描述 作者 日期1.0 新建 cantellow 2011-5-241.1 补充英文标识及出错案例 卫缺 2011-6-9使用方法:复制你的Pattern id ,然后用快捷键Ctrl + F 查找,即可快速定位。
所有的解释和解决方式只是可能和建议,大多数时候需要根据实际情况而定。
Findbugs 也有少量的误报,需要大家自己甄别。
1. EC_UNRELATED_TYPESBug: Call to equals() comparing different typesPattern id: EC_UNRELATED_TYPES, type: EC, category: CORRECTNESS 解释:两个不同类型的对象调用equals 方法,如果equals 方法没有被重写,那么调用object 的==, 永远不会相等;如果equals 方法被重写,而且含有instanceof 逻辑,那么还是不会相等。
解决方法:应该改为str.toString()2. IM_BAD_CHECK_FOR_ODDBug: Check for oddness that won't work for negative numbers Pattern id: IM_BAD_CHECK_FOR_ODD, type: IM, category: STYLE 解释:如果row 是负奇数,那么row % 2 == -1, 解决方法:考虑使用x & 1 == 1或者x % 2 != 0Class doesn't override equals in superclassFindBugsÌ«ÉñÆæÁË~~3. NP_ALWAYS_NULLPattern: Null pointer dereferenceid: NP_ALWAYS_NULL, type: NP, category: CORRECTNESSA null pointer is dereferenced here. This will lead to a NullPointerException when the code is executed.4. RCN_REDUNDANT_NULLCHECK_OF_NONNULL_VALUEBug: Redundant nullcheck of bean1, which is known to be non-nullPattern id: RCN_REDUNDANT_NULLCHECK_OF_NONNULL_VALUE, type: RCN, category: STYLEThis method contains a redundant check of a known non-null value against the constant null.这种方法包含了一个称为非空对空值的不断重复检查。
FindBugs使用手册
文件编号:配置项编号:FindBugs使用手册文档版本号V 1.0农信银资金清算中心创新研发部文档修订记录目录1、FindBugs简介 (4)2、FindBugs的检查规则 (4)2.1Correctness(正确性) (4)2.2 Bad practice(不良实践) (5)2.3 Performance(性能) (5)2.4Multithreaded correctness(多线程正确性) (6)2.5 Dodgy(不可靠) (7)3、FindBugs使用 (8)3.1安装FindBugs (8)3.2配置FindBugs (8)3.3使用FindBugs (8)1、FindBugs简介FindBugs是用于java代码检查的一种静态分析工具,它检查类或者JAR 文件,将字节码与一组缺陷模式进行对比以发现可能的问题。
有了静态分析工具,就可以在不实际运行程序的情况对软件进行分析。
FindBugs专注于找出潜在程序错误,而不是编码风格问题,目的在于提高程序的健壮性。
2、FindBugs的检查规则FindBugs提出了超过200种规则,这些规则可主要分为如下类别:2.1Correctness(正确性)这些问题涉及到可能在某些方面不正确的代码。
如:代码有无限递归,或者读取为写入的字段,这类问题几乎无疑是程序的错误。
例1:使用未初始化的类成员,可能导致NullPointException代码:FindBugs检测结果:例2:不使用方法的返回值代码:FindBugs检测结果:2.2Bad practice(不良实践)这类问题明确违反建议的编程标准。
如:删除异常,或未关闭文件,或未数据库连接资源等。
例3:未关闭打开的文件输出流资源代码:FindBugs检测结果:2.3Performance(性能)这类规则的目的在于检测潜在的性能问题。
如:代码创建了不需要的对象,或者在循环中使用字符串连接而不是使用StringBuffer。
Findbugs Bug类型查询手册
Bx DM_BOXED_PRIMITIVE_TOSTRING 使用static 方法toString 能够提高效率,推荐使用。
Bx DM_NUMBER_CTOR 因为Number 构造函数的效率不高,推荐使用static 方法valueOf。
DB DB_DUPLICATE_BRANCHES 分支语句中的代码是相同的。
因为代码重复,推荐删除分支语句的判断。
DLS DLS_DEAD_LOCAL_STORE 局部变量被赋值,但是之后赋的值没有被使用,所以推荐不对该局部变量赋值。
DLS DLS_DEAD_STORE_OF_CLASS_LITERALng.Class 的实例被保存到局部变量。
因为这个实例不会被使用,推荐删除该实例。
Dm DM_BOOLEAN_CTOR 使用方法valueOf()比使用Boolean 的构造函数生成Boolean 对象更有效率,所以推荐使用方法valueOf()。
Dm DM_STRING_CTOR 因为使用String(String)构造函数生成新字符串会浪费内存,推荐使用原有字符串。
Dm DM_STRING_TOSTRING 由于类型变换前后的类型都是String,所以推荐不进行类型变换。
Dm DM_STRING_VOID_CTOR 生成空字符串时使用了new String()构造函数。
由于直接赋值空字符串「""」的效率较高,推荐直接赋值空字符串。
IP IP_PARAMETER_IS_DEAD_BUT_OVERWRITTEN 由于对参数的修改会被忽视掉,所以推荐删除该代码。
ITA ITA_INEFFICIENT_TO_ARRAY 如果象「myCollection.toArray(newFoo[myCollection.size()」一样传入指定长度的数组参数内部处理中不会生成新的数组,处理效率会提高。
推荐传入和变换前Collection 的大小一样的数组。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Eclipse 插件FindBugs 使用手册前言:本文介绍如何利用Eclipse 插件FindBugs 优化Java 代码。
本插件是本人在对系统进行代码优化的时候,向迟焕祺同事索取并学习使用的,现在把工具的一些使用方法与大家共享,并把FindBugs提供给大家!感谢迟哥提供良好资源供大家学习、使用!问题提出:当我们编写完代码,做完单元测试等各种测试后就提交正式运行,只能由运行的系统来检测我们代码是否有问题了,代码中隐藏的错误在系统运行的过程中被发现后,然后再来进行相应的修改,那么后期修改的代价就相当高了。
解决方法:现在有很多Java 代码分析工具,FindBugs 中开源项目当中的一个,它可以帮你找到代码中隐藏的一些错误,提升你的代码能力与系统安全可靠性。
FindBugs 介绍FindBugs 是一个可以在Java 程序中发现Bugs 的程序。
它是专门用来寻找处于“Bug Patterns”列表中的代码的。
Bug Patterns 指很有可能是错误的代码的实例。
原文:FindBugs is a program to find bugs in Java programs. It looks for instances of "bug patterns" --- code instances that are likely to be errors.使用FindBugs 至少需要JDK1.4.0 以上版本,FindBugs是平台独立的,可以运行于GNU/Linux、Windows、MacOS X 等平台上。
运行FindBugs 至少需要有256 MB 内存,如果你要分析一个很大的项目,那就需要更加多的内存了。
获取FindBugs 最新版本:/projects/findbugs/files/FinBugs 介绍:/manual/Eclipse 插件links 文件夹方式配置:提示:直接的插件配置方式是使用Eclipse 的Update 方式更新,或者把新下载的插件PlugIn 放在原始的Eclipse 目录下去,这种方式会随着插件的增多而导致插件维护工作量的增加。
鉴于上述原因,可以使用links 文件夹的方式进行配置。
(MyEclipse 插件就是使用links 的方式进行配置的)配置方式如下:1. 安装好Eclipse 工具,可以到 上下载压缩包。
比如安装在E:\OpenSource\Eclipse\目录下,以下这个目录以%ECLIPSE_HOME%来进行表示;2. 此时默认的插件是在%ECLIPSE_HOME%\plugins目录中的;3. 在%ECLIPSE_HOME%下建立一个PlugInsNew的目录;比如:E:\OpenSource\Eclipse\PlugInsNew4. 你下载了个新的插件,比如叫做:XYZ那么就在%ECLIPSE_HOME%\PlugInsNew\目录下建立XYZ目录,目录里面是eclipse 目录,eclipse 目录包含有features与plugins两个子目录;结构如下图所示:Eclipse 插件目录示例1那么插件配置方式:1. 把下载的新插件的文件放在以下相应目录中%ECLIPSE_HOME%\PlugInsNew\XYZ\eclipse\features%ECLIPSE_HOME%\PlugInsNew\ XYZ\eclipse\plugins2. 建立相关的.link 的文件然后在%ECLIPSE_HOME%\links目录里建立一个XYZ.link的文件,内容如是:path=E:/OpenSource/Eclipse/PlugInsNew/XYZ就一行这样的路径指示而已。
3. 重新启动Eclipse 即可FindBugs 插件配置:(MyEclipse 的配置方式也一样)FindBugs 插件安装方法采用上一节的《Eclipse 使用技巧之插件管理》重新启动Eclipse 后,在Help => About Eclipse SDK => Plug-in Details你可以看到由“FindBugs Project”提供的“FindBugs Plug-in”版本0.0.17 插件,如下图所示:FindBugs-Plug-in 版本 2FindBugs 工具的使用在Package Explorer或Navigator视图中,选中你的Java 项目,右键,可以看到“Find Bugs”菜单项,子菜单项里有“Find Bugs”和“Clear Bug Markers”两项内容,如下图所示:FindBugs插件 3我们建立一个简单的测试文件Test.java 内容如下:public class Test{private String[] name;public String[] getName(){return name;}public void setName(String[] name){ = name;}}我们点中“Find Bugs”,运行时会出现如下进度框:运行结束后可以在Problems 中看到增加了如下的警告信息内容FindBugs检测结果 4选中Problems 视图里出现的相应问题,就会在代码编辑器里切换到相应的代码上去,方便根据相应的提示信息进行代码的修改。
will point to locations in your code which have been identified as potential instances of bug patterns.在Problems 视图里,选中相应的问题条目,右键,在弹出的菜单中,可以看到“Show Bug Details”,如下图所示:图片 5点中它,会切换到Bug Details 视图上去,显示更加详细的提示信息。
FindBugs 运行后的警告信息内容不仅在Problems 视图中显示,而且将标记在源代码标记框中,在源代码编辑器中我们可以看到警告标识(与Eclipse 的警告标示类似)当光标指向你的警告信息的代码上面时,就会有相应的错误提示信息,与Eclipse本身的错误或警告信息提示类似。
当然,在代码编辑窗口中,点击带有警告提示信息的图标时,也会自动切换到Bud Details 窗口去,查看详细的警告信息,如下图所示。
FindBugs 提示 6根据这里详细的信息,你可以得到FindBugs 为什么会对你的代码报警告信息,及相应的处理办法,根据它的提示,你可以快速方便地进行代码修改。
FindBugs 提示修改信息7根据提示,我们将代码修改成如下,再运行就不会报有警告信息了。
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 =>FindBugs配置界面8可以配置的信息包括如上图所示的四个选项的相关设置:1. Run FindBugs Automatically开关当此项选中后,FindBugs 将会在你修改Java 类时自动运行,如你设置了Eclipse 自动编译开关后,当你修改完Java 文件保存,FindBugs就会运行,并将相应的信息显示出来。
当此项没有选中,你只能每次在需要的时候自己去运行FindBugs来检查你的代码。
2. Minimum priority to report 选择项这个选择项是让你选择哪个级别的信息进行显示,有Low、Medium、High三个选择项可以选择,很类似于Log4J的级别设置啦。
比如:你选择了High 选择项,那么只有是High 级别的提示信息才会被显示。
你选择了Medium 选择项,那么只有是Medium 和High 级别的提示信息才会被显示。
你选择了Low选择项,那么所有级别的提示信息都会被显示。
3. Enable bug categories选择项在这里是一些显示Bug分类的选择:Correctness 关于代码正确性相关方面的Performance 关于代码性能相关方面的Internationalization 关于代码国际化相关方面的Multithreaded correctness 关于代码多线程正确性相关方面的Style 关于代码样式相关方面的Malic ious code vulnerability关于恶意破坏代码相关方面的比如:如果你把Style 的检查框去掉不选择中它,那么与Style 分类相关的警告信息就不会显示了。
其它的类似。
4. Select bug patterns to check for选择项在这里你可以选择所要进行检查的相关的Bug Pattern 条目可以从Bug codes、Detector name、Detector description 中看到相应的是要检查哪些方面的内容,你可以根据需要选择或去掉相应的检查条件。
FindBugs 总结此插件的功能很不错,可以帮助我们提升Java 代码的编写能力,写出更加安全可靠的代码。