SonarQube 代码质量管理
SonarQube 并不是简单地将各种质量检测工具的结果(例如 FindBugs,PMD 等)直接展现给客户,而是通过不同的插件算法来对这些结果进行再加工,最终以量化的方式来衡量代码质量,从而方便地对不同规模和种类的工程进行相应的代码质量管理。
SonarQube 在进行代码质量管理时,会从图 1 所示的七个纬度来分析项目的质量。
SonarQube 可以支持 25+ 种编程语言,针对不同的编程语言其所提供的分析方式也有所不同:
1. 对于所有支持的编程语言,SonarQube 都提供源了代码的静态分析功能;
2. 对于某些特定的编程语言,SonarQube 提供了对编译后代码的静态分析功能,比如 java 中的 class file 和 jar 和 C# 中的 dll file 等;
3. 对于某些特定的编程语言,SonarQube 还可以提供对于代码的动态分析功能,比如 java 和 C# 中的单元测试的执行等。
SonarQube 平台的整体架构如图 2 所示:
远程客户机可以通过各种不同的分析机制,从而将被分析的项目代码上传到 SonarQube server 并进行代码质量的管理和分析,SonarQube 还会通过 Web API 将分析的结果以可视化、可度量的方式展示给用户。
Sonar代码分析工具是以Java Web应用的形式发布的。搭建Sonar代码分析环境需要相应的硬件、JDK、数据库、WEB服务器的要求。相关要求如下:
内存 |
Sonar web应用需要至少500Mb内存 |
磁盘空间 |
项目越大、使用周期越长,Sonar占用的磁盘空间越大。参考:1300万行的项目,持续分析四年,占用10G磁盘空间。参考项目Nemo |
Java平台 |
|
Oracle JDK |
1.5、6、7支持 |
IBM JDK |
不支持 |
GCJ |
不支持 |
Oracle JRockit |
不支持 |
数据库 |
|
Apache Derby |
Sonar 3.2之前版本支持。 Derby和Sonar绑定发布的。尽管Derby数据库支持Sonar的全部功能,(升级不支持)。因此Sonar建议使用企业级数据库,而非Derby。 |
H2 |
同Derby数据库一样。绑定发布,但是不建议使用。 |
Microsoft SQL Server |
支持2005版本,使用jTDS驱动。不支持微软驱动。精简版本支持。 不支持2008版本。但是有用户成功使用。 必须指定区分大小写,指定区分重音。 |
MySQL |
支持5.X和6.X。 |
Oracle |
支持Oracle10G、11G和试用精简版。 |
PostgreSQL |
支持8.3、8.4、9.0、9.1 |
应用服务器 |
|
Jetty 6 |
和Sonar绑定。 |
Apache Tomcat |
支持5.5、6.0、7.0 |
JBoss |
不支持 |
GlassFish |
不支持。 |
浏览器 |
|
IE |
支持IE7+ |
Firefox |
所有版本。 |
Chrome |
近期稳定版本,12版本测试通过。 |
Opera |
未经测试 |
Safari |
近期稳定版本 |
作为一个代码分析平台,Sonar由以下三部分构成:
一个数据库:存放配置信息和分析结果信息;
一个WEB服务器:发布应用,在线浏览、配置分析;
一个客户端:执行源代码分析。
在环境要求部分,已经罗列了Sonar支持的数据库类型。
如果只是做一个测试或Demo,你可以使用Sonar附带的H2或Derby。它们不需要任何安装。
如果使用其他数据,仅仅需要创建一个数据库或表空间,提供Sonar增删改查的数据库权限的帐号。表和索引将在Sonar第一次运行时创建。
笔者推荐使用MySQL数据库,推荐使用数据库编码为UTF-8(具体源代码的字符集设置)。
注:以上内容只作为了解,说明,不重要。
==========================【结合】cqp-车险项目========================
1-有Java环境,要求JDK1.5+
1-安装MySQL数据库(推荐):
安装步骤不做说明。
参考网址:http://www.jb51.net/article/23876.htm
1 准备好JAVA环境。
2 新建MySQL用户与数据库.
用root用户登录,执行此命令:
CREATE DATABASE sonar CHARACTER SET utf8 COLLATE utf8_general_ci;
CREATE USER 'sonar' IDENTIFIED BY 'sonar'; GRANT ALL ON sonar.* TO 'sonar'@'%' IDENTIFIED BY 'sonar'; GRANT ALL ON sonar.* TO 'sonar'@'localhost' IDENTIFIED BY 'sonar'; FLUSH PRIVILEGES; |
3-将 sonar-3.5.1.zip,解压到指定目录(举例:解压到目录C:\app\ sonar-3.5.1 下)
4-修改C:\app\ sonar-3.5.1\conf\sonar.properties:
sonar.jdbc.username: sonar sonar.jdbc.password: sonar sonar.jdbc.url: jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true sonar.jdbc.driverClassName: com.mysql.jdbc.Driver |
5-执行C:\app\ sonar-3.5.1\bin\windows-x86-64\StartSonar.bat(操作系统为windows 7,本机为64位),启动自带的JETTY服务器。打开http://localhost:9000,如果显示sonar主页,则sonar安装成功.
6- 安装中文插件和其它语言插件:将插件JAR包放到目录C:\app\sonar-3.6\extensions\plugins,重启服务即安装成功。
中文插件:sonar-l10n-zh-plugin-1.2.jar
1-将 sonar-runner-1.0.zip,解压到指定目录(举例:解压到目录C:\app\ sonar-runner-1.0 下)
2-修改C:\app\ sonar-runner-1.0\sonar-runner.properties:
sonar.sourceEncoding=UTF-8 Sonar server sonar.host.url=http://localhost:9000 sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8 sonar.jdbc.driver=com.mysql.jdbc.Driver sonar.jdbc.username=sonar sonar.jdbc.password=sonar |
3 添加系统环境变量:SONAR_RUNNER_HOME 值为 C:\app\ sonar-runner-1.0
4 修改环境变量Path,在变量值末尾添加:“;%SONAR_RUNNER_HOME%\bin”
5 命令行里执行 sonar-runner -h 如果显示如下内容,则安装成功。
6- 将sonar-project.properties 配置文件(仅供参考)放在cqp项目根路径下:
项目结构:
1- 命令行里执行 cd ../../cqp 到项目根目录。
2- 然后执行命令:sonar-runner,控制台会打印分析过程。
3- 当出现SUCCESS时,则分析成功。
4- 在IE中打开地址:http://localhost:9000,即可以访问cqp项目的分析结果:
注意:
1- 分析时,如出现提示内容:
修改sonar-project.properties内容(具体依据项目设置字符集为主):
sonar.sourceEncoding=GBK
2- 若提示“内存溢出”
修改sonar-runner-1.0\bin\sonar-runner.bat的文件:
在"%JAVA_HOME%\bin\java.exe"
上一行添加 :set JAVA_OPTS=-Xms128m -Xmx512m
后面添加:%JAVA_OPTS%
中间保留空格区分。