RSS
热门关键字:
当前位置 : 主页>编程开发>软件工程>列表

代码检测:Code Review与CheckStyle

来源:我要研发网 作者: 时间:1970-01-01 点击:



  本文向大家介绍Code Review主要内容,以及流行检查Code Conventions工具。同时,对于目前应用最为广泛CheckStyle应用给出详细介绍,也列举了很多使用CheckStyle最佳实践。 字串4

  一、Code Review & Code Conventions

字串8

  质量是衡量一个软件是否成功关键要素。而对于商业软件系统,尤其是企业应用软件系统来说,除了软件运行质量、文档质量以外,代码质量也是非常重要软件开发进行到编码阶段时候,最大风险就在于如何保证代码易读性和一致性,从而使得软件维护代价不会很高。 字串8

  在软件开发过程中,以下几种情形随处可见:

字串4

  1) 软件维护时间长,而且维护人员积极性不高: 字串3

  做过软件维护开发人员,尤其是在接手不是自己开发产品源码时候,即使有良文档说明,仍然会对代码中冗长、没有注释段落“叹为观止”。理解尚且如此困难,何况要修改或者增加新功能。因此,很多开发人员不愿意进行软件维护工作。 字串7

  2)新开发人员融入团队时间比较长: 字串3

  除了没有良培训、文档等有效机制以外,每个人一套编码风格,也容易造成新成员对于已有代码理解不够,甚至出现偏差。 字串1

  编码规范,作为解决以上问题方案已经得到了很长时间应用。而在产品或者项目实际开发过程中,仅有Code Conventions是不能解决Code问题。它往往和Code Review配合,作为代码质量保证手段。

字串3

  1.1. Code Review层次与内容

字串5

  Code Review就是审查代码质量。根据形式分为两种,一种是交叉代码审查,就是自己代码由他人来检查,就象检查作业一样;另一种是代码会审,就是以会议形式,大家共同审核代码质量。

字串6

  Code Review 有:

字串9

  ·在项目早期就能够发现代码中BUG;

字串4

  ·帮助初级开发人员学习高级开发人员经验,达到知识共享; 字串2

  ·避免开发人员犯一些很常见,很普通错误;

字串5

  ·保证项目组人员沟通;

字串4

  ·项目或产品代码更容易维护; 字串8

  一般情况下,Code Review内容与层次如下: 字串4

  ·编码风格与代码规范一致性:检查代码是否符合编码规范,确保所有人写代码基本一致;

字串5

  ·代码满足基本功能要求:检查代码逻辑实现,以及单元测试编写策略,确认实现功能性需求;

字串9

  ·代码满足性能等非功能性需求:非功能性需求一般不便于测试,需要借助一定工具和Review人员素质,针对编码中对于性能影响瓶颈给出解决方案; 字串6


字串5

  ·去除冗余,提高代码可读性:适当使用 Refactorying技术,去除代码中Bad Smell;如果有需要,可以Refactorying to Pattern。 字串7

  1.2. Code Conventions尴尬境地 字串2

  从Code Review层次分析中我们可以看到,Code Conventions是其基础。而实际情况是,在软件开发中,两者都沦为“宣传口号”,而非切实执行实践。 字串9

  造成这种情形原因有二: 字串1

  1. Code Conventions是开发过程“道德”而非“法律”:很多时候,由于没有有效工具或者辅助手段支持,是否遵守编码规范是依靠开发人员“道德素养”-自觉遵守,而非实际考核指标;

字串9

  2. Code Review基石不牢:在第一种原因影响下,Code Review执行过程中,如果花费了大量时间在代码规范检查上,那么对于更为重要程序执行逻辑、性能、易读性等评审投入精力就有限;而这种情况反过来也使得对于编码规范检查,通常都是走过场。最后,还是每个人一套规范,只要最终交付产品完成指定功能就可以啦。 字串7

  二、CheckStyle 字串5

  面对以上描述Code Conventions尴尬境地,陆续有开发人员提出了自己解决方案。目前,对于JAVA代码规范检查,已经有很多成熟工具,例如CheckStyle、PMD以及Jalopy等[3]。其中,CheckStyle应用非常广泛,众多开源项目都使用它作为检查代码规范工具,尤其是 Jakarta 很多项目,例如Maven、 Torque等。

字串8

  2.1. CheckStyle是什么? 字串1

  CheckStyle是SourceForge下一个项目,提供了一个帮助JAVA开发人员遵守某些编码规范工具。它能够自动化代码规范检查过程,从而使得开发人员从这项重要,但是枯燥任务中解脱出来[1]。

字串8

  2.2. CheckStyle检验主要内容 字串9

  CheckStyle默认提供一下主要检查内容:

字串6

  ·Javadoc注释

字串2

  ·命名约定

字串4

  ·标题

字串6

  ·Import语句 字串3

  ·体积大小 字串9

  ·空白

字串1

  ·修饰符 字串2

  ·块 字串9

  ·代码问题 字串9

  ·类设计 字串7

  ·混合检查(包活一些有用比如非必须System.out和printstackTrace)

字串6

  从上面可以看出,CheckStyle提供了大部分功能都是对于代码规范检查,而没有提供象PMD和Jalopy那么多增强代码质量和修改代码功能。但是,对于团队开发,尤其是强调代码规范公司来说,它功能已经足够强大。 字串9


字串3

  2.3. CheckStyle主要运行方式

字串8

  目前,CheckStyle版本是3.0,与以前版本不同,它配置文件是基于XML而非Properties文件。 字串5

  它3.0版本提供了两种运行方式:

字串5

  ·命令行工具 字串7

  ·ANT任务 字串7

  同时,CheckStyle目前有很多针对流行IDE插件,例如Eclipse、IntelliJ IDEA、JBuilder等。但是,大部分都是基于2.4版本,新版本特性不支持,同时配置也较为复杂。

字串7

  因为一般情况下,如果与开发过程与环境集成起来,编码规范检查会更加有效,因此,作为ANT任务运行方式使用更加普遍。

字串2

  在ANTbuild.xml文件中添加CheckStyle任务步骤如下: 字串3

  1. 将checkstyle-all-3.1.jar拷贝到项目LIB目录;

字串8

  2. 建立配置文件;

字串3

  3. 声明CheckStyle任务:

字串3

<taskdef resource=\"checkstyletask.properties\" classpath=\"${lib}/checkstyle-all-3.1.jar\"/>

字串1

  4. 建立CheckStyle任务:

字串8

<target name=\"checkstyle\">
<checkstyle config=\"${config}/sun_checks.xml\">
<fileset dir=\"${src}\" includes=\" **/*.java\" />
</checkstyle>
</target>

字串2

  2.4. 定制CheckStyle 字串5

  CheckStyle执行基于XML配置文件,它主要组成部分是:

字串6

  ·Module:整个配置文件就是一棵Module树。根节点是Checker Module。

字串9

  ·Properties:它来决定一个Module如何进行检查。每个Module都有一个默认值,如果不满足开发需求,可以设定其它值。 字串3

  下面是一个示例: 字串1

<module name=\"MethodLength\">
<property name=\"max\" value=\"60\"/>
</module>

字串4

  它表示,如果方法或者构造函数长度超过60行,CheckStyle就会报错。而默认值是150行。

字串1

  以下是一段CheckStyle对于Maven项目源文件检查报告:

字串8

Method 'createExpression' is not designed for extension - needs to be abstract, final or empty. 91
Unable to get class information for JellyException. 91
Line has trailing spaces. 93
Line has trailing spaces. 104
Method 'evaluate' is not designed for extension - needs to be abstract, final or empty. 113
Parameter context should be final. 113
Line has trailing spaces. 130
Method 'getExpressionText' is not designed for extension - needs to be abstract, final or empty. 131
Line has trailing spaces. 134
Line has trailing spaces. 135
Method 'toString' is not designed for extension - needs to be abstract, final or empty. 137
Method 'isSupportAntVariables' is not designed for extension - needs to be abstract, final or empty. 156
Method 'setSupportAntVariables' is not designed for extension - needs to be abstract, final or empty. 168
Parameter supportAntVariables should be final. 168
'supportAntVariables' hides a field. 168
字串6

Method 'isValidAntVariableName' is not designed for extension - needs to be abstract, final or empty. 183
Parameter text should be final. 183

  一般情况下,与IDE集成在一起使用时候,点击出错条目,可以跳转到相应代码。

字串4


字串6

  三、CheckStyle最佳实践

字串9

  3.1. Sun’s Code Conventions修改 字串3

  在CheckStyle最新发布版本中,有一个对于SunJava编码规范配置文件信息。但是,其中有很多条目并不一定符合项目开发需要。就算是对于很多优秀开源项目,按照这个规范来进行检查,也会出现成千上万错误。 字串7

  下面提出一些修改意见,是从实际项目执行过程中总结出来,可以作为大家参考。我们以CheckStyle3.0配置文件顺序来介绍: 字串2

  1. 去除对于每个包都有一个package.html文件限制;

字串5

<!--<module name=\"PackageHtml\"/>-->  

字串5

  2. 修改对于JavaDoc Comments限定:对于很多使用Code Generator项目来说,需要将手写代码与生成代码、单元测试代码检查分开进行;

字串5

  3. 修改对于体积大小限制:目前,很多显示器都是17寸,而且打印方面限制也比以前有所改善,同时,由于代码中Factory等模式运用,以及有意义方法名称等约定,默认每行代码长度(80)是远远不能满足要求;对于方法长度等等,也应该根据项目情况自行决定:

字串5

<module name=\"FileLength\"/>
<module name=\"LineLength\">
<property name=\"max\" value=\"120\"/>
</module>
<module name=\"MethodLength\">
<property name=\"max\" value=\"300\"/>
</module>
<module name=\"ParameterNumber\"/>

字串7

  4. 修改对于Throws限制:允许Throws Unchecked Exception以及Throws Subclass Of Another Declared Exception。

字串8

<module name=\"RedundantThrows\">
<property name=\"allowUnchecked\" value=\"true\"/>
<property name=\"allowSubclasses\" value=\"true\"/>
</module>

字串4

  5. 修改成员变量可视性:一般情况下,应该允许Protected Members以及Package Visible Members。

字串6

<module name=\"VisibilityModifier\">
<property name=\"protectedAllowed\" value=\"true\"/>
<property name=\"packageAllowed\" value=\"true\"/>
</module>
字串6

  3.2. CheckStyle应用最佳实践 字串9

  采用CheckStyle以后,编码规范检查就变得及其简单,可以作为一项切实可行实践加以执行。

字串2


字串3

  一般情况下,在项目小组中引入CheckStyle可以按照下面步骤进行: 字串1

  1. 强调Code Review与Code Conventions重要作用;

字串3

  2. 介绍CheckStyle; 字串9

  3. 初步应用CheckStyle:参照CheckStyle附带配置文件,酌情加以剪裁,在项目Ant配置文件中,添加CheckStyle任务,可以单独执行; 字串2

  4. 修改、定型CheckStyle配置文件:按照基本配置文件执行一段时间(2~3周),听取开发人员反馈意见,修改配置信息; 字串9

  5. 作为开发过程日常实践,强制执行CheckStyle:稳定CheckStyle配置信息,同时将CheckStyle任务作为Build依赖任务或者配置源码控制系统(目前,CheckStyle可以与CVS有效集成),使得代码在加入系统之前必须通过检查。 字串7

  同时需要指出是,CheckStyle有效执行需要依赖两个条件:

字串1

  ·Ant广泛应用:CheckStyle基于Ant执行方式比较容易,而且可以在项目内容形成一致执行环境。同时,也比较容易与其它任务,例如Build等发生关联。

字串3

  ·IDE Format Code强大功能:由于CheckStyle本身并没有提供很强大Code Format等功能,因此,需要借助IDE帮助,从而使得在发生错误时候,可以很容易进行修复。目前,主流Java IDE都提供了这方面功能,IDEA在这方面尤其突出。它提供统一、可定义Code Format Template(项目小组内部可以使用统一模板)以及方便快捷键功能(Ctrl Alt T:Format Code, Ctrl Alt O:Optimize Import等)。 字串8

  四、结论

字串2

  利用CheckStyle可以方便对于编码Code Conventions进行检查,同时,也有效地减少了Code Review工作,使得Reviw人员精力更多集中到逻辑和性能检查。 字串9

字串5

最新评论共有 0 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名?
注册
相关文章