代碼質量審覈和管理工具分析比較
1、SonarQube
SonarQube是市場上最受歡迎的代碼質量和安全性分析工具。它在開源社區的支持下,目前可以分析和產生對超過25種編程語言的輸出,這比市場上大多數工具都要高。它具有免費的社區版本和其他付費版本。利用SonarQube的主要好處是:
它集成了數千種自動的靜態代碼分析規則,旨在提高開發人員的代碼質量和安全性,使得開發人員編寫更加乾淨,更加安全的代碼。主要提供了三個比較大的功能:
- 代碼可靠性支持:提前捕獲和提示代碼中的錯誤,從而避免未定義的行爲影響到終端用戶。
- 應用安全支持:修復可能危害到應用程序的漏洞,並通過安全熱點學習AppSec(簡單理解就是會學習和識別新的漏洞)。
- 技術債務支持:確保管理的代碼庫乾淨並且可維護,以便提高開發人員的開發效率。
這可以幫助你確保代碼在合併之前達到預期的質量!
- 只需一行命令即可輕鬆集成到CI/CD管道中。
- 也可以集成到Maven和Gradle構建週期中
- 檢查幾乎所有內容,如代碼質量,格式,變量聲明,異常處理等。
實際上,研發團隊可以基於SonarQube做下面的事情:
- CI/CD流程加入一個SonarQube掃描的環節。
- 實施代碼質量閾值,只有通過了這個質量閾值檢測才能進入下一個流程。
- 代碼質量低於閾值的項目要及時調整對應的代碼。
質量閾值可以進行自定義,SonarQube中針對每個項目會有詳細的面板信息,裏面會給出項目當前的健康狀態,不同級別漏洞的分類和明細,漏洞對應提交者等多維度的統計信息,方便進行問題的追蹤和修復。舉個例子,筆者在上一家公司項目上線需要跑一個流水線,而SonarQube設定了不同等級的閾值,對於老項目,會使用最低等級的閾值:阻斷性的錯誤數量要求爲0,對於一些新的項目,則嚴格要求質量如嚴重性的錯誤要求爲0等,只要無法通過質量閾值檢查,那麼項目是無法上線的。
1.1 SonarQube使用
SonarQube提供不同類型的SonarScanner用於代碼掃描和結果提交,這裏以Maven爲例。Maven的settings.xml需要引入下面的配置(注意父標籤已經存在,重複添加父標籤會導致異常):
<settings>
<pluginGroups>
<pluginGroup>org.sonarsource.scanner.maven</pluginGroup>
</pluginGroups>
<profiles>
<profile>
<id>sonar</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<!-- Optional URL to server. Default value is http://localhost:9000 -->
<sonar.host.url>
<!-- 這個位置需要替換成SonarQube服務地址,例如http://192.168.56.200:9000 -->
http://myserver:9000
</sonar.host.url>
</properties>
</profile>
</profiles>
</settings>
需要被掃描的項目中,需要引入Maven插件sonar-maven-plugin,當前最新版本爲:
<plugin>
<groupId>org.sonarsource.scanner.maven</groupId>
<artifactId>sonar-maven-plugin</artifactId>
<version>3.7.0.1746</version>
</plugin>
完成配置後,只需要在項目中執行命令進行掃描即可,首次執行會比較緩慢,因爲需要下載大量的規則庫和插件:
# 不指定插件版本執行
mvn clean install
mvn sonar:sonar
# 或者指定插件版本執行
mvn org.sonarsource.scanner.maven:sonar-maven-plugin:${插件的版本號}:sonar
此外,可以通過pom文件中的<properties>指定SonarQube的參數,如:
<properties>
<sonar.host.url>[...]</sonar.host.url>
<ssonar.projectKey>[...]</sonar.projectKey>
<sonar.projectName>[...]</sonar.projectName>
<sonar.projectVersion>[...]</sonar.projectVersion>
<sonar.login>[...]</sonar.login>
<sonar.password>[...]</sonar.password>
<sonar.sourceEncoding>[...]</sonar.sourceEncoding>
.......
</properties>
2、DeepScan
DeepScan擅長掃描Javascript代碼存儲庫。它能夠處理幾乎所有javascript框架的動態代碼質量檢查。
它爲你提供了一個出色的儀表板,可以在一處管理和維護所有項目以及代碼質量等級。使用Deepscan的主要好處包括:
- 提供隨時間掃描數據的圖形視圖
- 有助於分析和跟蹤代碼管理過程的進展情況
- 對於在單個平臺上進行組織範圍的代碼質量審覈很有用
- 自動掃描存儲庫
- 可在雲和本地上運行
3、Klocwork
Klocwork可以對幾乎任何大小的項目執行靜態代碼分析。使用Klocwork的主要好處是它可以輕鬆地與Visual Studio Code IDE,Eclipse,IntelliJ等集成。這使開發人員更容易使用Klocwork。此外,它也可以集成到CI/CD管道中,以確保交付前的代碼質量。它支持C,C#,C ++和Java。
4、CodeSonar
CodeSonar是一種統計代碼分析工具,可以從計算角度分析代碼。它能夠從你的代碼中開發模型,分析它們的潛在執行威脅,例如鎖死,內存溢出,空指針,數據泄漏以及可能難以捕獲的許多此類程序錯誤。
- 它完成的代碼掃描比其他代碼更深入。
- 能夠檢測到比其他工具多3-5倍的缺陷
- 它可以構建自己的函數調用圖,以分析完整的代碼模型並提供有關質量的輸出。
5、JArchitect
JArchitect主要致力於Java語言中的代碼分析。JArchitect是用於分析的最詳盡的Java代碼分析工具。JArchitect被三星,英特爾,LG,IBM,谷歌等巨頭使用,這也從側面印證了該工具的出色程度。
6、Fortify
Micro Focus的Fortify專注於掃描代碼庫中的安全漏洞。它着眼於已知的安全漏洞以及可能存在問題的任何惡意軟件或損壞文件的存在。一些不錯的功能包括:
- 自動掃描代碼
- 涵蓋幾乎所有編程語言
- 提供解決漏洞的建議
- 提供豐富的代碼分析,以幫助更快地解決問題
- 與流行的CI/CD工具輕鬆集成
7、Codecov
Codecov是用於管理代碼庫以及使用單個實用程序進行構建的綜合工具。它分析推送的代碼,執行所需的檢查,並在需要時自動合併它們。下面列出了一些其他功能:
- 單行命令可以掃描,分析,生成報告並將其合併
- 可與幾乎所有流行的CI/CD工具集成
- 支持30多種編程語言
- 將報告集成到Github存儲庫中,以簡化代碼審查