技術管理者---提升研發代碼質量---代碼檢查工具Sonar

本文是《技術管理者---提升研發代碼質量》系列文章第二篇,第一篇整體介紹請看博文《技術管理者---提升研發代碼質量---總體方法論》。本文重點講三部分內容:1)sonar是什麼,研發體系如何利用sonar提供代碼質量;2)開發過程中如何使用Sonar保證代碼質量;3)sonar與Jenkins持續集成,持續閉環研發代碼質量。

 

Sonar是什麼?能幹什麼?

Sonar是一個用於代碼質量管理的開源平臺,用於管理源代碼的質量 通過插件形式,可以支持包括java,C#,C/C++等多種編程語言的代碼質量管理與檢測。Sonar可以從以下7個維度檢測代碼質量:

  • 不遵循代碼標準:包含CheckStyle,Findbugs等等代碼規則檢測工具
  • 潛在的缺陷:包含CheckStyle,Findbugs等等代碼規則檢測工具
  • 糟糕的複雜度分佈:檢查過高複雜度的文件、類、方法
  • 重複:重複代碼檢查
  • 註釋不足或者過多:
  • 缺乏單元測試:
  • 糟糕的設計:找出包與包、類與類之間相互依賴關係

先放幾個Sonar能發現的問題常見問題代碼截圖:

能夠發現Sonar檢測出很多研發質量不規範、非常容易出錯的地方,作爲研發管理者你肯定會想:這麼好的工具,我們研發團隊一定要使用起來。 這種想法非常好,但一個更關鍵的問題是:研發團隊如何使用Sonar,如何和現有研發流程規範結合起來,這就需要將Sonar檢測結果作爲現有研發流程中的重要一環,才能讓Sonar長期發揮作用。 不然只會出現如下的情況:研發經理說下個版本開始我們使用Sonar檢測代碼啊,只有檢測通過了才行。 相信我,過2個月之後,你將發現沒人按照你說的去執行。

要想讓Sonar與現有研發流程緊密結合、提升研發質量,我們先來了解一下Sonar家族體系。

然後再來看看Sonar報告發現問題的種類

最後來看作爲技術管理者,如何將Sonar作用在研發流程與持續集成環境當中

PS:上面講解的研發流程維度使用Sonar的方式需要人的參與,不是最好的方案,最好的方案是開發人員在提交代碼到Git的時候,自動觸發Sonar增量檢測,並能將錯誤信息返回到Git提交客戶端,這種方案需要修改Git客戶端與服務器端邏輯,代價太大了。目前業界有一種Sonar+Gerrit配合使用,能夠達到上面的效果,只是使用Gerrit的代價也較大,需要同步Gerrit與GitLab的倉庫、同步賬號、同步權限等一系列的同步,非常容易因爲同步不成功而導致整個代碼提交、打包產生問題。故博主所在公司使用上圖中的方案。

下面講解如上研發體系使用Sonar做靜態代碼檢測的兩種整合方案,詳細的實施方案。

開發過程中如何使用Sonar保證代碼質量

Idea開發中安裝Sonar插件《SonarLint-3.4.0.2532.zip》,菜單路徑“Idea-->File-->Setting-->Plugins-->Install plugin from disk”,截圖如下

安裝完成之後,重啓Idea,就能看到當前打開文件的檢查報告結果,如下:

點擊右側Report,可以檢查整個工程Sonar掃描結果

這樣每位開發同學在提交代碼前都會將本次任務裏涉及到的代碼做Sonar靜態檢查,檢查通過後截圖到自測報告中,完成的規範與研發流程強關聯。

 

Sonar與Jenkins持續集成,持續閉環研發代碼質量(安裝Jenkins、SonarQube,並整合服務每天出自檢報告)

安裝Jenkins,網絡上有很多安裝Jenkins的完整文章,讀者可以直接參照,本博文裏面就不詳細介紹了,可以參考:《https://blog.csdn.net/sms15732621690/article/details/71336224》

安裝SonarQube服務,網絡上也有很多完成的文章,讀者可以直接參照,本博文裏面就不詳細介紹了,可以參考:《https://www.cnblogs.com/ding2016/p/8065241.html》。

這裏面有幾個坑特別要注意:

  • 要想運行SonarQube,操作系統至少要有2G空閒內存,不然服務可能會無緣無故的進程沒有,特徵如下:
2018.09.06 17:11:31 INFO  app[][o.s.a.SchedulerImpl] Process[ce] is up
2018.09.06 17:11:31 INFO  app[][o.s.a.SchedulerImpl] SonarQube is up
2018.09.06 17:26:39 WARN  app[][o.s.a.p.AbstractProcessMonitor] Process exited with exit value [es]: 137
2018.09.06 17:26:39 INFO  app[][o.s.a.SchedulerImpl] Process [es] is stopped
  • 啓動好SonarQube的時候,切記把token記錄下來,後面在和Jenkins整合的時候需要。

下面介紹Jenkins與SonarQube的整合方式,根據官方文檔《https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner+for+Jenkins#AnalyzingwithSonarQubeScannerforJenkins-AnalyzingwiththeSonarQubeScanner》介紹,整合方式4種方式。 博主所在企業實用第一種“Analyzing with the SonarQube Scanner”,大部分的互聯網企業,應該是採用第三種” Analyzing with SonarQube Scanner for Maven or Gradle”。下面詳細介紹第一種整合方式詳細配置過程(也可以先看官方文檔做了解)。

  • 配置Jenkins系統管理--->插件管理--->安裝”SonarQube Scanner for Jenkins”(如下),安裝成功後重啓Jenkins

  • 配置Jenkins系統管理--->系統設置--->配置” SonarQube servers”(如下),注意這裏需要應用前面安裝SonarQube的Token。 其他的配置正常進行(Java、Git等)

  • 新建“構建一個自由風格的軟件項目”任務,分別配置好“GitHub”、”源碼管理”、”構建觸發器”,”構建環境”,”構建類型Execute SonarQube Scanner”分別截圖如下:

 

上面的sonar.sources用於設置項目的源碼地址,一般實際項目上,源碼都是在很多子工程的,所以這裏需要寫多個,多個源碼地址用,號隔開,路徑可以使用相對路徑。

  • 配置完成後點擊”立刻構建”構建成功後即可看到結果,可在Jenkins中快速鏈接到SonarQube中的結果。截圖如下:

 

至此,大功告成,讓此靜態檢查持續集成方法,提升你們團隊的 代碼質量吧。

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章