常用JAVA代码质量静态检查工具_第1页
常用JAVA代码质量静态检查工具_第2页
常用JAVA代码质量静态检查工具_第3页
常用JAVA代码质量静态检查工具_第4页
常用JAVA代码质量静态检查工具_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

常用JAVA代码质量静态检查工具目录软件开发经历反省我们代码中常见几类问题QualityMetricsToolsCheckStylePMDFindBugs我们代码中常见几类问题使用了不规范的变量和方法名

EsbResultModel

validRule(HashMap

orderInfo,ArrayList

orderItems,StringRole);Stringrole要小写类、public方法和常量javadoc的缺失

javadoc中的声明跟实际的方法不一致,例如方法实际只有1个参数,而javadoc里@param定义了多个(估计是方法签名的时候没有同步的修改javadoc)

我们代码中常见几类问题错误的使用/***/和/**/

很多public方法和常量使用了/**/来注释,导致注释内容不能被写入javadoc。而另一方面是错误使用/***/导致错误的内容被写入javadoc存在未被使用的方法和变量

这些不被使用方法和变量名会增加日后bug修改、代码维护的成本\方法超长 一个方法超过150行,是不是太长太复杂了。我们代码中常见几类问题代码中有不少magic-number和magic-string

刘谦的魔术不好看,所以如果你维护的代码跟刘谦的一样,估计你也会抓狂的!Strings=“0000”+Integer.toString(ch,16);0000是什么,16是啥东东,就算是作者3个礼拜也不记得当初写这段代码的用意了。Import了一些不需要的类 提交代码以前请务必OrganizeImports。

我们代码中常见几类问题有些代码的写法不容易理解不一致的代码风格

例如,Stringoneitems[]vsString[]oneitems

前者是C/C++的编码风格;咱们写的是java,就统一用String[]oneitems吧。

NO

EXCUTABLEWhyusingQualityMetricsTools一个软件的生命周期中,80%的花费在于维护几乎没有任何一个软件,在其整个生命周期中,均由最初的开发人员来维护编码规范可以改善软件的可读性,可以让程序员尽快而彻底地理解新的代码……CheckStyleCheckStyle用来检查代码格式、规范、风格检查并强制执行统一的代码风格检查Javadoc检查类、变量、方法的命名检查类和方法的大小检查编码错误,例如magicnumber……Checkstyle-安装Eclipse插件地址

http://eclipse-/updateCheckstyle-启用Checkstyle—配置规范Checkstyle使用效果黄色的区域就是checkstyle检查出有问题的地方(红色表示错误,黄色表示警告)。Checkstyle-注意事项修改EclipseJavaCodeStyleFormatter配置,由于Eclipse默认设置换行后的缩进符号为tab,而Java规范不允许代码中有tab,因为tab在不同的操作系统下的长度占位不同,有的是4个空格,有的是8个空格,因此我们要修改这个配置为空格。

Checkstyle-注意事项PMDPMD提供了一些开发过程中的最佳实践。Possiblebugs-emptytry/catch/finally/switchstatementsDeadcode-unusedlocalvariables,parametersandprivatemethodsSuboptimalcode-wastefulString/StringBufferusageOvercomplicatedexpressions-unnecessaryifstatements,forloopsthatcouldbewhileloopsDuplicatecode-copied/pastedcodemeanscopied/pastedbugsPMD-Exception规则AvoidCatchingThrowableSignatureDeclareThrowsExceptionExceptionAsFlowControlAvoidThrowingRawExceptionTypesAvoidThrowingNullPointerExceptionAvoidRethrowingExceptionDoNotExtendJavaLangErrorDoNotThrowExceptionInFinallyAvoidThrowingNewInstanceOfSameExceptionhttp:///rules/strictexception.htmlPMDPMD中的很多规则会比较有争议,或者跟大家现有的技术框架、代码结构有冲突。大家可以通过自定义的这些规则的级别(Error,Warning)来把握对这些规则的使用程度。FindBugsFindBugs是一个专门分析JAVA代码问题的静态代码扫描工具,它是由一位马里兰大学的博士写的;FindBugs可以发现的问题包括:多线程竞争问题,性能问题,安全问题,代码规范......官方网站是:http:///index.html

FindBugs

当前版本为:1.3.9;FindBugs能做什么Findbugs

是一个静态分析工具,它检查类或者

JAR

文件,将字节码与一组缺陷模式进行对比以发现可能的问题。利用这个工具,就可以在不实际运行程序的情况对软件进行分析。它可以帮助改进代码的质量。Findbugs提供了方便操作的可视化界面,同时也可以作为Eclipse的一个插件来使用,而我们使用得最多的还是作为Eclipse的插件来使用。FindBugs的使用方法Ant/Maven工具;通过Ant提供的Swing操作界面;作为Eclipse的一个插件来使用。FindBugs的Eclipse插件Eclipse的Findbugs插件,可以将Findbugs集成到Eclipse中使用。Findbugs的Eclipse插件安装方法

1.

在线安装安装地址:http:///eclipse2.

离线安装下载Findbugs插件,将它放入Eclipse下的plusin文件夹,然后重启EclipseFindbugs的Eclipse插件使用安装了Findbugs插件后。右击点击你要检查的项目选择【FindBugs】->【FindBugs】进行检查。要查看Findbugs检查出了哪些Bug,可以选择Windows菜单->ShowView->BugExplorer,打开BugExplorer面板。

如果想要查看某个Bug详细的信息,则可以选择Windows菜单->OpenPerspective,然后选择FindBugs就可以打开FindBugs的Properties面板,在这个面板里面可以看到最详尽的Bugs信息。FindBugs的规则检测器(1)Badpractice

(坏的实践)HE:

类定义了equals(),却没有hashCode();或类定义了equals(),却使用Object.hashCode();或类定义了hashCode(),却没有equals();或类定义了hashCode(),却使用Object.equals();类继承了equals(),却使用Object.hashCode()。SQL:Statement

的execute方法调用了非常量的字符串;或PreparedStatement是由一个非常量的字符串产生。DE:

方法终止或不处理异常,一般情况下,异常应该被处理或报告,或被方法抛出。FindBugs的规则检测器(2)Correctness

(一般的正确性问题)NP:

空指针被引用;在方法的异常路径里,空指针被引用;方法没有检查参数是否null;null值产生并被引用;null值产生并在方法的异常路径被引用;传给方法一个声明为@NonNull的null参数;方法的返回值声明为@NonNull实际是null。Nm:

类定义了hashcode()方法,但实际上并未覆盖父类Object的hashCode();类定义了tostring()方法,但实际上并未覆盖父类Object的toString();很明显的方法和构造器混淆;方法名容易混淆。SQL:方法尝试访问一个PreparedStatement的0索引;方法尝试访问一个ResultSet的0索引。UwF:所有的write都把属性置成null,这样所有的读取都是null,这样这个属性是否有必要存在;或属性从没有被write。FindBugs的规则检测器(3)Multithreadedcorrectness

(多线程的正确性)多线程编程时,可能导致错误的代码,下面列举几个:ESync:空的同步块,很难被正确使用。MWN:错误使用notify(),可能导致IllegalMonitorState

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论