java代码缺陷自动分析工具之FindBugs介绍.doc

java代码缺陷自动分析工具之FindBugs介绍.doc

ID:50826820

大小:49.45 KB

页数:8页

时间:2020-03-15

java代码缺陷自动分析工具之FindBugs介绍.doc_第1页
java代码缺陷自动分析工具之FindBugs介绍.doc_第2页
java代码缺陷自动分析工具之FindBugs介绍.doc_第3页
java代码缺陷自动分析工具之FindBugs介绍.doc_第4页
java代码缺陷自动分析工具之FindBugs介绍.doc_第5页
资源描述:

《java代码缺陷自动分析工具之FindBugs介绍.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、java代码缺陷自动分析工具之FindBugs介绍.txt逆风的方向,更适合飞翔。我不怕万人阻挡,只怕自己投降。你发怒一分钟,便失去60分钟的幸福。忙碌是一种幸福,让我们没时间体会痛苦;奔波是一种快乐,让我们真实地感受生活;疲惫是一种享受,让我们无暇空虚。生活就像"呼吸""呼"是为出一口气,"吸"是为争一口气。1FindBugs是什么?FindBugs是一个javabytecode静态分析工具,它可以帮助java工程师提高代码质量以及排除隐含的缺陷。FindBugs检查类或者JAR文件,将字节码与一组缺陷模式进行对比以发

2、现可能的问题。有了静态分析工具,就可以在不实际运行程序的情况对软件进行分析。FindBugs不是通过分析类文件的形式或结构来确定程序的意图,而是通常使用Visitor模式进行分析。2FindBugs可以做什么?FindBugs提供了35个检测器来检测字节码中可能的缺陷。可以做的事情主要有:2.1找出hashequals不匹配找与equals()和hashCode()的实现相关的几个问题。这两个方法非常重要,因为几乎所有基于集合的类---List、Map、Set等都调用它们。一般来说,这个检测器寻找两种不同类型的问题:①当

3、一个类重写对象的equals()方法,但是没有重写它的hashCode方法,或者相反的情况时。②定义一个co-variant版本的equals()或compareTo()方法。例如,Bob类定义其equals()方法为布尔equals(Bob),它覆盖了对象中定义的equals()方法。因为Java代码在编译时解析重载方法的方式,在运行时使用的几乎总是在对象中定义的这个版本的方法,而不是在Bob中定义的那一个(除非显式将equals()方法的参数强制转换为Bob类型)。因此,当这个类的一个实例放入到类集合中的任何一个中时

4、,使用的是Object.equals()版本的方法,而不是在Bob中定义的版本。在这种情况下,Bob类应当定义一个接受类型为Object的参数的equals()方法。2.2检测:忽略方法返回值这个检测器查找代码中忽略了不应该忽略的方法返回值的地方。这种情况的一个常见例子是在调用String方法时,例如:1StringaString="bob";2b.replace('b','p');3if(b.equals("pop"))这个错误很常见。在第2行,程序员认为他已经用p替换了字符串中的所有b。确实是这样,但是他忘记了字符串

5、是不可变的。所有这类方法都返回一个新字符串,而从来不会改变消息的接收者。2.3检测:Null指针对null的解引用(dereference)和冗余比较这个检测器查找两类问题。它查找代码路径将会或者可能造成null指针异常的情况,它还查找对null的冗余比较的情况。例如,如果两个比较值都为null,那么它们就是冗余的并可能表明代码错误。FindBugs在可以确定一个值为null而另一个值不为null时,检测类似的错误,例如:1Personperson=aMap.get("bob");2if(person!=null){3p

6、erson.updateAccessTime();4}5Stringname=person.getName();在这个例子中,如果第1行的Map不包括一个名为“bob”的人,那么在第5行询问person的名字时就会出现null指针异常。因为FindBugs不知道map是否包含“bob”,所以它将第5行标记为可能null指针异常。2.4检测:初始化之前读取字段这个检测器寻找在构造函数中初始化之前被读取的字段。这个错误通常是由使用字段名而不是构造函数参数引起的,例如在构造函数中读取未初始化的字段:1publicclassTh

7、ing{2privateListactions;3publicThing(StringstartingActions){4StringTokenizertokenizer=newStringTokenizer(startingActions);5while(tokenizer.hasMoreTokens()){6actions.add(tokenizer.nextToken());7}8}9}在这个例子中,第6行将产生一个null指针异常,因为变量actions还没有初始化。2.5命名检查对标准Java命令规范的测试:变

8、量名称不应太短;方法名称不应过长;类名称应当以小写字母开头;方法和字段名应当以小写字母开头,等等。2.6未使用的代码检查查找从未使用的私有字段和本地变量、执行不到的语句、从未调用的私有方法,等等。2.7嵌套检查例如:switch语句应当有default块,应当避免深度嵌套的if块,不应当给参数重新赋值,不应该对dou

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。