SonarQube代碼質量檢查工具簡介

Sonar (SonarQube)是一個開源平臺,用於管理源代碼的質量

Sonar 不只是一個質量數據報告工具,更是代碼質量管理平臺

支持Java, C#, C/C++, PL/SQL, Cobol, JavaScrip, Groovy 等等二十幾種編程語言的代碼質量管理與檢測。

Sonar可以從以下七個維度檢測代碼質量,而作爲開發人員至少需要處理前5種代碼質量問題。

  1. 不遵循代碼標準

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

  3. 潛在的缺陷

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

  4. 糟糕的複雜度分佈

    文件、類、方法等,如果複雜度過高將難以改變,這會使得開發人員 難以理解它們, 且如果沒有自動化的單元測試,對於程

    序中的任何組件的改變都將可能導致需要全面的迴歸測試。

  5. 重複

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

  6. 註釋不足或者過多

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

  7. 缺乏單元測試

    sonar可以很方便地統計並展示單元測試覆蓋率。

  8. 糟糕的設計

    通過sonar可以找出循環,展示包與包、類與類之間的相互依賴關係,可以檢測自定義的架構規則 通過sonar可以管理第三方

    的jar包,可以利用LCOM4檢測單個任務規則的應用情況, 檢測藕合。

    爲什麼要選擇sonarQube?

個人使用之後認爲 : sonarQube的優勢如下(相比於阿里編碼規約這種市面上常見類似軟件):

  1. 更加優秀的圖形化界面

    基本上通過界面就可以對自己項目的代碼狀況一目瞭然

  2. 可以查詢出其它軟件難以定位到的問題

    比如 :

    可能導致空指針異常的問題 (對象在進行使用前沒有加空的判斷)

    可能導致內存泄漏的問題, 在try catch 塊裏面,直接使用e.printStackTrace()將堆棧信息打印到內存的

    可能導致的漏洞 : 成員變量使用public定義的

    還有諸如 : 流等未關閉或者是非正常關閉都能夠檢測出來!

    功能非常強大!!

二. 安裝:

2.1 安裝SonarQube web server

  1. 首先確保安裝了jdk1.8 +

  2. 到此鏈接 https://www.sonarqube.org/downloads/

下載sonalqube(下載社區版,是開源的),

我下載的是sonarqube-7.2.1,因爲最新版7.9.1需要jdk11支持

並解壓,解壓完之後的目錄如下 :

 

  1. 到解壓目錄的bin\macosx-universal-64(對應系統)目錄下:

linux、Mac sh sonar.sh start啓動

windows 雙擊StartSonar.bat 啓動

  1. 到瀏覽器界面,輸入 : http://localhost:9000

    如果能訪問表明安裝成功

2.2 安裝數據庫

  1. 版本要求:

    在conf目錄下的sonar.properties文件下:

    有這樣一行配置 :

    #----- MySQL >=5.6 && < 8.0
  2. 爲sonarqube 創建一個數據庫

create database sonar;
-- 創建數據庫
  1. 創建sonarqube用戶並進行授權
CREATE USER 'username'@'host' IDENTIFIED BY 'password'; 
-- 創建用戶並設置密碼
-- username 爲創建的用戶名
-- host 爲對應的主機地址,本地就是localhost
-- password 爲設置的密碼
GRANT ALL ON *.* TO 'username'@'localhost';
-- 對用戶進行授權操作
  1. 修改SonarQube配置文件,添加Mysql相關配置
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false
# 剛剛創建的sonarQube用戶
sonar.jdbc.username=sonar
# 創建用戶對應的密碼
sonar.jdbc.password=sonar
# 設置編碼格式爲UTF-8
sonar.sorceEncoding=UTF-8
# sonar登陸用戶名
sonar.login=admin
# sonar登陸密碼
sonar.password=admin

2.3 重新啓動服務端

  1. 退出 SonarQube 服務端

在之前彈出的cmd窗口執行ctrl + c,

彈出來的提示選擇Y,退出SonarQube服務

  1. 雙擊StartSonar.bat文件, 重新啓動SonarQube

這次因爲要進行數據庫的初始化操作,所以需要的時間可能稍微久一點

  1. 啓動成功後,瀏覽器輸入 : http://localhost:9000 進入界面

  2. 登錄

    點擊界面右上角的登錄按鈕, 進行登錄 :

    初始的賬戶名 : admin

    初始的密碼 : admin

    附 : 一些關鍵配置的修改,如 主機地址,context,端口號等:

    通常情況下使用默認的配置即可!

    文件 /conf/sonar.properties

    #sonar.web.host=0.0.0.0 
    #sonar.web.context=
    #sonar.web.port=9000

三. 使用

3.1. 安裝必要的插件 (漢化包舉例)

點擊 導航欄的 Administration, 選擇Marketplace

搜索 Chinese pack, 點擊install進行安裝

安裝成功後, 重啓 SonarQube !

pack

 

3.2. 開始分析項目代碼源代碼

使用maven的方式進行分析

3.2.1 編輯maven 的settings.xml文件

<settings>
    <pluginGroups>
        <pluginGroup>org.sonarsource.scanner.maven</pluginGroup>
    </pluginGroups>
    <profiles>
        <profile>
            <id>sonar</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <properties>
                <sonar.host.url>http://loaclhost:9000</sonar.host.url>
            </properties>
        </profile>
     </profiles>
</settings>

其中sonar.host.url 值就是 上文啓動的sonar 服務器地址。

3.2.2 對maven項目進行分析

到項目所在的文件路徑下:

使用命令提示符或者是power shell執行 如下命令:

mvn org.sonarsource.scanner.maven:sonar-maven-plugin:3.6.0.1398:sonar

出現: BUILD SUCCESS 標識之後

 

刷新界面查看 :

 

 

3.3 配置分析參數

強制參數:

  1. Server
    sonar.host.url http://localhost:9000
  2. Project Configuration
    sonar.projectKey Maven :
    sonar.sources Maven 默認的源碼路徑

可以配置的參數:

  1. Project identity
    sonar.projectName 項目名稱
    sonar.projectversion 項目版本

  2. Authentication
    sonar.login 分析該項目的用戶名稱
    sonar.password 分析該項目的用戶密碼

    3.4. 程序員用戶使用說明

SonarQube Web管理者通過配置和設置以下參數值對項目源代碼進行:

複雜度、覆蓋率、文檔、重複、問題、可維護性、可靠性、安全性、大小等約束和規範。

sonar中的質量閾管理以下內容。

複雜度
                    複雜度
                    複雜度/類
                    複雜度/文件
                    複雜度/方法
                覆蓋率
                    分支覆蓋
                    集成測試的新分支覆蓋
                    新代碼的分支覆蓋率
                    覆蓋率
                    新集成測試覆蓋
                    新覆蓋率
                    集成測試分支覆蓋
                    集成測試覆蓋
                    集成測試覆蓋行
                    集成測試未覆蓋分支
                    集成測試未覆蓋行
                    代碼覆蓋率
                    集成測試的新行覆蓋
                    新代碼覆蓋率
                    代碼行
                    集成測試的新行覆蓋
                    覆蓋的新代碼
                    總體分支覆蓋率
                    總體新分支覆蓋率
                    總體覆蓋率
                    總體新覆蓋率
                    總體代碼覆蓋率
                    總體新代碼覆蓋率
                    總體覆蓋的新行數
                    總體未覆蓋分支
                    總體未覆蓋的新分支
                    總體未覆蓋代碼
                    總體未覆蓋新行數
                    單元測試忽略數
                    未覆蓋分支
                    集成測試未覆蓋的新分支
                    未覆蓋新分支
                    未覆蓋的代碼
                    集成測試未覆蓋的行
                    未覆蓋的新代碼
                    單元測試持續時間
                    單元測試錯誤數
                    單元測試失敗數
                    單元測試成功 (%)
                    單元測試數
                文檔
                    註釋行
                    註釋 (%)
                    公共API
                    公共註釋的API (%)
                    公共未註釋的API
                重複
                    重複塊
                    重複文件
                    重複行
                    重複行(%)
                問題
                    阻斷違規
                    確認問題
                    嚴重違規
                    誤判問題
                    提示違規
                    違規
                    主要違規
                    次要違規
                    新阻斷違規
                    新嚴重違規
                    新提示違規
                    新違規
                    新主要違規
                    新次要違規
                    開啓問題
                    重開問題
                    不修復的問題
                可維護性
                    新代碼的技術債務
                    壞味道
                    達到可維護性A級所需的工作
                    新增壞味道
                    技術債務
                    技術債務比率
                    新代碼技術債務比率
                    Management
                    Burned budget
                    Business value
                    Team size
                可靠性
                    Bugs
                    新增Bugs
                    可靠性修復工作
                    新代碼的可靠性修復工作
                安全性
                    新增漏洞
                    安全修復工作
                    新代碼的安全修復工作
                    漏洞
                大小
                    類
                    目錄
                    文件
                    方法
                    生成的行數
                    生成的代碼行數
                    行數
                    代碼行數
                    項目
                    語句
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章