分享一個自研開發的QA自動化審計工具-Sonar檢查

評價一個系統或軟件的質量高低,我始終認為除了需求和設計外,代碼質量很重要,一個高質量的系統或軟件,並不是被測試出來的,更多的是要靠設計和開發出來的。目前也有很多自動化的測試工具,更多的是從功能和性能角度進行測試驗證,對於代碼質量,尤其對靜態代碼質量,業內實際也有成熟的檢查工具:SonarQube,特別是互聯網和大型企業都很關注代碼本身的質量。我在之前汽車行業工作的時候,公司也特別關注靜態代碼質量並使用了SonarQube進行代碼的檢查,要求代碼無致命和嚴重的BUG才能算代碼檢查過關

那什麼是SonarQube呢?SonarQube是開源的代碼質量管理平台,用於管理代碼的質量,通過插件形式可以支持包括Java、C#、JavaScript、TypeScript、CloudFormation、Terraform、Kotlin、Ruby、Go、Scala、Flex、Python、PHP、HTML、CSS、XML 、VB.NET等等二十幾種編程語言的代碼質量管理與檢測的代碼質量檢測,通過多個維度的檢查了快速定位代碼中潛在的或者明顯的錯誤。SonarQube是sonar的服務端,相當於一個web服務器中的tomcat,sonarqube提供能力不僅顯示應用健康而且突出問題新推出的。有了質量門,您就可以修復漏洞,從而系統地提高代碼質量。它的主要功能如下:

1.不遵循代碼標準。sonar可以通過PMD,CheckStyle,Findbugs等等代碼規則檢測工具規範代碼編寫。

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

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

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

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

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

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

8、提高代碼質量。了解自己在編碼過程中犯過的錯誤,讓自己的代碼更具有可讀性和維護性。

具體就不在這裡介紹了,SonarQube最新版本是9.2.4,社區版是免費的,下載地址://www.sonarqube.org/downloads/,如下圖

SonarQube 社區版免費下載
SonarQube 質量閥

雖然可以通過登錄SonarQube,在線進行分析瀏覽代碼靜態質量,但當有很多項目的時候查看效率就很低,且靜態代碼質量隨時都會發生變化,前提是只要修改了源代碼。因此,自行研究開發了一個SonarQube的靜態代碼質量審計工具,這個工具是一年多前開發的,如下圖:

SonarQub靜態代碼質量審計工具

具體實現方式:後台存儲採用了自定義的Sharepoint列表,此工具採用C#開發,與SonarQub的交互採用SonarQub的Web API。本工具與Sonar前台權限一致,如果在Sonar前台看不到任何一個項目,則本工具也無法正常使用。Sonar項目名稱,需要注意一點:實際一個項目可能會對應多個不同Sonar項目名稱,如下圖:

一個項目實際有多個Sonar項目
選擇要檢查的Sonar項目
Sonar項目檢查結果
Sonar項目清單

最後簡單介紹一下Sonarqube的Web API,具體如下:

1.所有Sonar項目://{ip}/api/projects/index

2.所有issues://{ip}/web_api/api/issues

3.度量的結果://{ip}/api/measures/component?component={sonar項目}&metricKeys=duplicated_lines_density,new_uncovered_conditions,new_uncovered_lines,new_duplicated_blocks,new_lines_to_cover,bugs,files,new_bugs,new_vulnerabilities,new_code_smells,new_duplicated_lines,new_violations,uncovered_conditions,new_branch_coverage,new_coverage,new_lines,new_sqale_debt_ratio,new_maintainability_rating&additionalFields=metrics,periods

 

更多技術溝通交流,可關注我的微信號:odoodev

 長按圖片掃描二維碼

 

也可以關注我的今日頭條號:

 

  長按圖片掃描二維碼

 

 

Tags: