用checkstyle实现svn的代码规范性检查

来源:互联网 发布:链表和动态数组的区别 编辑:程序博客网 时间:2024/04/28 13:39
原文地址:http://home.lupaworld.com/home-space-uid-263077-do-blog-id-236398.html


“代码的规范性与软件缺陷是有紧密联系的,质量高的代码

将直接提高软件的质量”。相信每一个软件企业的研发部门都有类似于《XX语言开发规范》的文档,但究竟有多少人会去认真阅读、吃透其中的每一条款,并把其做为代码书写的“圣经”来对待(稍有违反规范的代码将及时重写)?我们需要“用技术手段去解决技术问题”。让我们在最关键的环节—代码仓库SVN—“做手脚”。试想,如果我们能在svn上增加一项功能,在程序员提交代码时进行规范性检查,如果没有通过,将拒绝代码的提交。这将使程序员无法回避“自己所犯的错误”。

  技术实现框架

用checkstyle实现svn的代码规范性检查

  在SVN所在服务器安装一个用于代码检查的工具,此处选择checkstyle(一个开源的著名代码检查工具,可以自定义规则)。如何在commit事件发生的时候调起代码检查工具呢?此处运用svn的hook功能。Svn内置了钩子功能,当有事件发生的时候将自动调起一个程序。我们可以定制这段程序以实现自己的想要的功能。可以接受的事件包括:提交、加锁、解锁、改变等。以“提交”事件举例,当提交事件发生之前将执行hooks中的pre-commit脚本,提交事件之后将执行hooks中的post-commit脚本。于是我们就可以在pre-commit脚本里加入执行checkstyle的命令。此处我们再扩展一下,不直接执行checkstyle,而是先执行一个叫SVNChecker的工具,借助SVNChecker执行CheckStyle。SVNChecker是一个开源的检查框架,他可以做各种检查(不仅仅是代码规范性),并针对各种检查匹配处理模块。也就是说目前虽然只是进行“代码规范性检查”,但是加入SVNChecker后,今后若想进行其他检查,就可以轻而易举的扩展了。

  安装checkstyle

    Checkstyle官方主页:http://checkstyle.sourceforge.net/
    Checkstyle下载页面:http://sourceforge.net/projects/checkstyle/files/checkstyle/5.3/

  请到以上页面去下载checkstyle-5.3-bin.zip,并上传到SVN服务器,解压。解压后目录结构如下:

用checkstyle实现svn的代码规范性检查

  安装svnchecker

  SVNChecker官方主页:http://svnchecker.sourceforge.net/overview.php

  请到以上页面去下载svnchecker-0.3.tar.gz,并上传到SVN服务器,解压。解压后目录结构如下:

用checkstyle实现svn的代码规范性检查 

  配置checkstyle检查规则

  Checkstyle的规则配置文件为xml格式,其定义规则可以到checkstyle主页去查看,其内置了常用的规则,也可以自定义扩展。同时初始安装后自带sun_checks.xml(按照sun的java开发规范定义),免去自定义的麻烦。但是此规则很全,不适用于企业的实际情况。

  下面是一段检查规则——“包名只允许出现小写字母”

                <modulename="PackageName">
                        
<propertyname="format" value="^[a-z]+(\.[a-z]*)*$"/>
                
</module>

   配置svnchecker检查项

  SVNChecker也可以灵活配置,包括:

    1. 针对被检查代码的路径进行设置,做到只检查需要检查的代码
    2. 对如何检查和如何处理进行配置
    3. 对检查规则进行配置
    4. 对成功和失败输出进行配置

  这些都保存在svncheckerconfig.ini文件中,可参考相关文档进行设置。

  下面是一段配置:

[PROJECT]
Main.Regex=^/appfront/src/main/java/
Main.PreCommitChecks=Checkstyle
Checkstyle.FailureHandlers=Console
Checkstyle.Java=/usr/bin/java
Checkstyle.Classpath=$CHECKSTYLE_PATH/checkstyle-5.3-all.jar
Checkstyle.ConfigFile=$CHECKSTYLE_PATH/checks.xml

   对^/appfront/src/main/java/下的文件进行检查,其他文件过滤。检查器为checkstyle。失败时将把信息输出到标准输出。Checkstyle执行的java命令路径为/usr/bin/java,要加载$CHECKSTYLE_PATH/checkstyle-5.3-all.jar,检查规则文件路径为$CHECKSTYLE_PATH / checks.xml

  修改pre-commit hook

  最后,一切设置好后,最关键的就是修改钩子程序了。加入语句:

  $SVNCHECKER_PATH/Main.py PreCommit $1 $2 || exit 1

  当然不要忘记了赋予此文件的执行权限。

  总结

  当有代码提交时,此检查框架将运行,保证违反规则的代码被拒绝。程序员的将看到类似如下的信息:

用checkstyle实现svn的代码规范性检查 

  修改代码后即可提交。

  根据我企业对此框架的运用总结的经验如下:

  1. 不要一次把所有规则都加入,循序渐进,分多批次添加。否则开发人员的修改量会很大。

  2. Svnchecker本身会有些bug,有时候需要手工改svnchecker的代码实现自己的需求。

  3. Svnchecker项目已不维护,改为RepoGuard(http://repoguard.tigris.org/),有兴趣的同学可以进一步研究此框架。

  4. 既然决定用此技术来规范起代码,那么就应该坚持的走下去,即使开发人员提出是否可以放宽要求,也要坚持自己的原则。