[食譜好菜] 用 SonarQube 分析 C# 程式碼品質

之前將 SonarQube 裝在 CentOS 上,裝完後發現它無法跟我的幻想一樣地分析 C# Code,要分析 C# Code 還是得要在 Windows 的環境才行,因此我把 SonarQube 移到 Windows Server 上,資料庫就延用 MySQL,執行分析的步驟跟在 CentOS 環境上有一點不一樣,我們就來看看 SonarQube 在 Windows 環境怎麼分析 C# Code。

下載 & 解壓縮 SonarQube

在 Windows 上安裝 SonarQube 要單純的多了,我們到 SonarQube » Download 下載我們想要的版本回來,解壓縮到我們指定的目錄,我下載的是目前的最新版本 6.1。

修改設定檔 \conf\sonar.properties

在安裝目錄下的 conf 資料夾我們可以找到 sonar.properties 設定檔,在設定檔內我們要調整 sonar.jdbc.usernamesoanr.jdbc.passwordsonar.jdbc.url 這三個參數。

另外,由於我們是從外部連接 MySQL 資料庫,預設需要 SSL 連線,但是我們現在只是要方便測試,所以我們在 sonar.jdbc.url 附加 useSSL=false 設定項目,忽略 SSL 連線的限制。

調整防火牆埠號 9000

SonarQube Web UI 預設是 9000 埠號,我們在防火牆設定上新增 Inbound Rule

Rule Type:Port

Protocol and Ports:9000

Name:為這個 Rule 取一個響亮的名字

安裝及啟動 SonarQube 服務

執行下列指令,我們把 SonarQube 安裝成 Windows Service,讓 SonarQube 可以背景自動啟動,也方便我們手動啟動。

%SONARQUBE_HOME%\bin\windows-x86-{32 or 64}\InstallNTService.bat

啟動 SonarQube 服務

確認啟動後,瀏覽 http://{Host}:9000 稍待一會兒之後就可以看到 SonarQube 的 Portal 了。

下載 SonarQube Scanner for MSBuild

要分析 C# Code 我們要需要 SonarQube Scanner for MSBuild,我們下載回來之後解壓縮到我們自己指定的目錄。

附加 Path 系統環境變數

為了方便起見,我們在 Path 系統環境變數附加 MSBuild.SonarQube.Runner 的路徑,順便推薦一下 Rapid Environment Editor 這個系統環境變數的編輯器,用它來修改系統環境變數可說是相當方便,附加之後要記得存檔。

安裝 Visual Studio 2015 任一版本

我們只是要建立一個建置環境,不是要用來開發用的,我們到 Visual Studio Downloads 下載任一個版本,一切按照預設值安裝就可以了。

執行分析 C# Code 的指令

一切就緒之後,我們挑選一個 C# Project,切換到該 Project 目錄底下執行下面的指令進行分析,其中我們還需要指定 Project IndexProject Name

MSBuild.SonarQube.Runner begin /k:"{Project Index}" /n:"{Project Name}" /v:"1.0"
"C:\Program Files (x86)\MSBuild\14.0\Bin\MSBuild.exe" /t:Rebuild
MSBuild.SonarQube.Runner end

執行完畢後,我們可以看到 SonarQube 的 Portal 增加了一個我們指定的 Project。

點進 Project 之後我們最先看到的是一個 Summary 的資訊,總結了 Bugs & Vulnerabilities、Code Smells、Duplications 的分析結果以及預計的修復時數。

Issues 頁籤會有更詳細的 issue 資訊,包括 issue 的原因以及修復的方法。

點擊每一列最右邊的 > 符號,可以打開原始碼,直接指出有問題的程式碼是在哪一行。

Measures 頁籤會顯示包括 Reliability、Security、Maintainability、Duplications、Complexity...等的分析統計數值。

在撰寫程式的過程當中,有一套程式碼品質分析工具在旁邊提醒我們哪裡需要改善?哪裡需要調整?,不僅讓我們有標準可以依循,還有助於提昇程式碼品質,程式碼品質是平常就要做的,即使是借了技術債,也要儘量在事後還債,千萬不要認為「先求有再求好,以後再加就行了。」,先求有再求好,通常好不了;以後再加,通常也不會加。

短期借入技術債或許能快速地發揮軟體的功效,但是這就跟借錢一樣,不可能一直借而不用還,軟體開發技術債的累積對於企業的長期競爭力絕對會有一定的影響。

參考資料

C# 指南 ASP.NET 教學 ASP.NET MVC 指引
Azure SQL Database 教學 SQL Server 教學 Xamarin.Forms 教學