FindBugs安装使用说明.docVIP

  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安装使用说明 ? 1? 用途 FindBugs 是一个java bytecode静态分析工具,它可以帮助java工程师提高代码质量以及排除隐含的缺陷。 例如:未关闭的数据库连接,缺少必要的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 :

文档评论(0)

cj80011 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档