在最新的《
关于代码审查的几点建议》中再次提到了代码分析:
6、尽量使用静态代码分析工具以提高审查效率。
笔者之前也谈到过多次代码分析、代码检查,见:
关于代码评审的微博讨论汇集
#敏捷有效实践# 每日代码自动检查 英文是daily code inspection。对代码质量关注时,安排人工检查code review是需要的,但100% code review需要很多工作量,不是所有的组织值得这样做,而工具自动检查是只需少量人工建设配置,99%的组织值得采用。此实践花费不多,收效不小。
#CMMI和敏捷# 共同点:同级互查,Peer Review,也称同行评审,同级互查是CMMI 三级VER过程域的特定实践,要求定义哪些工作产物采用哪种同级互查形式,开展同级互查,并解决发现的问题,并分析结果。而敏捷实践中,针对代码,要么结对编程,要么代码评审(code review),相关要求进入到DoD。
推荐 Effective Code Review with Sonar 详见 http://t.cn/zHFfH8a
代码审查高效组合推荐
最近在自己电脑上更新了SonarQube,来分享下具体做法。
本文先来介绍最简单的做法:利用Jenkins拉取代码不编译只扫描。
1,首先下载最新的SonarQube,参见http://www.sonarqube.org/downloads/ 当前最新版是4.4
下载后解压,先不着急启动。不知道为什么,SonarQube4.4没有包括SonarQube最新推荐的规则引擎。
2,在相同下载页,下载SonarQube Runner V2.4,解压。采用全部缺省配置,不必修改。
3,下载SonarQube最新推荐的Java分析引擎,参见http://docs.codehaus.org/display/SONAR/Java+Plugin 。
下载最新的Java Plugin V2.4, 然后将其放到 \sonarqube-4.4\extensions\plugins 下, 其中\sonarqube-4.4是SonarQube的安装目录
如果已经运行过分析,此目录下可能存在 Surefire, JaCoCo, and Squid for Java plugins 以及 findbugs,这些老版本Jar都要移除,即是只留下Java Plugin V2.4。findbugs先移除,在第2篇中会介绍使用最新的Findbugs。
4,为快速试用,利用SonarQube缺省数据库,到bin目录下选择合适环境目录来启动SonarQube。
5,利用Jenkins的windows batch command来启动sonar,所以对Jenkins版本没有特别要求,当然使用最新版Jenkins是最好的。笔者的Jenkins是V1.556。
6,在Jenkins中创建Job,选择“构建一个自由风格的软件项目”
7,在源码管理中加入源码的位置,笔者使用的是SVN,选择Subersion,输入Repository URL
8,在构建触发器中,笔者选择了Build periodically,输入H H * * *, 意味着每天在Jenkins空闲的时候执行一次
9,在构建部分,选择增加构建步骤,选择Execute Windows batch command, 在命令框中输入
SonarQube Runner V2.4安装位置\bin\sonar-runner.bat
10,配置项目,在要分析的源代码根目录(与Repository URL要对应一致)下新建名为 sonar-project.properties 的文件,至少包括如下:
# required metadata ,Keqiang:AgileJerryPomodoro是笔者项目的Key
sonar.projectKey=Keqiang:AgileJerryPomodoro
#AgileJerryPomodoro是笔者项目的名称
sonar.projectName=AgileJerryPomodoro
sonar.projectVersion=0.5.0
# path to source directories (required),从源代码根目录为基准
sonar.sources=src
11,将
sonar-project.properties 加入到SVN。
12,到Jenkins中立即构建 刚刚建立的Job
13,访问 http://localhost:9000 来看看SonarQube的结果
说明1:以上利用了SonarQube的缺省规则集:Sonar way,共115条规则,这是sonarqube多年来积累的精华规则。
SonarQube当前已经明确宣称:“ We highly recommend that you limit your Quality Profiles to from the SonarQube engine
because we believe they are faster, more accurate (fewer false positives and false negatives), and more usable
(they have better descriptions, etc)."
说明2:
Squid, Surefire and Jacoco have been rolled into this Java plugin
. from Java plugin V2.4
以上动作最多1小时就能完成,对于Java,就能得到业界最先进的代码检查结果。
通过结果再来学习干净代码,是事半功倍的做法。