`
kavy
  • 浏览: 891088 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

使用 Sonar 进行代码质量管理

 
阅读更多

使用 Sonar 进行代码质量管理

本文将介绍代码质量管理平台 Sonar 的搭建和使用。Sonar 是一个开源平台,用于管理源代码的质量。您将看到 Sonar 从安装到设置的过程,以及如何在项目中使用 Maven 插件方便地进行代码质量管理。

滕 瑞, 软件工程师, IBM

占 宇剑, 软件工程师, IBM

2012 年 4 月 24 日

  • +内容

Sonar 概述

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

与持续集成工具(例如 Hudson/Jenkins 等)不同,Sonar 并不是简单地把不同的代码检查工具结果(例如 FindBugs,PMD 等)直接显示在 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 访问界面
图 1. Sonar 访问界面

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

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

图 2. Sonar 插件的下载
图 2. Sonar 插件的下载

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

图 3. Quality Index Plugin 下载
图 3. Quality Index Plugin 下载

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

使用 Sonar 进行代码质量管理

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

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

图 4. Mojo 工程文件夹
图 4. Mojo 工程文件夹

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

图 5. Maven 工程文件
图 5. Maven 工程文件

编译命令如下:

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 插件的显示
图 6. Radiator 插件的显示

Sonar 插件的配置

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

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

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

图 7. Technical Debt 计算公式
图 7. Technical Debt 计算公式

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

图 8. Sonar 配置界面
图 8. Sonar 配置界面

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

图 9. 默认参数下 Technical Debt 结果
图 9. 默认参数下 Technical Debt 结果

修改了参数后的结果为:

图 10. 配置参数后 Technical Debt 结果
图 10. 配置参数后 Technical Debt 结果

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

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

 

结束语

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

参考资料

学习

  • 参考 Sonar首页,查看 Sonar 软件的最新信息。
  • 提高 Java 代码质量”(developerWorks,2007 年 4 月):本专题汇集了大量来自代码质量专家们的专业经验、最佳实践以及实用技巧,内容涵盖了软件测试理论、Bug 模式与代码诊断、代码静态分析、测试驱动、单元测试、覆盖率、测试工具和 IBM Rational 测试平台等方面,其丰富的文章、教程及系列专栏将为您的代码质量加油提速!
  • developerWorks Java 技术专区:这里有数百篇关于 Java 编程各个方面的文章。

讨论

  • 加入 developerWorks 中文社区。查看开发人员推动的博客、论坛、组和维基,并与其他 developerWorks 用户交流。

http://www.ibm.com/developerworks/cn/java/j-lo-sonar/

 

分享到:
评论

相关推荐

    使用Sonar进行代码质量管理

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

    SonarLint代码质量检查工具

    它通过连接到SonarQube服务器,获取项目特定的代码质量管理规则,并应用这些规则对当前编辑的代码进行静态分析。这样,开发者可以在提交代码前就对代码质量进行校验,减少了不符合规范的代码进入版本控制系统的机会...

    使用jenkins+sonar进行代码扫描,并发送自定义邮件.docx

    - **SonarQube**:是用于静态代码分析和代码质量管理的平台,它提供了一个网页界面来展示代码质量报告。在执行机上安装SonarQube服务器和MySQL数据库,用于存储分析结果。 - **SonarScanner**:是SonarQube的...

    代码质量管理平台Sonar在软件项目管理中的应用研究.docx

    1. 专业性:Sonar专注于代码质量管理,功能集中且强大,能有效地进行代码质量检查和评估。 2. 插件设计:采用插件式设计,方便扩展和集成第三方工具,同时易于自身融入其他开发环境。 3. Web界面:Sonar基于Web,...

    SonarLint代码审查工具的安装与使用

    Sonar 是一个用于代码质量管理的开源平台,用于管理源代码的质量,通 过 Eclipse 插件形式,可以支持包括 java, C#, C/C++, PL/SQL, Cobol, JS, Groovy 等等二十几种编程语言的代码质量管理与检测。

    sonar-2.14代码质量管理

    《SonarQube 2.14:代码质量管理深度解析》 SonarQube是一款强大的开源平台,专门用于代码质量管理,旨在帮助企业与开发者提升代码质量和安全性。2.14版本作为其历史版本之一,虽然发布相对较早,但其功能和理念...

    Sonar开源的Java源代码管理平台UT覆盖率.pdf

    Sonar 开源 Java 源代码管理平台 UT 覆盖率 Sonar 是一个开源的 Java 源代码管理平台,用于管理 ...Sonar 是一个功能强大且易于使用的开源 Java 源代码管理平台,适合大多数 Java 项目的代码质量管理和项目管理需求。

    sonar+Jenkins 构建代码质量自动化分析平台.doc

    Sonar是一款强大的开源代码质量管理工具,它能够自动分析代码中的缺陷、漏洞和不良编码习惯,支持多种编程语言,包括Java、C/C++、Python、PHP等。Sonar与DevOps工具链的深度整合使得它可以无缝对接Jenkins、TFS/...

    Sonar代码规范

    sonar(SonarQube)是一个开源代码质量管理平台。它通过插件的形式来管理代码,它支持的语言包括:Java,PHP,C#,C等。 7个原则: 1. 不遵循代码标准 sonar可以通过PMD,CheckStyle,Findbugs等等代码规则检测工具...

    sonar使用教程

    总体来说,本教程详细描述了在Linux环境下安装和配置SonarQube服务器的过程,以及如何通过SonarQube进行代码质量的持续检测和分析。掌握这些知识对于进行项目质量控制和提高代码质量具有重要的意义。

    代码检测插件(SonarLint插件)安装使用说明.docx

    【SonarLint插件安装】 SonarLint是一款强大的代码质量检测工具,可在编码阶段就发现潜在的错误和安全漏洞,支持多种IDE,如Eclipse、IntelliJ IDEA和...结合SonarQube,还能实现代码质量管理的标准化和持续改进。

    jenkins持续集成sonar扫描代码

    SonarQube 是一个强大的代码质量管理平台,旨在帮助开发团队确保代码的质量与可维护性。该平台不仅能够进行静态代码分析,还能跟踪项目的进展,并提供有关代码质量趋势的报告。SonarQube 的核心价值主要体现在以下几...

    Sonar代码质量分析插件

    SonarQube是一款强大的代码质量管理平台,主要用于执行静态代码分析,以发现并度量源代码中的潜在缺陷、漏洞和重复代码。它支持多种编程语言,包括Python和Java,这些都是你在标签中提到的关键技术领域。SonarQube...

    Sonar代码质量管理平台 v8.7.1 社区版-源码.zip

    SonarQube是一款强大的代码质量管理平台,主要用于静态代码分析、代码异味检测以及代码复杂度评估。社区版v8.7.1提供了丰富的功能,帮助企业或个人开发者提升代码质量,确保软件项目的可维护性和稳定性。本资源包含...

    sonar平台使用培训教程

    Sonar平台是一款强大的静态代码分析和代码质量管理工具,主要用于检测软件中的代码缺陷、代码异味、潜在的bug、代码复杂度以及代码覆盖率等问题。本教程将详细介绍如何使用Sonar平台进行软件质量控制,帮助开发者...

    sonar安装及使用(1).pdf

    通过在 IDE 中集成 SonarLint,可以实现实时的代码质量检查,而与 SonarQube 服务器的配合,则可以在项目级别进行大规模的代码质量管理和改进。在日常开发中,合理利用这些工具,能有效促进团队的代码一致性,提高...

    SonarQube代码质量管理平台

    SonarQube是一款强大的代码质量管理平台,专门设计用于检测、分析和报告软件代码的质量问题。它结合了静态代码分析和代码审查的特性,为开发团队提供了一种全面的方式来提升代码质量和安全性。SonarQube的核心目标是...

    Sonar-sonarlint使用说明.pdf

    SonarQube的使用涵盖了从代码质量管理到项目分析的完整流程。在软件开发过程中,运用SonarQube进行代码质量的持续监控和管理,能够帮助开发者及时发现和修复代码问题,提高代码质量。通过在开发环境中集成SonarLint...

Global site tag (gtag.js) - Google Analytics