一、代码检查法概念
白盒测试分为静态测试和动态测试。
代码检查法是静态测试的一种,主要是由人工进行,充分发挥人的逻辑思维优势,也可以借助软件工具自动进行。
代码检查包括代码走查、桌面检查、代码审查等,主要检查代码和设计的一致性,代码对标准的遵循、可读性,代码的逻辑表达的正确性,代码结构的合理性等方面;可以发现违背程序编写标准的问题,程序中不安全、不明确和模糊的部分,找出程序中不可移植部分、违背程序编程风格的问题,包括变量检查、命名和类型审查、程序逻辑审查、程序语法检查和程序结构检查等内容。
二、Findbugs工具介绍
静态分析工具有很多,其中商业工具比较有名的有Klocwork,coverity,pc-lint,开源的有splint,Findbugs等。
以下主要介绍一下Findbugs工具。
Findbugs是一款Java静态代码分析工具,与其他静态分析工具(如Checkstyle和PMD)不同,Findbugs 不注重样式或者格式,它专注于寻找真正的缺陷或者潜在的性能问题,它可以帮助java工程师提高代码质量以及排除隐含的缺陷。有了静态分析工具,就可以在不实际运行程序的情况对软件进行分析。
Findbugs运用Apache BCEL 库分析类文件(class文件)而不是源代码,将字节码与一组缺陷模式进行对比以发现可能的问题。Findbugs的检测器已增至300多条,被分为不同的类型,常见的类型如下:
· 正确性(Correctness):这种归类下的问题在某种情况下会导致bug,比如错误的强制类型转换等。
· 最佳实践反例(Bad practice):这种类别下的代码违反了公认的最佳实践标准,比如某个类实现了equals方法但未实现hashCode方法等。
· 多线程正确性(Multithreaded correctness):关注于同步和多线程问题。
· 性能(Performance):潜在的性能问题。
· 安全(Security):安全相关。
· 高危(Dodgy):Findbugs团队认为该类型下的问题代码导致bug的可能性很高。
三、Findbugs安装及使用
Findbugs可以通过三种方法使用,可以通过Ant工具,通过Ant提供的Swing操作界面和作为Eclipse的一个插件来使用。下面介绍第三种。
下载地址:http://Findbugs.sourceforge.net/downloads.html
需要注意的是eclipse的版本问题,目前最新的Findbugs版本为2.0.3.20131118,支持eclipse 版本3.6及以上。
此处我使用的eclipse版本 3.3.2,使用的Findbugs的版本为1.3.9.20090821。
下载完成后,在Eclipse中安装Findbugs插件
1. 安装Findbugs
解压zip文件,将解压后的文件放到Eclipse的Plugin中。重新启动Eclipse 。(使用MyEclipse的话,放在/dropins文件夹下)
2. 打开Findbugs视图
3. 执行Find Bug 任务
右键单击你要检测的工程、包或文件,-->Find Bugs-->Find Bugs。
4. 查看具体错误信息
选中一条问题,点击右键-->Properties。
双击问题,可以定位到具体代码行。
四、设置Findbugs属性
1. Minimum priority to report选择项
选择哪个级别的信息进行显示,有Low、Medium、High三个选择项。
1) High选择项是High级别的提示信息才会被显示。
2) Medium选择项是Medium和High级别的提示信息才会被显示。
3) Low选择项是所有级别的提示信息都会被显示。
2. Report bug categories选择项
在这里是一些显示Bug分类的选择:
Malicious code vulnerability关于恶意破坏代码相关方面的
Correctness关于代码正确性相关方面的
Internationalization关于代码国际化相关方面的
Performance关于代码性能相关方面的
Multithreaded correctness关于代码多线程正确性相关方面的
3. Run Automatically开关
当此项选中后,Findbugs将会在你修改Java类时自动运行,如你设置了Eclipse自动编译开关后,当你修改完Java文件保存,Findbugs就会运行,并将相应的信息显示出来。
当此项没有选中,你只能每次在需要的时候自己去运行Findbugs来检查你的代码。
4. Detector Configuration选择项
在这里你可以选择所要进行检查的相关的Bug Pattern条目,你可以根据需要选择或去掉相应的检查条件。
五、其它分析工具
除FingBugs静态分析工具外,还有PMD和Checkstyle,FingBugs、PMD和Checkstyle三个工具各有不同的特点,联合使用有助于减少误报错误,提高报告的准确率。