三味猪屋

SonarQube自动化代码审查工具搭建

邂逅SoarQube:
1、人工代码审查费时费力。
2、美国老是使用拖拽式声呐(sonar)在中国周边海域窥视。
3、SonarQube开源且自搭环境,可自由掌控。
以上有点牵强,不管怎么说,反正现在已经选择了SonarQube,就用好它吧。😊


SonarQube是一个开源的代码质量管理系统,与当今众多的代码质量管理工具相比,SonarQube更具有特色和竞争力,其优势主要体现为:它是一个开源的代码质量管理系统,支持 25+ 种语言,可以通过使用插件机制与 eclipse 和 JIRA 等其他外部工具集成,从而实现了对代码的质量的全面自动化分析和管理。
SonarQube的主要特性:
1、通过插件扩展
支持新的编程语言、添加规则引擎、计算更复杂的度量指标,这些都可以借助强大的插件扩展机制。目前已经有超过50个插件可用。通过插件机制,Sonar 可以集成不同的测试工具,代码分析工具,以及持续集成工具,比如pmd-cpd、checkstyle、findbugs、Jenkins。通过不同的插件对这些结果进行再加工处理,通过量化的方式度量代码质量的变化,从而可以方便地对不同规模和种类的工程进行代码质量管理。
2、支持多种编程语言
借助插件,目前已经支持超过25+种的编程语言,包括:Java,C#, C/C++, PL/SQL, Cobol, ABAP, Objective-C等。
3、集成CI
同时 Sonar 还对大量的持续集成工具提供了接口支持,可以很方便地在持续集成中使用Sonar
4、围绕着代码质量
SonarQube是一个Web应用程序(B/S)。规则、警告、例外、设置……都可以在线配置。通过自己的数据库,SonarQube不仅仅是展示各项指标的综合结果,同时也结合历史质量数据。
5、国际化
Sonar 的插件还可以对 Java 以外的其他编程语言提供支持,对国际化以及报告文档化也有良好的支持。

SonarQube的主要作用:
通过sonar可以有效检测以下在程序开发过程中的七大问题:
Developers’ Seven Deadly Sins
1、潜在的bug(Bugs and Potential Bugs)
sonar可以通过PMD,CheckStyle,Findbugs等等代码规则检测工具检测出潜在的bug。

2、违反代码标准(Coding Standards Breach)
sonar可以通过PMD,CheckStyle,Findbugs等等代码规则检测工具规范代码编写。
3、重复代码(Duplications)
显然程序中包含大量复制粘贴的代码是质量低下的,sonar可以展示源码中重复严重的地方。

4、单元测试缺失(Lack of Unit Tests)
sonar可以很方便地统计并展示单元测试覆盖率。

5、糟糕的复杂度分布(Bad Distribution of Complexity)
文件、类、方法等,如果复杂度过高将难以改变,这会使得开发人员难以理解它们,且如果没有自动化的单元测试,对于程序中的任何组件的改变都将可能导致需要全面的回归测试。

6、糟糕的设计(Spaghetti Design)
通过sonar可以找出循环,展示包与包、类与类之间的相互依赖关系。
通过sonar可以检测自定义的架构规则。
通过sonar可以管理第三方库。
通过sonar可以利用LCOM4检测单个任务规则的应用情况。
通过sonar检测耦合。
7、缺乏足够多的注释(Not Enough or Too Many Comments)
没有注释将使代码可读性变差,特别是当不可避免地出现人员变动时,程序的可读性将大幅下降,而过多的注释又会使得开发人员将精力过多地花费在阅读注释上,亦违背初衷。

SonarQube架构以及集成工作流:




详情请参考:https://docs.sonarqube.org/display/SONAR/Architecture+and+Integration

SonarQube安装:
安装前置条件:



更多详情请参考:https://docs.sonarqube.org/display/SONAR/Requirements

安装JDK:
过去Mac上的Java都是由Apple自己提供,只支持到Java 6,并且OSX 10.7开始系统并不自带(而是可选安装)(原自带的是1.6)。后来Apple加入OpenJDK继续支持 Java 6,而 Java 7 将由Oracle负责提供。
在终端中输入java -version可查看当前JDK版本信息,如果还没安装任一JDK,就会提示安装,点击后会跳到oralce java的下载网页。

安装包(注意都是下载mac下的dmg安装包):
JDK 1.6:http://support.apple.com/kb/DL1572
JDK 1.7&1.8:http://www.oracle.com/technetwork/java/javase/downloads/index.html

安装:
双击dmg安装包即可安装。

最终安装目录(版本号根据情况略有不同):
JDK 1.6:
/System/Library/Java/JavaVirtualMachines/1.6.0.jdk
JDK 1.7&1.8:
/Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk
/Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk

MAC下安装多版本JDK和切换几种方式:
通过.bash_profile修改Java环境变量。

1
2
3
4
5
6
7
8
9
10
11
12
#区别在于:此部分是写死路径的
export JAVA_6_HOME=/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
export JAVA_7_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Home
export JAVA_8_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home
#默认JDK 6
export JAVA_HOME=$JAVA_6_HOME
#alias命令动态切换JDK版本
alias jdk6="export JAVA_HOME=$JAVA_6_HOME"
alias jdk7="export JAVA_HOME=$JAVA_7_HOME"
alias jdk8="export JAVA_HOME=$JAVA_8_HOME"

安装MySQL:
方式一:使用安装包安装
下载地址:https://downloads.mysql.com/archives/community/

双击安装

一路向下,记得保存最后弹出框中的密码(它是你mysql root账号的密码)

安装成功还需要额外配置一下:
1、进入系统偏好设置,点击mysql

2、开启mysql服务

3、配置mysql环境变量
在命令行输入mysql -uroot -p命令会提示没有commod not found,此时还需要将mysql加入系统环境变量。

设置完成后需要使bash_profile生效:命令行输入source ~/.bash_profile。
通过mysql -uroot -p登录mysql了,会让你输入密码,密码就是上图显示的账号密码。
登录成功后,你可以通过下面的命令修改密码:

1
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpass');

我的mysql密码已经修改为:12345678
此时登录mysql如下图:

方式二:使用homebrew安装mysql(未完待续)

安装SonarQube:
方式一:使用homebrew安装:

正确启动SonarQube姿势:

通过homebrew安装程序可以同时在usr/local/Cellar或者usr/local/opt内找到,通过实践证明,opt中的包只是Cellar中的引用,包的真正的物理存放地址应该是Cellar。这一点其实对我们没有什么影响,想要表明的是:如果修改包的内部一些配置文件,在这两个地方找到修改是一样的。
现在我们要来找到sonar.properties,修改port端口,如下所示:




完成以上修改,并正确启动SonarQube,在浏览器中输入:localhost:9999就可以打开SonarQube Server,如下图所示:

上图是未登录状态,登录账号和密码也可以通过sonar.properties修改,SonarQube默认的账号和密码为:admin、admin。
下面开始安装SonarQube插件,到本文截止时间,SonarQube支持58种插件。


参考:
https://www.sonarqube.org
https://docs.sonarqube.org/display/HOME/SonarQube+Platform