歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> 使用 Sonar 進行代碼質量管理

使用 Sonar 進行代碼質量管理

日期:2017/2/28 13:50:24   编辑:Linux教程

本文將介紹代碼質量管理平台 Sonar 的搭建和使用。Sonar 是一個開源平台,用於管理源代碼的質量。您將看到 Sonar 從安裝到設置的過程,以及如何在項目中使用 Maven 插件方便地進行代碼質量管理。

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 訪問界面

這樣就成功安裝並啟動了 Sonar,但其中沒有安裝插件,需要用戶下載並安裝自己所需要的插件。本節以 Quality Index Plugin 為例,介紹如何下載及安裝 Sonar 插件。

首先訪問 Sonar 主頁中 Dashboard > Sonar > Documentation > Sonar Plugin Library 路徑

圖 2. Sonar 插件的下載

進入 Quality Index 插件,點擊下載路徑

圖 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 工程文件夾

其中的每個工程都是一個 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 插件的顯示

Sonar 插件的配置

前面已經提到,Sonar 的主要特色是對不同工具產生的檢查結果進行再加工處理,Sonar 還向用戶提供了對數據進行個性化處理的方法。

本節以 Technical Debt 插件為例說明如何通過設置參數影響最後的報告結果。首先了解一下這個插件中的“技術債務”的概念,這個概念最早是在 1992 年由 Ward Cunningham 在他的論文“The WyCash Portfolio Management System”中提出的,之後被軟件工程界接受並推廣,《重構》的作者 Martin Fowler 也在其 網站上對技術債務有所介紹。其實原理可以理解為“出來混早晚要還的”,當前不規范的代碼,會對以後產品修改的成本造成影響。

Soanr 的 Technical Debt 插件提供了默認的計算公式,通過對其中的權重參數進行配置,可以適應不同公司和項目對技術債務的計算。

圖 7. Technical Debt 計算公式

以上的各項數據指標,可以根據自己公司和項目的不同情況進行設置,如圖所示:

圖 8. Sonar 配置界面

例如默認參數下同一個項目的技術債務指標如下:

圖 9. 默認參數下 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 的下載地址:請點這裡

Copyright © Linux教程網 All Rights Reserved