天天看點

SonarQube代碼品質管理

1、概述

SonarQube是管理代碼品質一個開放平台,可以快速的定位代碼中潛在的或者明顯的錯誤。高品質的管理軟體代碼,及時地對代碼品質進行分析并給出合理的解決方案,也可以通過使用插件機制與 eclipse 和 JIRA 等其它外部工具內建,進而實作了對代碼的品質的全面自動化分析和管理。

2、特性

1.支援25種以上的語言:Java, C/C++, C#, PHP, Flex,Groovy, JavaScript, Python, PL/SQL, COBOL等

2.可以用在Android開發中

3.提供重複代碼,代碼标準,單元測試,代碼覆寫,複雜代碼,潛在代碼,注釋以及設計和架構的報表

4.記錄度量曆史以及提供演化圖時間機器(“time machine”)和不同視圖

5.提供全自動的分析:內建Maven,Ant, Gradle以及持續內建工具(Atlassian Bamboo, Jenkins, Hudson等)

6.內建Eclipse開發環境

7.內建外部工具:JIRA, Mantis, LDAP, Fortify等

8.可以通過插件擴充

9.實作SQALE方法論來計算技術負債(technical debt)

10.支援Tomcat,但是Tomcat最終支援是SonarQube 4.1。單獨模式是唯一支援Tomcat的,其中内嵌一個Tomcat伺服器。

3、應用範圍

2009年SonarQube獲得測試工具目錄下Jolt大獎,是全特性的持續內建工具。在Andalusian Autonomous Government,eXo Platform,Apache Software Foundation,Eclipse Foundation中被使用。

目前代碼品質檢測工具的使用比例:

SonarQube代碼品質管理

4、工作原理介紹

SonarQube 并不是簡單地将各種品質檢測工具的結果(例如 FindBugs,PMD 等)直接展現給客戶,而是通過不同的插件算法來對這些結果進行再加工,最終以量化的方式來衡量代碼品質,進而友善地對不同規模和種類的工程進行相應的代碼品質管理。

SonarQube 在進行代碼品質管理時,會從圖 1 所示的幾個緯度來分析項目的品質,

圖 1. 項目品質分析

SonarQube代碼品質管理

通過插件,SonarQube可以從七個次元檢測代碼品質,支援包括java,C#,C/C++,PL/SQL,Cobol,JavaScript,Groovy等等二十幾種程式設計語言,其可以處理代碼中如下的問題:

1.糟糕的複雜度分布

檔案、類、方法等,如果複雜度過高将難以改變,這會使得開發人員難以了解它們,且如果沒有自動化的單元測試,對于程式中的任何元件的改變都将可能導緻需要全面的回歸測試。

2.重複

包含大量複制粘貼的代碼的程式顯然是品質低下的,sonar可以展示源碼中重複嚴重的地方。

3.缺乏單元測試

sonar可以很友善地統計并展示單元測試覆寫率。

4.沒有代碼标準

sonar可以通過PMD,CheckStyle,Findbugs等等代碼規則檢測工具規範代碼編寫。

5.沒有足夠的或者過多的注釋

沒有注釋将使代碼可讀性變差,特别是當不可避免地出現人員變動時,程式的可讀性将大幅下降而過多的注釋又會使得開發人員将精力過多地花費在閱讀注釋上,亦違背初衷。

6.潛在的bug

sonar可以通過PMD,CheckStyle,Findbugs等等代碼規則檢測工具檢測出潛在的bug。

7.糟糕的設計(原文Spaghetti Design)

sonar可以找出循環,展示包與包、類與類之間的互相依賴關系可以檢測自定義的架構規則,可以管理第三方的jar包,可以利用LCOM4檢測單個任務規則的應用情況。

通過SonarQube可以有效檢測以上在程式開發過程中的七大問題。

SonarQube 平台的整體架構如圖 2 所示:

圖 2. SonarQube 的服務架構

SonarQube代碼品質管理

遠端客戶機可以通過各種不同的分析機制,進而将被分析的項目代碼上傳到 SonarQube server 并進行代碼品質的管理和分析,SonarQube 還會通過 Web API 将分析的結果以可視化、可度量的方式展示給使用者。

5、安裝及配置要求

SonarQube的安裝通常需要滿足一定的軟硬體條件,具體要求如下所示:

1. Server 要求

Web server 最少需要 500MB 的記憶體空間,推薦記憶體空間大小 2GB。Sonar 在進行代碼品質分析時,通常大約每 1 KLOC 需要存儲 350KB 左右的資料,是以要盡量為 SonarQube 的 web server 提供大的記憶體。

2. Database 要求

盡管 SonarQube本身自帶嵌入的 Derby 資料庫,但是由于 Derby 比較簡單,是以在生産環境中強烈推薦安裝相應的企業版資料庫,SonarQube支援的資料庫包括: MySQL 5.x+、Oracle10g+、PostgreSQL 9.x 和 MS SQLServer 2005 and 2008,推薦使用 MySQL。

3. Browser 要求

SonarQube支援大多數的浏覽器,包括 Firefox、Internet Explorer 7.x and 8.x and chromed 等,推薦使用 Firefox。

6、代碼品質分析方式

當使用 SonarQube 對某一個項目進行代碼品質管理時,通常可以采用三種不同的方法來發起代碼分析,分别為 

1)Analyzing with SonarQube Runner

2)Analyzing with SonarQube Ant Task 

3)Analyzing with Maven 

這三種方法的主要差別是 , 它們分别适用于不同架構群組織形式的項目,并且其相應的配置檔案的寫法也不盡相同。

下面将分别介紹這三種方式。

Analyzing with SonarQube Runner

通常官網推薦使用 SonarQube Runner 這種方式,因為該方法适用于所有不同架構的項目,包括沒有使用任何源代碼管理工具的項目形式,以及使用各種不同代碼管理工具(SVN、Git、ClearCase 等)和編譯工具(ant,maven)的項目形式,它都能夠适用。

Analyzing with SonarQube Ant Task

本方法主要适用于使用 Ant 工具進行建構、編譯、打包和測試的項目,使用 Ant Task 分析代碼時,

需要下載下傳 SonarQube Ant Task 安裝,在被分析項目代碼的根目錄下,建立并配置 build.xml 檔案。

配置被分析項目代碼的相關資訊,也包含了其所連接配接的對應 SonarQube Server 的資訊,使用相應指令對代碼進行分析。

Analyzing with Maven

當項目使用 Maven 工具管理和建構時,則該項目就适用于本方法。使用 Maven 分析代碼時,需要對pom.xml 中的配置相關SonarQube 伺服器的資訊,然後執行“mvn sonar:sonar”來分析項目代碼的品質。

以上三種方式有不同的針對性,具體使用哪一種方式要根據項目的實際情況來靈活的判斷。

7、代碼品質分析結果解析

當項目代碼被成功分析完成後,SonarQube Server 會将分析的結果存儲在相應的資料庫中,并以報告的形式将分析結果在 web頁面中 中展示給使用者。

下面将以一個簡單項目代碼的分析結果為例,對其各項分析名額進行簡要介紹。

SonarQube代碼品質管理

例如對以上Java項目源碼檔案進行品質分析

分析結果示例-01

SonarQube代碼品質管理

圖 中為 SonarQube 的 Project Dashboard,它是檢視任意項目分析結果的入口,展示了該項目各項名額總的分析資料結果,其中包括項目的重複率,注釋的比例,單元測試覆寫率以及 Issue 的比例等。通過 Dashboard 就可以對項目總體的品質情況有一個全局性的認識。

選擇圖中的各項分析名額,就可以具體的去檢視該項目在這一名額上的詳細情況。

如檢視源碼Functions中的相關函數方法代碼分析:

SonarQube代碼品質管理

可以看到違反相應規則的具體代碼,用紅色标出;點選所違反的具體規則,SonarQube 則會解釋代碼違反規則的具體原因,并給出相應的解決方案以供參考,這對于項目組成員定位問題和解決問題都有很大的幫助。

其實 SonarQube 還提供了很多其他方面的品質次元分析,如複雜度,測試覆寫率等,這裡就不再讨論其具體的參數細節了。 

8、相關配置

8.1 下載下傳

1、jdk(不再介紹)

2、sonarqube:http://www.sonarqube.org/downloads/

3、SonarQube+Scanner:https://sonarsource.bintray.com/Distribution/sonar-scanner-cli/sonar-scanner-2.5.zip

4、mysql資料庫(不再介紹)

8.2 Sonarqube配置

1.下載下傳好sonarqube後,解壓打開bin目錄,啟動相應OS目錄下的StartSonar。如本文示範使用的是win的64位系統,則打開D:\sonar\sonarqube-5.3\sonarqube-5.3\bin\windows-x86-64\StartSonar.bat

2.啟動浏覽器,通路http://localhost:9000,如出現下圖則表示安裝成功。

SonarQube代碼品質管理

一、配置資料庫:

1.打開mysql,建立一個資料庫sonar。

2.打開sonarqube安裝目錄下的D:\sonar\sonarqube-5.3\sonarqube-5.3\conf\sonar.properties檔案

3.在mysql5.X節點下輸入以下資訊

sonar.jdbc.url=jdbc:mysql://lcalhost:3306/ sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance
sonar.jdbc.username=gmsd
sonar.jdbc.password=gmsdtrade
sonar.sorceEncoding=UTF-8
sonar.login=admin
sonar.password=admin
           

url是資料庫連接配接位址,username是資料庫使用者名,jdbc.password是資料庫密碼,login是sonarqube的登入名,sonar.password是sonarqube的密碼

4.重新開機sonarqube服務,再次通路http://localhost:9000,會稍微有點慢,因為要初始化資料庫資訊

5.資料庫初始化成功後登入。

8.3 Sonar配置

1.打開D:\sonar\sonar-scanner-2.5\conf\sonar-runner.properties檔案

2.mysql節點下輸入以下資訊

sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance
sonar.jdbc.username=gmsd
sonar.jdbc.password=gmsdtrade
           

注意:如果測試項目與伺服器不在同一台機子,則需要添加伺服器的IP:

#----- Default SonarQube server
sonar.host.url=http://XXX.XXX.XXX.XXX:9000
           

3.配置環境變量

a.建立變量,name=SONAR_RUNNER_HOME ,  value=D:\sonar\sonar-scanner-2.5

b.打開path,輸入%SONAR_RUNNER_HOME%\bin;

c. sonar-runner -v,出現以下資訊,則表示環境變量設定成功

SonarQube代碼品質管理

8.4 被檢測應用配置

項目應用結構

SonarQube代碼品質管理

1.打開要進行代碼分析的項目根目錄,建立sonar-project.properties檔案

2.輸入以下資訊

sonar.projectKey=test
sonar.projectName=test
sonar.projectVersion=1.0
sonar.sources=src/main/java 
           

其中:projectName是項目名字,sources是源檔案所在的目錄

6.設定成功後,啟動sonarqube服務,并啟動cmd

7.在cmd進入項目所在的根目錄,輸入指令: sonar-runner ,分析成功後會出現下圖

SonarQube代碼品質管理

打開http://localhost:9000/,我們會看到首頁出現了分析項目的概要圖

SonarQube代碼品質管理

9、結束語

代碼品質管理對提高項目品質意義重大。本文簡單的介紹了 SonarQube 的相關概念也使用方式,并從項目的角度講解了使用 SonarQube 進行項目代碼品質管理的流程和配置方式。希望能夠給使用 SonarQube 的讀者提供有價值的參考。