評價一個系統或軟體的質量高低,我始終認為除了需求和設計外,程式碼質量很重要,一個高質量的系統或軟體,並不是被測試出來的,更多的是要靠設計和開發出來的。目前也有很多自動化的測試工具,更多的是從功能和效能角度進行測試驗證,對於程式碼質量,尤其對靜態程式碼質量,業內實際也有成熟的檢查工具: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,社群版是免費的,下載地址:https://www.sonarqube.org/downloads/,如下圖
雖然可以通過登入SonarQube,線上進行分析瀏覽程式碼靜態質量,但當有很多專案的時候檢視效率就很低,且靜態程式碼質量隨時都會發生變化,前提是隻要修改了原始碼。因此,自行研究開發了一個SonarQube的靜態程式碼質量審計工具,這個工具是一年多前開發的,如下圖:
具體實現方式:後臺儲存採用了自定義的Sharepoint列表,此工具採用C#開發,與SonarQub的互動採用SonarQub的Web API。本工具與Sonar前臺許可權一致,如果在Sonar前臺看不到任何一個專案,則本工具也無法正常使用。Sonar專案名稱,需要注意一點:實際一個專案可能會對應多個不同Sonar專案名稱,如下圖:
最後簡單介紹一下Sonarqube的Web API,具體如下:
1.所有Sonar專案:http://{ip}/api/projects/index
2.所有issues:http://{ip}/web_api/api/issues
3.度量的結果:https://{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
長按圖片掃描二維碼
也可以關注我的今日頭條號:
長按圖片掃描二維碼