評價一個系統或軟體的質量高低,我始終認為除了需求和設計外,代碼質量很重要,一個高質量的系統或軟體,并不是被測驗出來的,更多的是要靠設計和開發出來的,目前也有很多自動化的測驗工具,更多的是從功能和性能角度進行測驗驗證,對于代碼質量,尤其對靜態代碼質量,業內實際也有成熟的檢查工具: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 質量閥
雖然可以通過登錄SonarQube,在線進行分析瀏覽代碼靜態質量,但當有很多專案的時候查看效率就很低,且靜態代碼質量隨時都會發生變化,前提是只要修改了源代碼,因此,自行研究開發了一個SonarQube的靜態代碼質量審計工具,這個工具是一年多前開發的,如下圖:
SonarQub靜態代碼質量審計工具
具體實作方式:后臺存盤采用了自定義的Sharepoint串列,此工具采用C#開發,與SonarQub的互動采用SonarQub的Web API,本工具與Sonar前臺權限一致,如果在Sonar前臺看不到任何一個專案,則本工具也無法正常使用,Sonar專案名稱,需要注意一點:實際一個專案可能會對應多個不同Sonar專案名稱,如下圖:
一個專案實際有多個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

長按圖片掃描二維碼
也可以關注我的今日頭條號:

長按圖片掃描二維碼
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/404244.html
標籤:.NET技术
