ImageVerifierCode 换一换
格式:DOCX , 页数:23 ,大小:25.35KB ,
资源ID:9242257      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/9242257.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(CheckStylePMDFindBugs使用总结.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

CheckStylePMDFindBugs使用总结.docx

1、CheckStylePMDFindBugs使用总结1.PMD, FindBugs, CheckStyle三者的的比较工具目的检查项FindBugs检查.class基于Bug Patterns概念,查找java字节码(.class文件)中的潜在bug主要检查bytecode中的bug patterns,如NullPoint空指针检查、没有合理关闭资源、字符串相同判断错(=,而不是equals)等PMD检查源文件检查Java源文件中的潜在问题主要包括:空try/catch/finally/switch语句块未使用的局部变量、参数和private方法空if/while语句过于复杂的表达式,如不必要的

2、if语句等复杂类CheckStyle检查源文件主要关注格式检查Java源文件是否与代码规范相符主要包括:Javadoc注释命名规范多余没用的ImportsSize度量,如过长的方法缺少必要的空格Whitespace重复代码1. PMD1.1 Ant配置以Ant方式运行PMD规则,以下是Ant配置文件build.xml: 1.2 自定义PMD规则PMD 自带了很多规则集合,并且分类写入不同的 ruleset 文件。其中basic.xml包含了一般要遵守的最佳代码实践,详细规则描述参见PMD规则总结.xlsx.自定义PMD规则集,根据项目需要,用如下方式修改Ant指定的PMD规则文件favorit

3、es.xml: 2 2FindBugs2.1 Ant配置 2.2 自定义FindBugs规则使用过滤器我们就可以定义使用哪些bug检测器和针对哪些类进行检查,过滤器实际是在一个xml文件定义的,即上述Ant配置文件中的findbugs_inlude_filter.xml和findbugs_exclude_filter.xml,配置文件的内容如下: 2.3 findbugs过滤器文件简介2.3.1 Match短语的element:(1) ,它的属性有pattern,code,category并且粒度依次增大。pattern - the type attribute of BugInstance

4、elements code- bug abbreviations category - CORRECTNESS, MT_CORRECTNESS, BAD_PRACTICICE, PERFORMANCE, STYLE 为了兼容以前版本,使用代替,他们有个name属性,如: (2)属性:value,是一个整数,1 to match high-priority warnings, 2 to match medium-priority warnings, or 3 to match low-priority warnings.(3)属性:name,其值是特定的包名或匹配包名的正则表达式。(4)属性:n

5、ame,其值是特定的类名或匹配类名的正则表达式。为了兼容以前的版本,可以在元素上使用属性class和classregex。(5)属性:name: 其值是特定的方法名或匹配方法名的正则表达式。 Params:以逗号分隔的方法参数类型。 Returns:方法返回类型。注:在params和returns属性中, 类名必须写全。(E.g., java.lang.String instead of just String.)(6)属性:name , type(7)指定一个局部变量。属性:name(8) 连接各种match element.2.3.2 一些例子 2.4 FindBugs Bug 描述Fin

6、dbugs是一个静态分析工具,它检查*.class文件或者JAR 文件,将字节码与一组缺陷模式进行对比以发现可能的问题。Findbugs自带检测器,其中有60余种Bad practice,80余种Correctness,1种 Internationalization,12种Malicious code vulnerability,27种Multithreaded correctness,23种Performance,43种Dodgy。FindBugs可以做什么?找出 hash equals 不匹配检测:忽略方法返回值检测:Null 指针对 null 的解引用(dereference)和冗余比较

7、检测:初始化之前读取字段命名检查未使用的代码检查嵌套检查导入语句检查JUnit 测试检查字符串检查括号检查代码尺寸检查终结函数检查克隆检查耦合检查异常检查日志检查OpenClose检查 其它检查其它缺陷构建自己的规则集Bad practice 坏的实践 一些不好的实践,下面列举几个: HE: 类定义了equals(),却没有hashCode();或类定义了equals(),却使用Object.hashCode();或类定义了hashCode(),却没有equals();或类定义了hashCode(),却使用Object.equals();类继承了equals(),却使用Object.hashC

8、ode()。 SQL:Statement 的execute方法调用了非常量的字符串;或Prepared Statement是由一个非常量的字符串产生。 DE: 方法终止或不处理异常,一般情况下,异常应该被处理或报告,或被方法抛出。 Correctness 一般的正确性问题 可能导致错误的代码,下面列举几个: NP: 空指针被引用;在方法的异常路径里,空指针被引用;方法没有检查参数是否null;null值产生并被引用;null值产生并在方法的异常路径被引用;传给方法一个声明为NonNull的null参数;方法的返回值声明为NonNull实际是null。 Nm: 类定义了hashcode()方法,

9、但实际上并未覆盖父类Object的hashCode();类定义了tostring()方法,但实际上并未覆盖父类Object的toString();很明显的方法和构造器混淆;方法名容易混淆。 SQL:方法尝试访问一个Prepared Statement的0索引;方法尝试访问一个ResultSet的0索引。 UwF:所有的write都把属性置成null,这样所有的读取都是null,这样这个属性是否有必要存在;或属性从没有被write。 Internationalization 国际化 当对字符串使用upper或lowercase方法,如果是国际的字符串,可能会不恰当的转换。 Malicious c

10、ode vulnerability 可能受到的恶意攻击 如果代码公开,可能受到恶意攻击的代码,下面列举几个: FI: 一个类的finalize()应该是protected,而不是public的。 MS:属性是可变的数组;属性是可变的Hashtable;属性应该是package protected的。 Multithreaded correctness 多线程的正确性 多线程编程时,可能导致错误的代码,下面列举几个: ESync:空的同步块,很难被正确使用。 MWN:错误使用notify(),可能导致IllegalMonitorStateException异常;或错误的 使用wait()。 No

11、: 使用notify()而不是notifyAll(),只是唤醒一个线程而不是所有等待的线程。 SC: 构造器调用了Thread.start(),当该类被继承可能会导致错误。 Performance 性能问题 可能导致性能不佳的代码,下面列举几个: DM:方法调用了低效的Boolean的构造器,而应该用Boolean.valueOf();用类似 Integer.toString(1) 代替new Integer(1).toString();方法调用了低效的float的构造器,应该用静态的valueOf方法。 SIC:如果一个内部类想在更广泛的地方被引用,它应该声明为static。 SS: 如果一

12、个实例属性不被读取,考虑声明为static。 UrF:如果一个属性从没有被read,考虑从类中去掉。 UuF:如果一个属性从没有被使用,考虑从类中去掉。 Dodgy 危险的 具有潜在危险的代码,可能运行期产生错误,下面列举几个: CI: 类声明为final但声明了protected的属性。 DLS:对一个本地变量赋值,但却没有读取该本地变量;本地变量赋值成null,却没有读取该本地变量。 ICAST: 整型数字相乘结果转化为长整型数字,应该将整型先转化为长整型数字再相乘。 INT:没必要的整型数字比较,如X = Integer.MAX_VALUE。 NP: 对readline()的直接引用,而没有判断是否null;对方法调用的直接引用,而方法可能返回null。 REC:直接捕获Exception,而实际上可能是RuntimeException。 ST: 从实例方法里直接修改类变量,即static属性。3. CheckStyle3.1 Ant配置 !-指定要扫描的源文件,指定写结果的文件类型- formatter type=xml tofile=$basedir/quality_reports/check

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1