用FindBugs来生成html形式的报告整理用FindBugs来生成html形式的报告整理
之前用的是findbugs的eclipse插件,但是在导出报告的时候是xml形式的,很不易阅读,下来讲下用findbugs来导出html的报告。
1. 准备工作
下载到ant和findbugs,我在这里用的是apache-ant-1.7.1-bin.zip和findbugs-1.3.9.zip
下载地址: 和
直接解压到本地磁盘 以解压到 F:\ 为例
配置环境变量
新建ANT_HOME
在path里添加
ANT配置完毕。
同样,findbugs也解压并配置环境变量。...
用FindBugs来生成html形式的
整理
之前用的是findbugs的eclipse插件,但是在导出报告的时候是xml形式的,很不易阅读,下来讲下用findbugs来导出html的报告。
1. 准备工作
下载到ant和findbugs,我在这里用的是apache-ant-1.7.1-bin.zip和findbugs-1.3.9.zip
下载地址: 和
直接解压到本地磁盘 以解压到 F:\ 为例
配置环境变量
新建ANT_HOME
在path里添加
ANT配置完毕。
同样,findbugs也解压并配置环境变量。
2. 开始任务
编写ant脚本,即build.xml
3. 生成Findbugs Report
运行cmd打开DOS窗口,进入到build.xml所在目录,键入命令ant findbugs回车即可。
4. 可能遇到的问题
由于工程比较大,所以在导出html的过程中有可能产生一个空白的html。此时原因可能是JVM内存的错(堆栈信息之类的),此时将
的jvmargs属性改大,如改为jvmargs="-Xmx1000m",其实此属性是可选的,也可以省略。
5. 部分属性参数说明
关于findbugs任务的详细说明,如下:
class 嵌套元素指定要分析的类。这个元素必须指定一个location属性,location属性的名字为archive文件(jar,zip等)、目录或者class文件。可以为一个findbugs元素指定多个class元素。
auxClasspath 可选的嵌套元素,用于指定要分析的类所引用的类,但是并不对引用的类进行分析。
sourcePath 可选的嵌套元素,指定Java源代码的目录。
home 必须的属性,findbugs的安装目录。
quietErrors 可选的布尔型属性。如果是true的话,报告严重的分析错误和丢失的类。默认情况下为false。
reportLevel 可选的属性。指定优先级别。如果是low的话,那么报告所有的bug,如果是medium(缺省值),报告medium和high优先级的bug。
output 可选属性,设置输出格式。
stylesheet 可选属性,指定生成html时使用的样式。
sort 可选属性,如果输出属性设置为text,该属性指定是否对输出结果根据class进行排序,默认为true。
outputFile 可选属性,指定输出文件。
debug 可选的布尔型属性,是否打印分析过程中的日志。默认值为false。
effort 设置分析工作的等级,可以为min、default和max。
conserveSpace 和min effort一样的功能。
workHard 和max effort一样的功能。
visitors 可选属性,指定逗号分隔的列表,指定要运行的detectors。
omitVisitors 可选属性,忽略detectors。折合visitors属性类似,只是不指定不运行哪些detectors。
excludeFilter 可选属性,指定排除的Filter。
includeFilter 可选属性,指定包含的Filter。
projectFile 可选属性,指定项目的名称。
jvmargs 可选属性,指定JVM变量。
systemProperty 系统属性。
timeout 可选属性,指定超市的时间,默认为600,000毫秒,即10分钟。
failOnError 可选属性,指定是否在运行FindBugs出现异常时停止构建过程,默认为false。
errorProperty 可选属性,如果在运行FindBugs时发生错误,指定属性的值为true。
warningsProperty 可选属性,如果在运行FindBugs时发生警告,指定属性的值为true。
6. 其他
其实最重要的还是FindBugs可以帮助我们找出哪些Bugs。
但是FindBugs的Bug描述是在太多,可以参考:
附:Findbugs生成常规问题说明
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。
本文档为【用FindBugs来生成html形式的报告整理】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。