FindBugs的使用

合集下载

FindBugs介绍.

FindBugs介绍.

附:效果
附:效果
自定义检查器
18 19 20 21 22 23
示例
public void visit(Code code) { seenGuardClauseAt = Integer.MIN_VALUE; logBlockStart = 0; logBlockEnd = 0; super.visit(code); }
应判断inputread的返回值实际读入多少字节未检查返回值返回值被丢弃stringreplace示例续构造器constructor使用未初始化变量jbosspublicbytearraycallbackstringpropmpt一概要二使用三缺陷模式四实现技术五自定义检测器访问者visitor模式字节码抽象语法树使用bcelbytecodeengineeringlibrary操作字节码也支持asm字节码操作库遍历抽象语法树
使用(续)
三 Eclipse插件
目录
一 概要 二 使用 三 缺陷模式
四 实现技术 五 自定义检测器
缺陷模式
缺陷模式
经常出现的缺陷的表现样式 分类
单线程 多线程同步 性能 安全性、健壮性
缺陷模式
equals(Object)变体
equals(Foo)
示例
应重载父类:Foo.equals(Object)
自定义检查器
32
示例
if (seen == IFEQ && (PC >= seenGuardClauseAt + 3 && PC < seenGuardClauseAt + 7)) { 33 logBlockStart = branchFallThrough; 34 logBlockEnd = branchTarget; 35 }

关于FindBugs插件

关于FindBugs插件

关于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的注解。

代码审计工具Findbugs自动检查CheckList及配置方法

代码审计工具Findbugs自动检查CheckList及配置方法

代码审计工具Findbugs自动检查CheckList及配置方法
代码审计工具Findbugs是一个应用比较广泛的开源代码审计工具,如果开发团队利用好了这个工具,能够很大程度上提高软件产品的安全性。

而且重要的是Free。

首先,介绍一下安全审计配置文件的位置,网上都没有这方面的资料,我自己找了几个小时才找到。

这个配置文件不在安装文件夹,也不再Eclipse软件的文件夹,而是在具体项目的工作空间workspace中,具体位置是:workspace\.metadata\.plugins\edu.umd.cs.findbugs.plugin.eclipse\.fbprefs。

(以点开始的文件夹,还这么多层目录,很隐蔽!!!)
这个文件中,选中要审计的项目其配置值会是“TURE”,配置为不审计的项会是“FALSE”。

我们可以通过在工作中逐渐确定哪些安全项一定要检查,哪些不需要检查,确定之后,整个开发团队使用同一个配置文件,从而实现标准化、自动化地审查开发团队的代码。

Eclipse 插件 FindBugs 使用手册

Eclipse 插件 FindBugs 使用手册

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 目录下去,这种方式会随着插件的增多而导致插件维护工作量的增加。

跟我学Java代码质量检测FindBugs工具——如何应用FindBugs工具静态分析和检查代码中的错误

跟我学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…】子菜单。

用FindBugs来生成html形式的报告整理

用FindBugs来生成html形式的报告整理

用FindBugs来生成html形式的报告整理之前用的是findbugs的eclipse插件,但是在导出报告的时候是xml形式的,很不易阅读,下来讲下用findbugs来导出html的报告。

1.准备工作下载到ant和findbugs,我在这里用的是apache-ant-1.7.1-bin.zip和findbugs-1.3.9.zip下载地址:和直接解压到本地磁盘以解压到F:\ 为例配置环境变量新建ANT_HOME在path里添加ANT配置完毕。

同样,findbugs也解压并配置环境变量。

2.开始任务编写ant脚本,即build.xml<project name="CUSTCARE"><path id="findbugs.path"><fileset dir ="F:/findbugs-1.3.9"><include name ="**/*.jar"/></fileset></path><taskdef name="findbugs" classname="edu.umd.cs.findbugs.anttask.FindBugsTask" classpathref ="findbugs.path"/><property name ="findbugs.home" value ="F:/findbugs-1.3.9"/><target name ="findbugs"><findbugs home ="F:/findbugs-1.3.9" jvmargs="-Xmx884m" output ="html" outputFile ="F:/findbugs.html"> <class location ="Z:/BR_Telfort_201000729/BS/CUSTCARE/webapp/WEB-INF/classes/com/gmcc/boss"/><auxClasspath path="F:/findbugs-1.3.9/lib/findbugs-ant.jar"/><auxClasspath><fileset dir="Z:/BR_Telfort_201000729/BS/CUSTCARE/webapp/WEB-INF/lib" includes="**/*.jar" /></auxClasspath><sourcePath path ="Z:/BR_Telfort_201000729/BS/CUSTCARE/src/com/gmcc/boss"/></findbugs></target></project>3.生成Findbugs Report运行cmd打开DOS窗口,进入到build.xml所在目录,键入命令ant findbugs回车即可。

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。

sonarqube findbugs 实现原理

sonarqube findbugs 实现原理SonarQube FindBugs 是一个开源的代码静态分析工具,它主要用于在 Java 代码中找出潜在的错误和漏洞。

FindBugs 使用静态分析技术对代码进行扫描,不需要运行时环境,也不需要编译后的字节码。

它基于字节码分析技术,通过对类文件(.class 文件)进行分析,以发现代码中的错误。

以下是 SonarQube FindBugs 实现原理的详细说明:一、下载和安装首先,需要从 SonarQube 官网下载 FindBugs 的 ZIP 文件,并解压到适当的位置。

然后,通过配置 SonarQube 的启动脚本(例如StartSonar.bat),将 FindBugs 集成到 SonarQube 中。

二、架构和组成FindBugs 的架构包括三个主要组件:FindBugs UI、FindBugs Plugin 和 FindBugs Engine。

FindBugs UI 用于展示分析结果和错误信息,FindBugs Plugin 是将 FindBugs 集成到 SonarQube 中的插件,FindBugs Engine 是执行实际分析的引擎。

三、工作原理FindBugs 使用静态分析技术对 Java 代码进行扫描。

它通过读取类文件(.class 文件)中的字节码信息,分析其中的指令和数据流,以发现潜在的错误和漏洞。

FindBugs 使用一组规则(称为检查器)来检查代码中的问题。

这些规则涵盖了常见的编程错误和安全漏洞,例如空指针异常、资源泄露、数据竞争等。

四、检查器的工作方式FindBugs 使用了一种称为“静态单赋值”(SSA)的中间表示形式来分析代码。

在这种表示形式中,每个变量只有一个赋值点,这有助于提高分析的精度。

FindBugs 通过遍历代码中的每个节点,对每个节点的操作进行静态单赋值分析,以确定可能存在的问题。

五、结果展示FindBugs 分析完成后,将结果展示在 SonarQube UI 中。

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 简明教程前言:本文重点在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。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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类型)。

因此,当这个类的一个实例放入到类集合中的任何一个中时,使用的是Object.equals()版本的方法,而不是在Bob中定义的版本。

在这种情况下,Bob类应当定义一个接受类型为Object的参数的equals()方法。

4.2检测:忽略方法返回值
这个检测器查找代码中忽略了不应该忽略的方法返回值的地方。

这种情况的一个常见例子是在调用String方法时,例如:
1 String aString = "bob";
2 b.replace('b', 'p');
3 if(b.equals("pop"))
这个错误很常见。

在第2行,程序员认为他已经用p替换了字符串中的所有b。

确实是这样,但是他忘记了字符串是不可变的。

所有这类方法都返回一个新字符串,而从来不会改变消息的接收者。

4.3检测:Null指针对null的解引用(dereference)和冗余比较
这个检测器查找两类问题。

它查找代码路径将会或者可能造成null指针异常的情况,它还查找对null的冗余比较的情况。

例如,如果两个比较值都为null,那么它们就是冗余的并可能表明代码错误。

FindBugs在可以确定一个值为null 而另一个值不为null时,检测类似的错误,例如:
1 Person person = aMap.get("bob");
2 if (person != null) {
3person.updateAccessTime();
4 }
5 String name = person.getName();
在这个例子中,如果第1行的Map不包括一个名为“bob”的人,那么在第5行询问person的名字时就会出现null指针异常。

因为FindBugs不知道map是否包含“bob”,所以它将第5行标记为可能null指针异常。

4.4检测:初始化之前读取字段
这个检测器寻找在构造函数中初始化之前被读取的字段。

这个错误通常是由使用字段名而不是构造函数参数引起的,例如在构造函数中读取未初始化的字段:
1 public class Thing {
2private List actions;
3public Thing(String startingActions) {
4StringTokenizer tokenizer =
5 new StringTokenizer(startingActions);
6 while (tokenizer.hasMoreTokens()) {
7 actions.add(tokenizer.nextToken());
8 }
9 }
10}
在这个例子中,第7行将产生一个null指针异常,因为变量actions还没有初始化。

4.5命名检查
对标准Java命令规范的测试:变量名称不应太短;方法名称不应过长;类名称应当以小写字母开头;方法和字段名应当以小写字母开头,等等。

4.6未使用的代码检查
查找从未使用的私有字段和本地变量、执行不到的语句、从未调用的私有方法,等等。

4.7嵌套检查
例如:switch语句应当有default块,应当避免深度嵌套的if块,不应当给参数重新赋值,不应该对double值进行相等比较。

4.8导入语句检查
检查import语句的问题,比如同一个类被导入两次或者被导入ng的类中。

4.9JUnit测试检查
查找测试用例和测试方法的特定问题,例如方法名称的正确拼写,以及suite()方法是不是static和public。

4.10字符串检查
找出处理字符串时遇到的常见问题,例如重复的字符串标量,调用String构造函数,对String变量调用toString()方法。

4.11括号检查
检查for、if、while和else语句是否使用了括号。

4.12代码尺寸检查
测试过长的方法、有太多方法的类以及重构方面的类似问题。

4.13终结函数检查
因为在Java语言中,finalize()方法不是那么普遍,它们的使用规则虽然很详细,但是人们对它们相对不是很熟悉。

这类检查查找finalize()方法的各种问题,例如空的终结函数,调用其他方法的finalize()方法,对finalize()的显式调用,等等。

4.14克隆检查
用于clone()方法的新规则。

凡是重写clone()方法的类都必须实现Cloneable,clone()方法应该调用super.clone(),而clone()方法应该声明抛出CloneNotSupportedException异常,即使实际上没有抛出异常,也要如此。

4.15耦合检查
查找类之间过度耦合的迹象,比如导入内容太多;在超类型或接口就已经够用的时候使用子类的类型;类中的字段、变量和返回类型过多等。

4.16异常检查
针对异常的检查:不应该声明该方法而抛出ng.Exception异常,不应当将异常用于流控制,不应该捕获Throwable,等等。

4.17日志检查
查找java.util.logging.Logger的不当使用,包括非终状态(nonfinal)、非静态的记录器,以及在一个类中有多个记录器。

4.18Open—Close检查
检查文件或通讯方面,是否忘记Close的情况。

4.19其它检查
其它缺陷清单可参见:缺陷清单。

4.20构建自己的规则集
可以构建自己的规则集。

相关文档
最新文档