保障代码质量代码分析工具FindBugs介绍.docxVIP

保障代码质量代码分析工具FindBugs介绍.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
保障代码质量:代码分析工具 FindBugs 介绍 摘要:本文介绍了代码分析工具 FindBugs 的功能及使用方法。FindBugs 可以在开发阶段检查出代码中常见但不易觉察的 Bug,通过 FindBugs 有效地帮助开发人员提高代码质量。 FindBugs 简介 FindBugs 是一个静态分析工具,它检查类或者 JAR 文件,将字节码与一组缺陷模式进行对比发现代码中可能存在的 Bug。有了静态分析工具,就可以在不实际运行程序的情况对代码进行分析。FindBugs 不是通过分析类文件的形式或结构来确定程序的逻辑,而是利用字节码分析和很多内置的 bug 模式检测器来查找代码中的常见 bug。它可以帮助您找出代码的哪些位置有意或者无意地偏离了良好的设计原理。 FindBugs 能检查出哪些问题 下面列出了 FindBugs 可以检查出的一些常见的问题: 找出 hash equals 不匹配 这个检测器寻找与 equals() 和 hashCode() 的实现相关的几个问题。这两个方法非常重要,因为几乎所有基于集合的类—— List、Map、Set 等都调用它们。 忽略方法返回值 String aString = bob;b.replace(b, p); String aString = bob; b.replace(b, p); if(b.equals(pop)) 这个错误很常见。在第 2 行,程序员认为他已经用 p 替换了字符串中的所有 b。确实是这样,但是他忘记了字符串是不可变的。所有这类方法都返回一个新字符串,而从来不会改变消息的接收者。 空指针对 null 的解引用(dereference)和冗余比较 Person person = aMap.get(zhangsan);if (person != null) Person person = aMap.get(zhangsan); if (person != null) { person.updateAccessTime(); 4 } 5 String name = person.getName(); 在这个例子中,如果第 1 行的 Map 不包括一个名为“ zhangsan”的人, 那么在第 5 行询问 person 的名字时就会出现 null 指针异常。因为 FindBugs 不知道 map 是否包含“zhangsan”,所以它将第 5 行标记为可能 null 指针异常。 初始化之前读取字段 public class Thing { public class Thing { private List actions; public Thing(String startingActions) { StringTokenizer tokenizer = new StringTokenizer(startingActions); while (tokenizer.hasMoreTokens()) { actions.add(tokenizer.nextToken()); 7 } 8 } 9 } 在这个例子中,第 6 行将产生一个 null 指针异常,因为变量 actions 还没有初始化。 打开 IO 输入输出流没有关闭的问题。 try {boolean try { boolean readerFlag = true; BufferedReader FileReader(d:\\test.txt)); while (readerFlag) { reader = new BufferedReader(new allWordInTxt = reader.readLine(); diTxt = reader.readLine(); diTxt = reader.readLine(); String end = reader.readLine(); if (end == null) { readerFlag = false; break; } } } catch (FileNotFoundException e1) { e1.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } 在这个例子中,对 test.txt 的输入流 reader 开启后一直没有释放。 开启数据库连接没有关闭的问题。 程序中经常会出现开启数据库连接忘记关闭的情况。这种错误不容易发觉, 但是很容易引发数据库连接占用较多,不能连接数据库的问题。通过 FindBugs 可以很轻易地将这个问题排查出来。 其它常见问题 死循环。 在不同类型的变量中使用 equals()判断是否相等。 硬编码问题。 定义从来不会被使用的变量。 一直

文档评论(0)

hao187 + 关注
官方认证
文档贡献者

该用户很懒,什么也没介绍

认证主体武汉豪锦宏商务信息咨询服务有限公司
IP属地上海
统一社会信用代码/组织机构代码
91420100MA4F3KHG8Q

1亿VIP精品文档

相关文档