本小组选择的是一个开源的Java静态代码分析工具----Findbugs。
与其他静态分析工具(如Checkstyle和PMD)不同,FindBugs 不注重样式或者格式,它专注于寻找真正的缺陷或者潜在的性能问题,它可以帮助java工程师提高代码质量以及排除隐含的缺陷。这部分工作是由吴辉完成的,但是因为我的工作除了写测试用例还要写全部博客,所以,我将吴辉写的文档及参考的博客链接要来,自己学习后整理出今天的博文,我觉得这是一个很好的学习机会。让我除了做好自己的部分还对其他同学负责的板块有更好的了解,如果有写的不正确的地方,希望老师和同学们指出。圣诞节快到了,放上一只狗狗镇楼。
好了,言归正传,首先,我想给大家安利几个超棒的博客,
http://blog.csdn.net/chenlia/article/details/38295835
https://zh.wikipedia.org/wiki/FindBugs
http://blog.csdn.net/gaofuqi/article/details/22679609
FindBugs是一款Java静态代码分析工具,与其他静态分析工具(如Checkstyle和PMD)不同,FindBugs 不注重样式或者格式,它专注于寻找真正的缺陷或者潜在的性能问题,它可以帮助java工程师提高代码质量以及排除隐含的缺陷。有了静态分析工具,就可以在不实际运行程序的情况对软件进行分析。
最新版本是1.3.9.20090821,下载地址http://findbugs.sourceforge.net/downloads.html。
FindBugs运用Apache BCEL 库分析类文件(class文件)而不是源代码,将字节码与一组缺陷模式进行对比以发现可能的问题。FindBugs的检测器已增至300多条,被分为不同的类型,常见的类型如下:
· 正确性(Correctness):这种归类下的问题在某种情况下会导致bug,比如错误的强制类型转换等。
· 最佳实践反例(Bad practice):这种类别下的代码违反了公认的最佳实践标准,比如某个类实现了equals方法但未实现hashCode方法等。
· 多线程正确性(Multithreaded correctness):关注于同步和多线程问题。
· 性能(Performance):潜在的性能问题。
· 安全(Security):安全相关。
· 高危(Dodgy):FindBugs团队认为该类型下的问题代码导致bug的可能性很高。
那么如何在Ecilipse下用findbugs进行静态代码审查呢?
首先使用前必须先安装,那如何安装呢?
下载地址
点击“Help->InstallNew Software”, 点击“Add”,然后在弹出框“Name”输入“findBugs”,“Location”输入“http://findbugs.cs.umd.edu/eclipse”,点击“OK”
放一张安装过程中截图供大家参考:
在Eclipse中使用FindBugs
重新启动eclipse
打开FindBugs视图
整个使用过程并不复杂,主要说说系统检查的具体情况:
使用findbugs没有找到该程序潜在的缺陷,在得到该结果时,我怀疑是我工具安装有误,故对另一个项目进行代码检查
发现可以检测出来问题,故工具安装没有出错,确实是代码本身没有缺陷。该程序是一层一层继承实现,底层直接使用hibernate框架自动生成,本身经过一次代码格式化。
总的来说,Findbugs是一个静态分析工具,它检查类或者JAR 文件,将字节码与一组缺陷模式进行对比以发现可能的问题。Findbugs自带检测器,其中有60余种Bad practice,80余种Correctness,1种 Internationalization,12种Malicious code vulnerability,27种Multithreaded correctness,23种Performance,43种Dodgy。我们还可以自己配置检查规则(做哪些检查,不做哪些检查),也可以自己来实现独有的校验规则(用户自定义特定的bug模式需要继承它的接口,编写自己的校验类,属于高级技巧)。
白盒测试中的静态检查一般是检查编码标准规范,错误列表。编码规范往往团队会根据自己的经验和风格进行设置一些规范。现在很多IDE工具都会在编辑代码的时候实时的提醒是否符合代码风格。错误列表,一般是代码潜在的bug,由于某种代码写法虽然没有语法错误,但是可能存在错误,比如会导致线程死锁。这些都是错误列表应该检查的。静态检查的可操作方式:
1、代码走查:
程序员之间可以隔一定的时间抽取代码进行走查。
走查的时候根据汇总报告,把这些经验汇成列表,作为下次代码走查的依据。
该方式的特点是,手工、多人讨论、操作简单,但是效率会比较低。
2、代码扫描
使用软件对我们的代码进行扫描,查找出潜在的问题。现在有许多商业的工具能够进行扫描,比如Parasoft JTest、Software Analyzer、pclint等工具,往往不同的工具会针对不同的语言。当然也有很多开源的工具。在这里java方面主要推荐Findbugs。Findbugs可以在ANT/GUI/ECLIPSE三个环境中运行,同时也可以编写自己的检测器,功能比较完善。我们平时可以收集自己的或者是别人的开发经验,把它做成检测器来完善Findbugs的检测体系。软件扫描的特点是,机器扫描、效率高,但是没不够灵活,扩展比较负责。
在完成使用findbugs进行静态代码审查后,我的体会是:
Findbugs是基于Bug Patterns概念,查找Java bytecode中潜在bug,目前不检查Java源文件,它的优点就是专注于寻找真正的缺陷和潜在的性能问题,可以帮助工程师提高代码质量和排除隐含缺陷。
缺点就是它不注重代码样式规范,例如上述代码,在格式上应该有些许问题,但Findbugs并不关心,所以最后的结果就是没有错误。
我们在进行静态分析时,应该把Findbugs,PMD和Checkstyle等分析工具联合起来使用,更能减少误报的错误,提高报告的准确性。
欢迎大家评论讨论。