使用 Sonar 进行代码质量管理

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: Sonar 概述 Sonar 是一个用于代码质量管理的开放平台。通过插件机制,Sonar可以集成不同的测试工具,代码分析工具,以及持续集成工具。

Sonar 概述

Sonar 是一个用于代码质量管理的开放平台。通过插件机制,Sonar可以集成不同的测试工具,代码分析工具,以及持续集成工具。

与持续集成工具(例如 Hudson/Jenkins等)不同,Sonar并不是简单地把不同的代码检查工具结果(例如 FindBugsPMD等)直接显示在 Web页面上,而是通过不同的插件对这些结果进行再加工处理,通过量化的方式度量代码质量的变化,从而可以方便地对不同规模和种类的工程进行代码质量管理。

在对其他工具的支持方面,Sonar不仅提供了对 IDE的支持,可以在 Eclipse IntelliJ IDEA这些工具里联机查看结果;同时 Sonar还对大量的持续集成工具提供了接口支持,可以很方便地在持续集成中使用 Sonar

此外,Sonar的插件还可以对 Java以外的其他编程语言提供支持,对国际化以及报告文档化也有良好的支持。



Sonar 的安装

Sonar Codehaus上面的一个开源项目,使用的是 LGPL V3软件许可。我们可以在其官方网站上下载其源代码及安装包。

其源代码需要使用分布式版本控制软件 Git进行检出(Check Out),命令行方式如下:

git clone git://github.com/SonarSource/sonar.git

本文主要介绍 Sonar的使用方法,只需要到Sonar网站下载最近的发行包即可,本文写作时最新的版本为 2.11

下载 zip包后,直接解压到任意目录,由于 Sonar自带了 Jetty 6的应用服务器环境,所以不需要额外的安装就可以使用,值得一提的是 Sonar也支持部署在 Apache Tomcat应用服务器中。

windows 环境中,直接启动 Soanr bin 目录下 windows-x86-64\StartSonar.bat 即可。

然后在浏览器中访问:http://localhost:9000/


1. Sonar 访问界面 

24151936_h09u.jpg 

这样就成功安装并启动了 Sonar,但其中没有安装插件,需要用户下载并安装自己所需要的插件。本节以 Quality Index Plugin为例,介绍如何下载及安装 Sonar插件。

首先访问 Sonar 主页中 Dashboard > Sonar > Documentation > Sonar Plugin Library 路径


2. Sonar 插件的下载 

24151937_5CdV.jpg 

进入 Quality Index 插件,点击下载路径


3. Quality Index Plugin 下载 

24151937_5CdV.jpg 

然后将下载的 sonar-quality-index-plugin-1.1.3.jar文件放到 sonar-2.11\extensions\plugins路径下。重启 Sonar,该插件就在 Sonar的平台上运行并开始工作。

数据库设置

Sonar 默认使用的是 Derby数据库,但这个数据库一般用于评估版本或者测试用途。商用及对数据库要求较高时,建议使用其他数据库。Sonar可以支持大多数主流关系型数据库(例如 Microsoft SQL Server, MySQL, Oracle, PostgreSQL等)

本文以 MySQL为例说明如何更改 Sonar的数据库设置:

  1. MySQL 中创建 sonar 用户
  2. CREATE USER sonar IDENTIFIED BY 'sonar';
  3. GRANT ALL PRIVILEGES ON *.* TO 'sonar'@'localhost' \
  4. IDENTIFIED BY 'sonar' WITH GRANT OPTION;
  5. MySQL 的驱动文件(如 mysql-connector-java-5.1.13.jar)拷贝到 sonar-2.11\extensions\jdbc-driver\mysql目录
  6. 修改 sonar-2.11\conf\sonar.properties文件,用 # 注释原来 Derby 的配置项,并打开 MySQL 数据库的配置项:
  7. # Comment the following lines to deactivate the default embedded database.
  8. #sonar.jdbc.url: jdbc:derby://localhost:1527/sonar;create=true
  9. #sonar.jdbc.driverClassName: org.apache.derby.jdbc.ClientDriver
  10. #sonar.jdbc.validationQuery: values(1)
  11. 〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜省略部分〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
  12. #----- MySQL 5.x/6.x
  13. # Comment the embedded database and uncomment the following 
  14. #properties to use MySQL. The validation query is optional.
  15. sonar.jdbc.url: \
  16. jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8
  17. sonar.jdbc.driverClassName: com.mysql.jdbc.Driver
  18. #sonar.jdbc.validationQuery: select 1
  19. 重启 Sonar

使用 Sonar进行代码质量管理

为了不涉及代码的版权问题及方便读者试验,本节以开源项目 Mojo为例,说明如何使用 Sonar对源代码进行质量管理,在不涉及编译的情况下,本文尽量使用 Sonar Nemo演示功能。

首先,需要从Mojo 首页上下载源代码(本文使用 TortoiseSVN 工具),如图所示,Mojo项目包括了许多工程。


4. Mojo 工程文件夹 

24151938_HvlD.jpg 

其中的每个工程都是一个 Maven项目,如图所示:


5. Maven 工程文件 

24151938_CYFl.jpg 

编译命令如下:

mvn clean install


编译成功后,再使用如下命令:

mvn sonar:sonar


Maven 插件会自动把所需数据(如单元测试结果、静态检测结果等)上传到 Sonar服务器上,需要说明的是,关于 Sonar的配置并不在每个工程的 pom.xml文件里,而是在 Maven的配置文件 settings.xml文件里,具体配置如下:

  <profile>

     <id>sonar</id>

     <activation>

         <activeByDefault>true</activeByDefault>

     </activation>

     <properties>

          <sonar.jdbc.url>

          jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8

          </sonar.jdbc.url>

          <sonar.jdbc.driver>com.mysql.jdbc.Driver</sonar.jdbc.driver>

          <sonar.jdbc.username>sonar</sonar.jdbc.username>

          <sonar.jdbc.password>sonar</sonar.jdbc.password>

         <sonar.host.url>http://localhost:9000</sonar.host.url>

     </properties>

  </profile>


Soanr所需要的数据上传到 Sonar服务器上之后,Sonar安装的插件会对这些数据进行分析和处理,并以各种方式显示给用户,从而使用户方便地对代码质量的监测和管理。

例如 Radiator插件可以根据项目的规模进行排序,并用不同演示显示代码质量:


6. Radiator 插件的显示 

24151939_Jvnn.jpg 

Sonar 插件的配置

前面已经提到,Sonar的主要特色是对不同工具产生的检查结果进行再加工处理,Sonar还向用户提供了对数据进行个性化处理的方法。

本节以 Technical Debt插件为例说明如何通过设置参数影响最后的报告结果。首先了解一下这个插件中的技术债务的概念,这个概念最早是在 1992 年由 Ward Cunningham在他的论文“The WyCash Portfolio Management System”中提出的,之后被软件工程界接受并推广,《重构》的作者 Martin Fowler也在其网站上对技术债务有所介绍。其实原理可以理解为出来混早晚要还的,当前不规范的代码,会对以后产品修改的成本造成影响。

Soanr Technical Debt插件提供了默认的计算公式,通过对其中的权重参数进行配置,可以适应不同公司和项目对技术债务的计算。


7. Technical Debt 计算公式 

24151939_zcPE.jpg 

以上的各项数据指标,可以根据自己公司和项目的不同情况进行设置,如图所示:


8. Sonar 配置界面 

24151940_JsgH.jpg 

例如默认参数下同一个项目的技术债务指标如下:


9. 默认参数下 Technical Debt结果 

24151941_2NLc.jpg 

修改了参数后的结果为:


10. 配置参数后 Technical Debt结果 

24151941_vCTN.jpg 

可见将 Average time to cover complexity of one (in hours) 0.2修改为 0.01后,Coverage的权重变小了,从而达到忽略单元测试覆盖率的作用。不同的公司和项目可以根据需要调整各自的参数,参数的调优和策略不在本文的讨论范围之内。

通过以上的示例可以看出,Sonar使用不同类型的图表显示给用户代码质量的结果,并且这些图表不是简单地对单元测试覆盖率或者静态检测工具的结果进行显示,而是根据软件工程理论进行了二次加工后的结果,更加科学和直观。

结束语 

Sonar 为代码的质量管理提供了一个平台,对传统的代码静态检测如 PMDFindBugs等工具进行整合,可以说是目前最强大的代码质量管理工具之一。

文章出处: IBM developerWorks

参考:

  开发工作中使用的软件列表

  懒人可以用Automator提高工作效率

  使用脚本简化工作

  程序员要学会偷懒---正确运用自动化技术

  如何使用搜索技巧来成为一名高效的程序员

   [《人件》摘录]: 生产力:赢得战役和输掉战争


相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
Java p3c
sonar入门:使用阿里规范扫描代码质量
sonar入门:使用阿里规范扫描代码质量
1316 0
sonar入门:使用阿里规范扫描代码质量
|
4月前
|
数据可视化 搜索推荐 JavaScript
SonarQube:解析代码质量,提升开发效率
在软件开发领域,代码质量管理是至关重要的。本文将介绍静态代码分析工具 SonarQube 的概念与实践,探讨其在代码质量管理中的作用和优势。我们将深入理解 SonarQube 的工作原理,了解如何通过该工具检测、评估和改善代码质量,以提高软件开发效率和可维护性。
|
SQL 算法 Java
代码质量管理平台实战| SonarQube 安装、配置及 JaCoCo、Maven 集成
代码质量管理平台实战| SonarQube 安装、配置及 JaCoCo、Maven 集成
|
安全 jenkins 关系型数据库
SonarQube代码质量扫描持续集成
本篇内容记录了sonarqube的下载、配置、启动等操作步骤。
276 0
SonarQube代码质量扫描持续集成
|
Java jenkins 持续交付
SonarScanner 整合 SonarQube 代码质量检查完美方案
本篇内容记录了对SonarScanner、SonarQube 的代码检查。
242 0
SonarScanner 整合 SonarQube 代码质量检查完美方案
|
SQL Java 关系型数据库
代码质量管理平台实战| SonarQube 安装、配置及 JaCoCo、Maven 集成
![](https://ceshiren.com/uploads/default/original/3X/0/6/06250bd7e85b93784a37a6c492aa05bee2d77ef3.jpeg) SonarQube 是一个用于代码质量管理的开源平台,用于管理源代码的质量。同时 SonarQube 还对大量的持续集成工具提供了接口支持,可以很方便地在持续集成中使用 SonarQube。
|
Java Maven
Maven项目: 集成SonarQube进行代码审查
Maven项目: 集成SonarQube进行代码审查
430 0
Maven项目: 集成SonarQube进行代码审查
|
Oracle 关系型数据库 Java
白盒测试工具 - sonar的安装、配置与使用入门手册,用sonar检查代码质量实战演示
白盒测试工具 - sonar的安装、配置与使用入门手册,用sonar检查代码质量实战演示
497 0
白盒测试工具 - sonar的安装、配置与使用入门手册,用sonar检查代码质量实战演示
|
安全 Java jenkins
Jenkins Pipeline集成Sonar进行代码质量检测
Jenkins Pipeline集成Sonar进行代码质量检测 简介 jenkins pipeline Jenkins Pipeline (或简称为 "Pipeline" )是一套jenkins插件,将持续交付的实现和实施集成到 Jenkins 中。
|
Java 关系型数据库 MySQL
基于Win10极简SonarQube C#代码质量分析
博客有些好些时间未更新了,这几个月的时间里,离开了实习的公司、大学毕了业、来了新公司、转了户口,有点忙,最近总算稍微闲下来了,打算重新拾起博客,坚持写下去。 言归正转,什么是SonarQube ?  SonarQube(曾用名Sonar(声纳))是一个优秀的开源代码分析系统管理系统,支持超过25+种编程语言,对.Net Core当然也是支持的。
1435 0