Findbugs使用简介
- 格式:doc
- 大小:44.50 KB
- 文档页数:16
IDEA插件FindBugs的使⽤详解前⾔Findbugs很多⼈都并不陌⽣,Eclipse中有插件可以帮助查找代码中隐藏的bug,IDEA中也有这款插件。
这个插件可以帮助我们查找隐藏的bug,⽐较重要的功能就是查找潜在的null指针。
在编写代码的过程中,我们可能不会⼀直记得检查空的引⽤,在我们测试时可能很难发现问题,但是应⽤上线之后,⾯对⼤量的⽤户,很多问题就会浮现出来。
所以在编码时,使⽤findbugs检查⼀下很有必要。
安装安装完之后,重启studio,会发现左下⾓会出现findbugs的图标可以分析单个⽂件,包下⾯的所有⽂件,整个module下的⽂件,整个project下的⽂件,右键想要分析的⽂件名/包名/module名/project分析完之后就会出现结果⾯板点击对应的item在右边会定位到具体的代码根据需要可以进⾏更改,其中Correctness这个错误使我们重点关注的对象,这⾥⼤多是空指针的错误,根据提⽰进⾏处理。
附:⼀些常见的错误信息Bad practice 代码中的⼀些坏习惯Class names should start with an upper case letter 主要包括类名的命名,以⼤写字母开头Method names should start with a lower case letter ⽅法名以⼩写字母开头Field names should start with a lower case letter 字段名以⼩写字母开头equals()method does not check for null argument equals()⽅法应该检查⾮空Class defines equals() and uses Object.hashCode() ⼀个类覆写了equals⽅法,没有覆写hashCode⽅法,使⽤了Object对象的hashCode⽅法Method ignores exceptional return value ⽅法忽略返回值的异常信息Equals method should not assume anything about the type of its argument equals(Object o)⽅法不能对参数o的类型做任何的假设。
【⼯利其器】必会⼯具之(五)FindBugs篇——让⼯具找出你代码中的bug 前⾔转载请声明,转⾃【】,谢谢!项⽬中代码质量,往往需要⽐较有经验的程序员的审查来保证。
但是随着项⽬越来越⼤,代码审查会变得越来越复杂,需要耗费越来越多的⼈⼒。
⽽且程序员的经验和精⼒都是有限的,能审查出问题必定有限。
⽽在对代码质量要求越来越严格的当今IT界,这⽆疑是个⽭盾点。
幸运的是,不少公司发布了代码扫描⼯具,来检测代码中存在的问题。
尽管它们⽆法扫描出所有的bug,但仍然能够为我们的⼯作带来极⼤的便利。
其中FindBugs就是这其中的佼佼者,本⽂将结合Android Studio 来介绍该⼯具的使⽤。
⼀、FindBugs简介FindBugs是⼀款Java缺陷检测⼯具,它通过分析静态字节码可以查找出200多种错误模式,例如空指针取消引⽤、⽆限递归循环、Java库的错误使⽤和死锁等。
⼆、安装FindBugs插件Android Studio默认是没有安装FindBugs插件的,需要我们⾃⼰进⾏安装。
所幸Android Studio提供了丰富的插件,可以直接从库插件库中进⾏安装。
当然也可以⾃⼰⼿动从⽹上下载好该插件,然后安装。
这⾥将两种⽅法都简单介绍⼀下。
1、从Android Studio插件库中安装点击⾯板中主菜单Files > Settings > Plugs 就可以进⼊到插件中⼼,如下图所⽰:②处可以输⼊要查找的插件名,如果安装了,并满⾜③处筛选条件,会显⽰在④处列表中。
③处选择筛选范围,④处⽤于显⽰在②处和③处所指定条件下查询到的插件列表,右边的选择框可选中表⽰该插件可以⽤,否则表⽰不可⽤。
⑤处显⽰选择的插件的相关信息⑥处是⼀个⼊⼝,可以跳转去安装JetBrains提供的插件。
⑦处⽤于跳转到从仓库中浏览并安装插件。
⑧处⽤于安转下载到本地的插件。
这⾥我们选择从“Browse Repositories”进⼊安装,进⼊后搜索“FindBugs”会显⽰如下界⾯,我们选择“FindBugs-IDEA”进⾏安装。
关于FindBugs插件1FindBugs简介FindBugs是Eclipse的一个插件,是一个静态分析工具。
主要作用就是基于其中的Bug Patterns 列表,检查java字节码,也就是.class文件。
通俗点讲,就是依据Bug Patterns在java程序中查找bug。
Bug Patterns中存放的是可能出错的代码实例。
它能寻找出编译代码时未报错的代码缺陷,包括能检查出一些可优化的地方。
例如:未关闭的数据库连接,缺少必要的null check,多余的 null check,多余的if后置条件,相同的条件分支,重复的代码块,错误的使用了"==",建议使用StringBuffer代替字符串连加等等。
这些都是FindBugs默认具有的检查功能,除此外,我们还可以自己配置检查规则,可以自己定义效验类,通过将自己定义的类放置Bug Patterns中(当然,这里必须参照原有的Bug Patterns内容,要有继承它的接口等操作),就可以按照我们自己所定义的规则进行代码的检查。
2FindBugs的使用与其他插件一样,用法很简单,也没有什么很繁琐的过程,就通过一个实例来说明FindBugs的使用情况吧。
新建一个java工程,然后新建一个java源文件,在源文件中输入以下内容:public class Test {private String[] name;public String[] getName() {return name;}public void setName(String[] name) { = name;}}保存后,不会报错。
首先熟悉一下有关透视图,点击Window,打开试图,通过other选项,选择FindBugs,出现包含Bug Tree、Bug Details、Bug User Annotations三个试图。
如图1所示:图 1图中:Bug Tree:主要是以树的形式展现通过FindBugs操作后出现的问题列表;Bug Details:主要是展现通过FindBugs操作后出现问题的详细位置说明;Bug User Annotations:主要是用户对此Bug的注解。
代码静态检查工具与应用介绍代码的质量直接关系到软件的性能和可靠性。
为了提高代码质量,开发人员常常采用代码静态检查工具来检测潜在的代码缺陷和错误。
本文将介绍常用的代码静态检查工具及其应用,帮助读者更好地理解和应用这些工具。
一、什么是代码静态检查工具?代码静态检查工具是一类软件工具,通过扫描源代码来检查潜在的编程错误、不合规范的代码和潜在的安全隐患。
它可以在代码编写的早期发现问题,帮助开发人员提前修复错误,从而提高代码质量。
二、常用的代码静态检查工具1. FindBugs:FindBugs是一个基于Java字节码的静态分析工具,用于查找Java程序中的潜在缺陷。
它可以检测出空指针引用、资源未释放、不必要的对象创建等问题,并提供详细的问题报告。
2. PMD:PMD是一个针对Java源代码的静态规则检查工具。
它可以帮助开发人员发现代码中的潜在问题,如未使用的变量、无效的方法重写、复杂的表达式等。
PMD提供了多种规则,可以根据项目需求进行配置和定制。
3. ESLint:ESLint是用于JavaScript代码的静态检查工具,它能帮助开发人员发现代码中的潜在问题并提供修复建议。
ESLint支持可配置的规则集,可以根据项目需求进行灵活的配置。
4. Checkstyle:Checkstyle是一个用于Java代码的静态规则检查工具。
它可以帮助开发人员遵循编码规范,并提供统一的代码风格。
Checkstyle支持自定义规则和可配置的检查选项,以满足项目的需求。
三、代码静态检查工具的应用1. 代码质量控制:代码静态检查工具能够帮助开发人员发现代码缺陷和不规范的编码风格,并及时提供修复建议。
通过使用这些工具,可以规范代码质量,提高代码的可读性和可维护性。
2. 安全漏洞检测:代码静态检查工具能够帮助开发人员发现潜在的安全隐患,如SQL注入、跨站脚本攻击等。
通过及时修复这些问题,可以提高软件的安全性和可靠性。
3. 性能优化:代码静态检查工具还可以检测不合理的代码结构和低效的算法,帮助开发人员发现性能瓶颈,并提供相应的优化建议。
findbugs用法FindBugs是一款由加州大学伯克利分校的Java开发者团队开发的静态代码分析工具,主要用于发现Java代码中的潜在错误和漏洞。
本文将向您介绍FindBugs的基本用法,帮助您更好地利用这款工具提高代码质量。
一、FindBugs简介FindBugs是一款免费的开源工具,它通过分析Java代码的语法、数据流、异常处理等方面,发现潜在的错误和漏洞。
FindBugs可以帮助开发者发现一些不易被人工发现的错误,提高代码质量,减少软件缺陷。
二、安装FindBugs要使用FindBugs,您需要先将其安装到您的系统中。
FindBugs支持Windows、Linux和MacOSX等操作系统。
安装过程相对简单,您可以从FindBugs官方网站下载最新版本的FindBugs,并根据安装指南进行安装。
三、使用FindBugs进行代码分析安装完成后,您可以使用FindBugs对Java代码进行静态分析。
以下是使用FindBugs进行代码分析的基本步骤:1.打开FindBugs分析器界面,将要分析的Java代码文件上传到分析器中。
2.选择要进行静态分析的选项,如是否包含测试代码等。
3.等待分析器进行分析,生成报告。
4.查看分析报告,了解代码中的潜在错误和漏洞。
以下是一些使用FindBugs的常见用法示例:1.查找未使用的变量:FindBugs可以检测到未使用的变量,这可能是由于开发者疏忽或无意中留下的漏洞。
2.查找空指针引用:FindBugs可以检测到可能出现的空指针引用错误,这可能导致程序崩溃或出现不可预期的行为。
3.查找内存泄漏:FindBbugs可以检测到可能的内存泄漏问题,如对象引用未被释放等。
4.查找线程安全问题:FindBugs可以检测到线程安全问题,如并发修改共享数据等。
五、优化FindBugs结果使用FindBugs分析后,您可能会发现一些潜在的问题和漏洞。
对于这些问题和漏洞,您可以采取以下优化措施:1.修复错误:对于发现的错误和漏洞,您应该尽快修复它们,以确保代码的质量和稳定性。
文件编号:配置项编号: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是一个在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是由一个非常量的字符串产生。
Findbugs使用说明目的Findbugs是一个代码质量工具;我们用它来检查源代码中出现的伪问题,以期尽可能在项目的初始阶段将代码问题解决。
本文主要介绍Findbugs的eclipse 插件的应用。
对应的版本是:Findbugs (0.0.16);eclipse (3.1)概要FindBugs 是一个静态分析工具,它检查类或者JAR 文件,将字节码与一组缺陷模式进行对比以发现可能的问题。
我们利用它在eclipse中的插件来对它所过滤的工程的源代码进行检查。
希望在程序员编写代码的过程中,将代码中的缺陷指出来,让编码人员在开发中将它们纠正。
达到尽可能在项目编码中将问题解决得目的。
而不是在编码结束的时候才用该软件对代码检查,修改。
Findbugs使用说明Findbugs的下载地址见参考资料.安装好Findbugs后我们启动eclipse。
在eclipse中选择某个工程的属性。
如下图所示:点击属性弹出属性对话框,我们选择对话框左边的树上的“Findbugs”节点:下面我们对Findbugs各项属性的配置进行一下说明:Run Findbugs automnaticaly:编译工程和文件的时候自动运行Minimum priority to report:根据bug的优先权级别报告bug。
Enable bug categories: bug种类。
✧Correctness:正确性。
✧Performance:性能。
✧Internationalization:国际化。
✧Mutithreaded correctness:多线程的正确性。
✧Style:样式。
✧Malicious code vulnerability :恶意代码。
Select bug patterns to check for:bug的校验模式Bug的校验模式的设置是确定哪一类问题我们应该作为bug报告给用户;详细的bug减少可以参考参考资料。
当我们根据部门规范选择要校验的模式后。
Findbugs如何使⽤?Findbugs的使⽤说明Findbugs使⽤说明1 ⽤途FindBugs 是⼀个java bytecode静态分析⼯具,它可以帮助java⼯程师提⾼代码质量以及排除隐含的缺陷。
FindBugs检查类或者 JAR ⽂件,将字节码与⼀组缺陷模式进⾏对⽐以发现可能的问题。
有了静态分析⼯具,就可以在不实际运⾏程序的情况对软件进⾏分析。
FindBugs不是通过分析类⽂件的形式或结构来确定程序的意图,⽽是通常使⽤ Visitor 模式进⾏分析(Visitor 模式的更多信息)。
2 安装⽬前findbugs最新的版本是1.3.9,2.1 Eclipse插件的安装环境要求,Findbugs要求Eclipse 3.4 以上的版本,JRE/JDK 1.5.0以上的版本。
步骤,将edu.umd.cs.findbugs.plugin.eclipse_1.3.9.20090821.zip解压到Eclipse的 "plugins"⼦⽬录下,这样就可以在 <eclipse_install_dir>/plugins/edu.umd.cs.findbugs.plugin.eclipse_1.3.9.20090821/下看到FindBugs logo图⽚findbugs.png。
启动Eclipse 然后选择 Help → About Eclipse Platform → Plug-in Details,你应该找到 "FindBugs Plug-in"。
3 使⽤启动选中java⼯程,点击⿏标右键,选择名为“Find Bugs”的菜单,FindBugs开始运⾏,问题指⽰器将指向根据bug模式识别出来的潜在问题代码位置。
可选项定制你还可以通过java⼯程的属性对话框来定制findbugs的运⾏⽅式,可选项包括:控制"Run FindBugs Automatically" 开关的checkbox。
FindBugs 安装使用
FindBugs是个专门用来发现Java代码中的Bug的Eclipse小插件,与Eclipse无缝结合,可以实现敲入代码、保存文件、编译时即时反馈给用户Bug信息,比Eclipse自带的Java Bug 管理功能要强。
FindBugs一共有三个版本,除过Eclipse插件板本外,还提供一个独立版本的Java程序(基于SWing)和一个Ant Task版本;下面介绍Eclipse的插件版。
一、安装
打开MyEclipse 的help -> SoftWave Updates -> Find and Install
如图:
在下图中,点击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 是什么? (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的使用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类型)。
findbugs 用法摘要:1.Findbugs 简介2.Findbugs 的基本用法3.Findbugs 的高级用法4.Findbugs 的优点和局限性正文:Findbugs 是一款流行的Java 代码审计工具,它可以帮助开发人员找到代码中的潜在问题和安全漏洞。
下面我们将详细介绍Findbugs 的基本用法和高级用法。
一、Findbugs 基本用法1.安装Findbugs首先,需要在电脑上安装Findbugs。
可以访问Findbugs 官网下载最新版本,然后按照提示进行安装。
2.编写Java 代码在使用Findbugs 进行代码审计之前,需要编写一段Java 代码。
这段代码可以是现有的项目代码,也可以是新编写的代码。
3.运行Findbugs在安装完Findbugs 后,可以通过命令行工具运行它。
在命令行中输入以下命令:```findbugs -x <path_to_your_java_code>```其中,`<path_to_your_java_code>`表示你的Java 代码所在的路径。
4.查看Findbugs 输出结果Findbugs 运行后,会在命令行中输出审计结果。
审计结果包括找到的潜在问题和安全漏洞的详细信息。
二、Findbugs 高级用法1.配置FindbugsFindbugs 提供了丰富的配置选项,可以根据实际需求进行配置。
以下是一些常用的配置选项:- `-X 不堪设想`:启用Findbugs 的高级功能。
- `-Xmultithread`:启用多线程审计。
- `-Xnoescape`:关闭Findbugs 的ESCAPE 机制。
2.编写自定义规则Findbugs 支持编写自定义规则,可以根据实际需求编写适合自己的规则。
规则文件需要以`.find`为扩展名,放在`findbugs-rules`目录下。
3.使用插件Findbugs 支持插件,可以通过插件扩展Findbugs 的功能。
静态分析工具—FindBugs什么是FindBugsFindBugs 是一个静态分析工具,它检查类或者JAR 文件,将字节码与一组缺陷模式进行对比以发现可能的问题。
有了静态分析工具,就可以在不实际运行程序的情况对软件进行分析。
不是通过分析类文件的形式或结构来确定程序的意图,而是通常使用Visitor 模式。
静态分析工具承诺无需开发人员费劲就能找出代码中已有的缺陷。
当然,如果有多年的编写经验,就会知道这些承诺并不是一定能兑现。
尽管如此,好的静态分析工具仍然是工具箱中的无价之宝。
FindBugs可以发现许多代码中间潜在的bug。
比如引用了空指针(null pointer dereference), 特定的资源未关闭,等等。
如果用人工检查的方式,这些bug可能很难才会被发现,或许永远也无法发现,直到运行时发作。
FindBugs的使用时机开发阶段当完成了某一部分功能模块开发的时候(这通常是指代码撰写完成,并已debug 通过之后),可藉由FindBugs对该模块涉及的java文件进行一次扫描,以发现一些不易察觉的bug或是性能问题。
交付新版的时候,开发团队可以跑一下FindBugs,除掉一些隐藏的Bug。
在开发阶段使用FindBugs,一方面开发人员可以对新版的品质更有信心,另一方面,测试人员藉此可以把更多的精力放在业务逻辑的确认上面,而不是花大量精力去进一些要在特殊状况下才可能出现的BUG(典型的如Null Pointer Dereference)。
从而可以提高测试的效率。
维护阶段这里指的是系统已经上线,却发现因为代码中的某一个bug导致系统崩溃。
在除掉这个已暴露的bug之后,为了快速的找出类似的但还未暴露的bug,可以使用FindBugs对该版的代码进行扫描。
当然,在维护阶段使用FindBugs往往是无奈之举,且时间紧迫。
此外,如果本来在新版交付的时候就使用过FindBugs的话,往往意味着这种bug是FindBugs还无法检测出的。
idea findbugs使用
Findbugs一种java件检查工具,它可以检测 Java 代码中潜在的性能问题、内存泄漏、代码不规范及安全漏洞等。
它分析 Java节码,而不是源代码,因此可以在任何平台上使用,而且速度也很快。
它可以在开发阶段和构建阶段给出问题的反馈,从而使代码的质量得以提升。
它被广泛应用于开源项目,如 Eclipse、Hibernate。
Idea 中使用 Findbugs常方便,只需要安装 findbugs-idea件就可以了。
在 Idea Settings 中找到 Plugins,在右侧搜索框中输入 findbugs,点击 Install可以开始安装了。
安装完成后,重新启动 Idea,就可以在菜单栏中看到 FindBugs项了。
使用 FindBugs查代码的方法也非常简单,只需要点击 FindBugs 项就可以了。
另外,也可以点击右上角的 Analyze单,然后点击 Code Inspection行代码检查。
Findbugs 会自动将检查的结果显示在 Idea工具窗口中,也可以点击 View单选择 Findbugs Tree查看检查结果,这样可以更加清晰地查看每一项检查的结果。
Findbugs以检查代码中潜在的性能问题和安全漏洞,但是要注意,它也可能报出一些误报,如果发现报告中出现误报,那么就需要慎重处理,或者直接忽略掉。
总而言之,Findbugs一款非常实用的 Java 代码检查工具,它可以帮助开发者快速发现代码中的问题,有助于提高代码的质量。
使用 Idea 中的 Findbugs件,能够更加方便快捷地进行代码检查。
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的解压目录位置:<path id="findbugs.path" ><fileset dir ="${lib.home}/findbugs-1.3.0"><include name ="**/*.jar"/></fileset></path>接着声明Findbugs任务:<taskdef name="findbugs"classname="edu.umd.cs.findbugs.anttask.FindBugsTask" classpathref ="findbugs.path"/>然后建立Findbugs任务:<property name ="findbugs.home" value="${lib.home}/findbugs-1.3.0"/><!-- 定义findbugs的home,findbugs的task要使用--><target name ="findbugs"><findbugs home ="${findbugs.home}"includeFilter="${findbugs_include_filter}"excludeFilter="${findbugs_exclude_filter}"jvmargs="-Xmx384m" output ="html"outputFile ="d:\test.html"><class location ="${build.home}/WEB-INF/classes/"/><!-- 以上定义findbugs查找的类路径--><auxClasspathpath="${lib.home}/findbugs-1.3.0/lib/findbugs-ant.jar"/><auxClasspath><fileset dir="${build.home}/WEB-INF/lib" includes="**/*.jar" /> </auxClasspath><!-- 以上定义上述类所依赖的类路径--><sourcePath path ="${src.home}"/><!-- 以上定义源代码的路径--></findbugs ></target >最后运行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视图里出现的相应问题,就会在代码编辑器里切换到相应的代码上去,方便根据相应的提示信息进行代码的修改。