• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

代码检测:Code Review与CheckStyle

发布: 2007-11-01 18:16 | 作者: 网络转载 | 来源: 网络转载 | 查看: 202次 | 进入软件测试论坛讨论

领测软件测试网



  在ANT的build.xml文件中添加CheckStyle任务的步骤如下:

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

  2. 建立配置文件;

  3. 声明CheckStyle任务:

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

  4. 建立CheckStyle任务:

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

  2.4. 定制CheckStyle

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

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

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

  下面是一个示例:

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

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

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

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
Method 'isValidAntVariableName' is not designed for extension - needs to be abstract, final or empty. 183
Parameter text should be final. 183


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

 三、CheckStyle的最佳实践

  3.1. Sun’s Code Conventions的修改

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

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

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

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

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

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

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

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

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

<module name="VisibilityModifier">
<property name="protectedAllowed" value="true"/>
<property name="packageAllowed" value="true"/>
</module>

  3.2. CheckStyle应用的最佳实践

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

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

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

  2. 介绍CheckStyle;

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

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

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

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

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

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

  四、结论

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

延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/

22/2<12

关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备2023014753号-2
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网