基於SonarQube程式碼質量檢查工具總結

貝聊科技發表於2018-07-26
作者 陳彩華
文章轉載交流請聯絡 caison@aliyun.com
複製程式碼

最近公司引入了程式碼自動檢查平臺,技術選型是選擇SonarQube,總結如下:

1 概述

SonarQube(sonar)是一個開源平臺,用於管理原始碼的質量。 SonarQube不只是一個質量資料包告工具,更是程式碼質量管理平臺。 支援java, C#, C/C++, PL/SQL, Cobol, JavaScrip, Groovy 等等二十幾種程式語言的程式碼質量管理與檢測。 SonarQube可以從以下七個維度檢測程式碼質量,而作為開發人員至少需要處理前5種程式碼質量問題。

  • (1) 不遵循程式碼標準 SonarQube可以通過PMD,CheckStyle,Findbugs等等程式碼規則檢測工具規範程式碼編寫。
  • (2) 潛在的缺陷 SonarQube可以通過PMD,CheckStyle,Findbugs等等程式碼規則檢測工具檢 測出潛在的缺陷。
  • (3) 糟糕的複雜度分佈 檔案、類、方法等,如果複雜度過高將難以改變,這會使得開發人員 難以理解它們, 且如果沒有自動化的單元測試,對於程式中的任何元件的改變都將可能導致需要全面的迴歸測試。
  • (4) 重複 顯然程式中包含大量複製貼上的程式碼是質量低下的,SonarQube可以展示 原始碼中重複嚴重的地方。
  • (5) 註釋不足或者過多 沒有註釋將使程式碼可讀性變差,特別是當不可避免地出現人員變動時,程式的可讀性將大幅下降 而過多的註釋又會使得開發人員將精力過多地花費在閱讀註釋上,亦違背初衷。
  • (6) 缺乏單元測試 SonarQube可以很方便地統計並展示單元測試覆蓋率。
  • (7) 糟糕的設計 通過SonarQube可以找出迴圈,展示包與包、類與類之間的相互依賴關係,可以檢測自定義的架構規則 通過SonarQube可以管理第三方的jar包,可以利用LCOM4檢測單個任務規則的應用情況, 檢測耦合。

通過以下介紹如何基於Jenkins和SonarQube完成程式碼質量持續檢測。

2 環境準備

清單如下,安裝方法自行百度谷歌

  • Java環境
  • Maven環境
  • SonarQube平臺
  • Jenkins平臺
  • 資料庫(例如MySQL)

3 環境配置

3.1 Maven

為了基於Maven方式使用Jenkins,需要在Maven安裝目錄下的conf/setting.xml檔案配置關於sonar的配置

    <profile>
      <id>sonar</id>
      <activation>
          <activeByDefault>true</activeByDefault>
      </activation>
      <properties>
           <!-- 平臺登入的賬號的使用者名稱 -->
          <sonar.login>你的使用者名稱</sonar.login>
          <!-- SonarQube平臺登入的賬號的密碼 -->
          <sonar.password>你的密碼</sonar.password>
          <!-- SonarQube訪問地址 -->
          <sonar.host.url>http://sonar.ibeiliao.net:9000</sonar.host.url>
          <!-- 程式碼分析包括哪些檔案需要分析,英文逗號分隔  -->
          <sonar.inclusions>**/*.java,**/*.xml</sonar.inclusions>
      </properties>   
    </profile>
複製程式碼

並使用 sonar 啟用profile

基於SonarQube程式碼質量檢查工具總結

4 使用說明

4.1 Jenkins

建立一個新任務:

  • 步驟1 建立 選擇構建一個自由風格的軟體專案

    基於SonarQube程式碼質量檢查工具總結

  • 步驟2 配置原始碼管理 這裡是使用了Git來做原始碼管理,gitlab作為原始碼庫 專案分支填寫master

    基於SonarQube程式碼質量檢查工具總結

  • 步驟3 配置構建觸發器 這裡配置H 18 * * *,代表每日18點前定時構建

    基於SonarQube程式碼質量檢查工具總結

  • 步驟4 配置構建 第一行使用jacoco外掛,進行程式碼覆蓋率測試 第二行使用sonar外掛,進行程式碼檢測並提交檢測結果

clean org.jacoco:jacoco-maven-plugin:prepare-agent install -Dmaven.test.failure.ignore=true -P dev

sonar:sonar
複製程式碼

基於SonarQube程式碼質量檢查工具總結

  • 步驟5 配置構建後步驟,發郵件 需要在Jenkins提前配置好郵箱
    基於SonarQube程式碼質量檢查工具總結

4.2 SonarQube

SonarQube基本架構圖

SonarQube基本架構圖

SonarQube與專案持續整合架構圖

SonarQube與專案持續整合架構圖

4.2.1 SonarQube說明

4.2.2 開發者本地基於Maven使用SonarQube

Jenkins的每日構建預設是使用master,在開發過程中,有時需要在開發者的開發中的分支進行程式碼檢測 方法:

  • 步驟1 配置Maven 按照 3.1 Maven的配置說明,配置本地的Maven環境

  • 步驟2 觸發檢測 在專案頂層目錄,執行命令:mvn sonar:sonar即可

4.2.3 相關指標說明

基於SonarQube程式碼質量檢查工具總結

指標

4.2.4 程式碼質量閾

基於SonarQube程式碼質量檢查工具總結

程式碼整體質量的統計,可以幫助使用者理解專案是否已經可以投入生產

預設配置(可以根據專案實際情況重新配置):

預設質量閾配置

後期展望

  • 目前只接入了Java程式碼檢測,後期會將客戶端,前端的程式碼檢測也引入
  • 歷史問題結合實際情況分階段、逐步修復
  • 定時總結,減少或避免在新專案,新程式碼引入同樣質量問題

(本文同時發表於作者個人部落格 www.jianshu.com/u/ced6b70c7…)

參考

SonarQube程式碼質量檢查工具

相關文章