SonarQube代码质量管理

1、概述
SonarQube是管理代码质量一个开放平台,可以快速的定位代码中潜在的或者明显的错误。高质量的管理软件代码,及时地对代码质量进行分析并给出合理的解决方案,也可以通过使用插件机制与 eclipse 和 JIRA 等其它外部工具集成,从而实现了对代码的质量的全面自动化分析和管理。

2、特性
1.支持25种以上的语言:Java, C/C++, C#, PHP, Flex,Groovy, JavaScript, Python, PL/SQL, COBOL等
2.可以用在Android开发中
3.提供重复代码,代码标准,单元测试,代码覆盖,复杂代码,潜在代码,注释以及设计和架构的报表
4.记录度量历史以及提供演化图时间机器(“time machine”)和不同视图
5.提供全自动的分析:集成Maven,Ant, Gradle以及持续集成工具(Atlassian Bamboo, Jenkins, Hudson等)
6.集成Eclipse开发环境
7.集成外部工具:JIRA, Mantis, LDAP, Fortify等
8.可以通过插件扩展
9.实现SQALE方法论来计算技术负债(technical debt)
10.支持Tomcat,但是Tomcat最终支持是SonarQube 4.1。单独模式是唯一支持Tomcat的,其中内嵌一个Tomcat服务器。


3、应用范围
2009年SonarQube获得测试工具目录下Jolt大奖,是全特性的持续集成工具。在Andalusian Autonomous Government,eXo Platform,Apache Software Foundation,Eclipse Foundation中被使用。
目前代码质量检测工具的使用比例:

 



4、工作原理介绍
SonarQube 并不是简单地将各种质量检测工具的结果(例如 FindBugs,PMD 等)直接展现给客户,而是通过不同的插件算法来对这些结果进行再加工,最终以量化的方式来衡量代码质量,从而方便地对不同规模和种类的工程进行相应的代码质量管理。
SonarQube 在进行代码质量管理时,会从图 1 所示的几个纬度来分析项目的质量,

图 1. 项目质量分析


 
通过插件,SonarQube可以从七个维度检测代码质量,支持包括java,C#,C/C++,PL/SQL,Cobol,JavaScript,Groovy等等二十几种编程语言,其可以处理代码中如下的问题:

1.糟糕的复杂度分布

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

2.重复
包含大量复制粘贴的代码的程序显然是质量低下的,sonar可以展示源码中重复严重的地方。
3.缺乏单元测试
sonar可以很方便地统计并展示单元测试覆盖率。
4.没有代码标准
sonar可以通过PMD,CheckStyle,Findbugs等等代码规则检测工具规范代码编写。
5.没有足够的或者过多的注释
没有注释将使代码可读性变差,特别是当不可避免地出现人员变动时,程序的可读性将大幅下降而过多的注释又会使得开发人员将精力过多地花费在阅读注释上,亦违背初衷。
6.潜在的bug
sonar可以通过PMD,CheckStyle,Findbugs等等代码规则检测工具检测出潜在的bug。
7.糟糕的设计(原文Spaghetti Design)
sonar可以找出循环,展示包与包、类与类之间的相互依赖关系可以检测自定义的架构规则,可以管理第三方的jar包,可以利用LCOM4检测单个任务规则的应用情况。
通过SonarQube可以有效检测以上在程序开发过程中的七大问题。
SonarQube 平台的整体架构如图 2 所示:
图 2. SonarQube 的服务架构

 


远程客户机可以通过各种不同的分析机制,从而将被分析的项目代码上传到 SonarQube server 并进行代码质量的管理和分析,SonarQube 还会通过 Web API 将分析的结果以可视化、可度量的方式展示给用户。

5、安装及配置要求
SonarQube的安装通常需要满足一定的软硬件条件,具体要求如下所示:
1. Server 要求
Web server 最少需要 500MB 的内存空间,推荐内存空间大小 2GB。Sonar 在进行代码质量分析时,通常大约每 1 KLOC 需要存储 350KB 左右的数据,所以要尽量为 SonarQube 的 web server 提供大的内存。
2. Database 要求
尽管 SonarQube本身自带嵌入的 Derby 数据库,但是由于 Derby 比较简单,所以在生产环境中强烈推荐安装相应的企业版数据库,SonarQube支持的数据库包括: MySQL 5.x+、Oracle10g+、PostgreSQL 9.x 和 MS SQLServer 2005 and 2008,推荐使用 MySQL。
3. Browser 要求
SonarQube支持大多数的浏览器,包括 Firefox、Internet Explorer 7.x and 8.x and chromed 等,推荐使用 Firefox。


6、代码质量分析方式
当使用 SonarQube 对某一个项目进行代码质量管理时,通常可以采用三种不同的方法来发起代码分析,分别为 
1)Analyzing with SonarQube Runner
2)Analyzing with SonarQube Ant Task 
3)Analyzing with Maven 

这三种方法的主要区别是 , 它们分别适用于不同架构和组织形式的项目,并且其相应的配置文件的写法也不尽相同。

下面将分别介绍这三种方式。
Analyzing with SonarQube Runner
通常官网推荐使用 SonarQube Runner 这种方式,因为该方法适用于所有不同架构的项目,包括没有使用任何源代码管理工具的项目形式,以及使用各种不同代码管理工具(SVN、Git、ClearCase 等)和编译工具(ant,maven)的项目形式,它都能够适用。

Analyzing with SonarQube Ant Task
本方法主要适用于使用 Ant 工具进行构建、编译、打包和测试的项目,使用 Ant Task 分析代码时,
需要下载 SonarQube Ant Task 安装,在被分析项目代码的根目录下,创建并配置 build.xml 文件。
配置被分析项目代码的相关信息,也包含了其所连接的对应 SonarQube Server 的信息,使用相应命令对代码进行分析。

Analyzing with Maven
当项目使用 Maven 工具管理和构建时,则该项目就适用于本方法。使用 Maven 分析代码时,需要对pom.xml 中的配置相关SonarQube 服务器的信息,然后执行“mvn sonar:sonar”来分析项目代码的质量。

以上三种方式有不同的针对性,具体使用哪一种方式要根据项目的实际情况来灵活的判断。


7、代码质量分析结果解析

当项目代码被成功分析完成后,SonarQube Server 会将分析的结果存储在相应的数据库中,并以报告的形式将分析结果在 web页面中 中展示给用户。
下面将以一个简单项目代码的分析结果为例,对其各项分析指标进行简要介绍。
 

例如对以上Java项目源码文件进行质量分析

分析结果示例-01
 
图 中为 SonarQube 的 Project Dashboard,它是查看任意项目分析结果的入口,展示了该项目各项指标总的分析数据结果,其中包括项目的重复率,注释的比例,单元测试覆盖率以及 Issue 的比例等。通过 Dashboard 就可以对项目总体的质量情况有一个全局性的认识。
选择图中的各项分析指标,就可以具体的去查看该项目在这一指标上的详细情况。

如查看源码Functions中的相关函数方法代码分析:
 


可以看到违反相应规则的具体代码,用红色标出;点击所违反的具体规则,SonarQube 则会解释代码违反规则的具体原因,并给出相应的解决方案以供参考,这对于项目组成员定位问题和解决问题都有很大的帮助。

其实 SonarQube 还提供了很多其他方面的质量维度分析,如复杂度,测试覆盖率等,这里就不再讨论其具体的参数细节了。 


8、相关配置

8.1 下载
1、jdk(不再介绍)
2、sonarqube:http://www.sonarqube.org/downloads/
3、SonarQube+Scanner:https://sonarsource.bintray.com/Distribution/sonar-scanner-cli/sonar-scanner-2.5.zip

4、mysql数据库(不再介绍)


8.2 Sonarqube配置
1.下载好sonarqube后,解压打开bin目录,启动相应OS目录下的StartSonar。如本文演示使用的是win的64位系统,则打开D:\sonar\sonarqube-5.3\sonarqube-5.3\bin\windows-x86-64\StartSonar.bat
2.启动浏览器,访问http://localhost:9000,如出现下图则表示安装成功。
  

一、配置数据库:
1.打开mysql,新建一个数据库sonar。
2.打开sonarqube安装目录下的D:\sonar\sonarqube-5.3\sonarqube-5.3\conf\sonar.properties文件
3.在mysql5.X节点下输入以下信息
sonar.jdbc.url=jdbc:mysql://lcalhost:3306/ sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance
sonar.jdbc.username=gmsd
sonar.jdbc.password=gmsdtrade
sonar.sorceEncoding=UTF-8
sonar.login=admin
sonar.password=admin

url是数据库连接地址,username是数据库用户名,jdbc.password是数据库密码,login是sonarqube的登录名,sonar.password是sonarqube的密码
4.重启sonarqube服务,再次访问http://localhost:9000,会稍微有点慢,因为要初始化数据库信息
5.数据库初始化成功后登录。


8.3 Sonar配置
1.打开D:\sonar\sonar-scanner-2.5\conf\sonar-runner.properties文件
2.mysql节点下输入以下信息

sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance
sonar.jdbc.username=gmsd
sonar.jdbc.password=gmsdtrade

注意:如果测试项目与服务器不在同一台机子,则需要添加服务器的IP:

#----- Default SonarQube server
sonar.host.url=http://XXX.XXX.XXX.XXX:9000

3.配置环境变量
a.新建变量,name=SONAR_RUNNER_HOME ,  value=D:\sonar\sonar-scanner-2.5
b.打开path,输入%SONAR_RUNNER_HOME%\bin;
c. sonar-runner -v,出现以下信息,则表示环境变量设置成功

 


8.4 被检测应用配置

项目应用结构


1.打开要进行代码分析的项目根目录,新建sonar-project.properties文件
2.输入以下信息
sonar.projectKey=test
sonar.projectName=test
sonar.projectVersion=1.0
sonar.sources=src/main/java 
其中:projectName是项目名字,sources是源文件所在的目录
6.设置成功后,启动sonarqube服务,并启动cmd
7.在cmd进入项目所在的根目录,输入命令: sonar-runner ,分析成功后会出现下图
 

打开http://localhost:9000/,我们会看到主页出现了分析项目的概要图


 
9、结束语
代码质量管理对提高项目质量意义重大。本文简单的介绍了 SonarQube 的相关概念也使用方式,并从项目的角度讲解了使用 SonarQube 进行项目代码质量管理的流程和配置方式。希望能够给使用 SonarQube 的读者提供有价值的参考。



猜你喜欢

转载自blog.csdn.net/vtopqx/article/details/78362875