開源程式碼檢測平台 SonarQube
Last updated
Last updated
SonarQube 是一個開源的程式檢測平台,旨在幫助軟體開發團隊提升代碼品質和可持續性。它通過靜態代碼分析,識別代碼中的技術債務、缺陷和安全漏洞,並提供即時反饋和詳細報告。
支援多種主流程式語言,如 Java、C#、JavaScript 等,該平台的核心功能包括代碼質量評估、缺陷檢測、安全漏洞掃描、測試覆蓋率分析等。
透過 SonarQube 團隊可以持續監控和改進代碼質量,降低技術債務,增加軟體的可維護性和穩定性,為開發團隊提供了優質代碼的保證,促進軟體項目的成功交付和持續發展。
使用 Docker 來搭建 SonarQube 快速又方便
docs.docker.com
透過下列指令啟動 SonarQube
開啟瀏覽器 http://localhost:9000,預設的帳號與密碼皆為 admin。
會要求變更密碼
接下來選擇 Manually 建立專案
輸入專案顯示名稱與專案 Key
專案顯示名稱:你開心就好,可以取重複。
專案 Key:專案的唯一碼,不得重複。
定義代碼的哪一部分將被視為新代碼,選擇 Global Setting 即可。
以前的版本:自上一版本以來發生更改的任何代碼都被視為新代碼,推薦用於常規版本或發布之後的項目。
選擇 Locally 分析專案
需要產生一個 Token,稍後 Scanner 上傳分析結果使用。
點選 Continue
選擇分析的語言與建置工具,我們用 .NET Core 作為演示範例。
透過命令提示字元安裝 dotnet-sonarscanner。
確認一下環境變數 Path 是否存在 dotnet tools 資料夾
使用 Visual Studio 2022 建立新的專案當作範例
選擇 .NET 6.0
使用命令提示字元切換到專案的根目錄
輸入以下指令,進行初始化。
會產生一個 .sonarqube 資料夾,用來存放分析的結果。
記得將 .sonarqube 加入 .gitignore
接下來對專案進行建置
開始進行分析,並將結果上傳回 SonarQube。
若指令出現以下錯誤,請記得安裝 JDK 11。
| Oracle 台灣 Java Archive Downloads - Java SE 11www.oracle.com
回到 Projects 就可看到分析後的結果
SonarQube 會將程式碼中可能潛藏的問題分為以下 3 種
**Bug:**可能導致運行時錯誤或意外行為的編碼錯誤
**Vulnerability:**代碼中容易受到攻擊的點
**Code Smell:**可維護性問題,使您的代碼混亂且難以維護。
Security Hotspotsy 代表需要手動檢查以評估是否存在漏洞的安全敏感代碼。
進入專案後可以看到 Measures 分為 2 種
New Code:我們選擇 Global Setting,代表自上一版本以來發生更改的任何代碼都被視為新代碼。
Overall Code:總體代碼的分析結果
基本上,我們只需要察看 Overall Code 的分析結果即可,除非想要知道新增的代碼的分析結果,才需要切到 New Code 查看。
New Code 的定義可在 Project Settings 的 New Code 進行修改,例如選擇 Number of Days 定義將多少天前的代碼視為 New Code。
SonarQube 除了將被檢測出的問題分類為上述其中一種類型之外,也將問題依嚴重性分為 5 種程度。透過這些分類,使用者可迅速地查看程式碼哪個部分存在何種問題,並可根據嚴重性決定修復的優先順序,以提升維護程式碼品質的效率。
依嚴重性分為 5 種程度
BLOCKER:很可能影響生產中應用程式行為的錯誤。例如,記憶體洩漏或未關閉的 JDBC 連接都是必須立即修復的 BLOCKER 。
CRITICAL:影響生產中應用程式行為的可能性較低的錯誤或代表安全缺陷的問題。空的 Catch 區塊或 SQL 注入將是一個關鍵問題,必須立即審查程式碼。
MAJOR:可能嚴重影響開發人員生產力的質量缺陷。未覆蓋的程式碼、重複的區塊或未使用的參數都是主要問題的示例。
MINOR:可能會輕微影響開發人員生產力的質量缺陷。例如,行不應該太長,Switch 語句應該至少有 3 種情況,都被認為是次要問題。
INFO:既不是錯誤也不是質量缺陷,只是一個發現。
實際挑一個 Issue 來說明,SonarQube 偵測到有未使用的變數
Where is the issue?第 4 行清楚的告知作者是誰,以及第 9 行宣告的 _logger 未使用。
Why is this an issue?則會提供程式範例告訴你問題在哪以及如何修改。
More Info 則提供該 Issue 屬於哪種通用弱點列舉 CWE
專案若有加入 Git 版控,SonarQube 還會幫您統計每位作者的 Issue 數量,就可以知道團隊誰寫的程式品質不好。
將檢測到的問題依照分類透過圖表的方式呈現
將檢測到的問題依照專案結構使用表格呈現
我們可以在 Activity 找到 SonarQube 每次分析的趨勢圖,例如第 2 次推送的結果 Code Smell 數量降低了。
還記得 Sonarscanner 需要 Token 才能將分析結果回傳至 SonarQube,如果我們忘記 Token 該怎麼辦?
點選右上方的 My Account 切換到 Security 頁籤,在這邊我們可以新建或者撤銷已經忘記的 Token。
記得將 Token 給抄下來,只會出現一次喔。
使用新的 Token 就可以繼續進行檢測
我們可以在 Rules 找到 SonarQube 每種程式語言的檢查規則,例如 C# 總共有 424 項。
每次 SonarQube 掃描到底要檢測多少規則,實際是透過 Quality Profiles 進行控制的,而預設的設定檔是無法修改的。
從上面的 Rules 我們知道 C# 總共有 424 項規則,預設的設定檔 Sonar Way 只啟用了 283 項規則,是沒有辦法將其中任何一條規則禁用的。
我們可以點選 Extend 或者 Copy 來進行調整
Extend:繼承 Sonar Way 設定檔,已經啟用的規則無法修改,只能將原本禁用的規則進行啟用。
Copy:複製 Sonar Way 設定檔,可以進行任何異動。
一般實務上,不太會直接使用預設的 Sonar Way 設定檔,因為它啟用的規則太多了。
透過右上角的 Create,建立屬於我們自己的設定檔。
再來挑選我們想要啟用的規則
回到 Project Settings 的 Quality Profiles 調整為自定義的 Profiles
會在再下一次分析才生效
專案的分析結果是否通過,我們可以在 Quality Gates 查看與調整檢測的評分標準。
今天的分享就到這邊,感謝收看。