Sonar使用完整圖文教程(Ubantu服務器、AndroidStudio工程)

在這一篇我們主要介紹Sonar的使用方式,如果你還沒有安裝Sonar的話,可以看一下上一篇內容Sonar的安裝配置教程,詳細的介紹了Sonar服務的安裝配置步驟以及提供了所需的所有安裝包;

如果已經安裝好了Sonar服務就可以開始使用Sonar檢測我們的代碼了,先來溫習一下什麼是Sonar

什麼是Sonar?

Sonar是一個用於代碼質量管理的開源平臺,用於管理代碼的質量,通過插件形式可以支持二十幾種語言的代碼質量檢測,通過多個維度的檢查了快速定位代碼中潛在的或者明顯的錯誤;

Sonar工作原理

Sonar其實是一個Web系統,SonarQube對Sonar進行支持,Sonar可以在網頁上展示靜態代碼的檢測結果,檢測各種代碼語言的規則我們可以自定義,通過Sonar-Scanner這個工具進行代碼檢測;

Sonar檢測維度

Sonar可以從七個維度進行代碼質量檢測,我們可以根據不同維度的嚴重性然後根據我們的經驗做出相應的代碼優化,當然並不是所有維度我們都有必要代碼修改;

  • 代碼規範

    Sonar可以通過PMD、CheckStyle、Findbugs等代碼規則檢測工具來檢測我們代碼是否符合代碼規範;

  • 潛在的缺陷

    Sonar可以通過PMD、CheckStyle、Findbugs等代碼規則檢測工具來檢測我們代碼是否有代碼缺陷(比如空指針是否有判斷、IO流是否有關閉等);

  • 糟糕的複雜度分佈

    文件、類、方法等,如果複雜度過高將難以改變,這會使得開發人員難以理解它們 且如果沒有自動化的單元測試,對於程序中的任何組件的改變都將可能導致需要全面的迴歸測試

  • 重複代碼

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

  • 註釋的檢測

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

  • 單元測試

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

  • 糟糕的設計

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

SonarScanner 配置

打開\sonar-scanner-2.5\conf\sonar-runner.properties文件,配置Mysql連接信息

image

#### 配置環境變量 ####

  • Windows環境下:
1.新建變量,name=SONAR_RUNNER_HOME。value=E:\sonar\sonar-scanner-2.5

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

3.sonar-runner -version,出現以下信息,則表示環境變量設置成功

image

  • Ubantu環境下:
要使環境變量對所有用戶有效,可以修改profile文件

sudo vim /etc/profile 

添加語句

export CLASS_PATH=home\Ailian\sonar\sonar-scanner-3.2\bin

註銷或者重啓可以使修改生效,如果要使添加的環境變量馬上生效

source /etc/profile

查看環境變量是否生效

echo $PATH

下圖顯示錶示環境變量配置成功:
image

sonar-project.properties

配置好上面的環境變量後,我們就可以開始使用Sonar-Scanner進行代碼檢測了

首先進入需要進行檢測的代碼的跟目錄(其實任意目錄都可以)
新建一個sonar-project.properties文件並添加如下內容

# must be unique in a given SonarQube instance
sonar.projectKey=a42531efd6e9f55720e23852322d7293b8b239b3

# this is the name and version displayed in the SonarQube UI. Was mandatory prior to SonarQube 6.1.
sonar.projectName=ProjectName <-- 注意:這裏寫你自己的模塊名稱,用來生成報告用的

sonar.projectVersion=1.0

# Path is relative to the sonar-project.properties file. Replace "\" by "/" on Windows.
# This property is optional if sonar.modules is set. 

sonar.sources=.
# Encoding of the source code. Default is default system encoding

#sonar.sourceEncoding=UTF-8

#sonar.java.binaries=../../../out/target/common/obj

說明:

  • sonar.projectkey

projectkey屬性可以在我們之前安裝的sonar服務器上生成一個key
image

生成對應的Key:

image
生成key之後拷貝到上面的配置文件對應的屬性中

  • sonar.projectName

生成檢測報告時的報告標題名稱

  • sonar.projectVersion

對應生成報告的版本號

  • sonar.sources

檢測代碼的路徑

使用sonar-scanner掃描代碼

  • Ubantu環境下
    在當前目錄執行:sonar-scanner ,便開始掃描了,如果有報錯,根據具體的錯誤檢查你的環境配置是否正確。掃描時間根據你的模塊代碼規模而定,大家幾十秒到幾分鐘不等:
    image
    image

Windows環境下AndroidStudio中使用Sonar

對於windows下的AS工程,可直接通過sonar lint的插件,對模塊或者文件或整個工程進行代碼掃描,直接在AS查看掃描結果,操作如下:
- 安裝sonar lint插件:File -> Settings -> Plugins 輸入查找SonarLint,然後安裝插件,安裝完後重啓Android Studio
image
image

  • 然後再對Sonar Lint進行配置:
    File菜單 -> Settings -> Other Settings -> SonarLint General Settings,在右邊的SonarQube Servers列表添加一個服務器信息:
    配置名稱自己隨便取一個, 類型選擇SonarQube,服務器url填寫:http://localhost:9000 認證類型選擇token認證,token值就是上面說的key值。
    image

  • 然後再 Sonar Lint Project Settings菜單下,配置你的項目信息,比如project名稱,使用的sonarQube服務器配置選擇等(如果有多個sonar服務器可選的話,是可以選擇性配置的)。
    image
    image

  • 配置好後,直接在待掃描的文件/文件夾/模塊/工程 上點擊右鍵,選擇Analyze -> Analyze with SonarLint,底下工作區就會回顯掃描結果以及修改建議。根據結果及修改建議,修改你的代碼,修正一些潛在問題。
    image

image

Ubantu環境下AndroidStudio中使用Sonar

  • linux環境下AS工程命令行編譯使用方法:
    相比之下,linux下AS工程編譯配置會簡單很多。

  • 在project的根目錄下的build.gradle文件中添加以下配置:(這裏的project version主要用來在後臺分析報告時跟蹤版本變化情況的,可根據自己的需配置)

plugins {
 id "org.sonarqube" version "2.6"
}


sonarqube {

    properties {
 property 'sonar.projectVersion', '2.0'
    }

}
  • 執行以下命令開始掃描:
./gradlew sonarqube -Dsonar.host.url=http://localhost:9000 -Dsonar.login=xxx
  1. 查看掃描結果:
    登錄sonar服務器查看,跟前面的掃Android 源碼工程的方式一致。

掃描結果

image

SonarQube有一個好處,可以根據project的配置,跟蹤代碼質量的變化,比如本次掃描相比上次掃描,質量是提高了還是降低了?掃描出來的潛在的缺陷是增加了還是減少了,以及整個以時間軸爲橫軸的質量變化趨勢。如下圖:

image
檢出出來的潛在問題,也會比較友好的方式呈現,並給予明確的說明,以及修改建議,如下圖:

image

當然我們可以從頁面上看到更多的掃描結果,而且會給出原因比如有可能產生空指針異常,流的關閉位置不對等等,同時點擊後面的“…”會給予相應的錯誤提示及修改建議,掃描規則可以自定義,我們也會根據實際情況,不斷優化我們的掃描規則,以使得發現更多的我們需要關注的潛在問題點。

總結

通過使用SonarQube,能提前暴露潛在bug和漏洞,讓程序更穩定。能提前暴露代碼的邏輯和架構問題,可以思考如何寫能提高代碼質量,如何讓代碼邏輯更清晰。在一定程度上可以減少測試的時間。
Sonar的檢測規則我們可以自己定義,我上面使用的是sonar默認的規則;

上一篇:Sonar在Windows下的安裝配置(圖文 附安裝包)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章