使用SonarQube追蹤代碼問題
通過不斷分析代碼以了解潛在的質(zhì)量問題,開源的 SonarQube 項目支持了 DevOps 的“盡早發(fā)布和經(jīng)常發(fā)布” 的思維模式。
越來越多的組織正在實施 DevOps 以便在通過中間開發(fā)和測試環(huán)境以后更快更好的將新代碼引入到生產(chǎn)環(huán)境。雖然版本控制、持續(xù)集成和部署以及自動化測試都屬于 DevOps 的范疇,但仍然存在一個關(guān)鍵問題:組織如何量化代碼質(zhì)量,而不僅僅是部署的速度?
SonarQube 是用來填補這個空隙的一種選擇。它是一個開源平臺,通過代碼的自動化靜態(tài)分析不斷的檢查代碼質(zhì)量。 SonarQube 支持 20 多種語言的分析,并在各種類型的項目中輸出和存儲問題。
SonarQube 同時也提供了一個可同時維護和管理不同項目、不同代碼的集中的環(huán)境。可以為每個項目定制規(guī)則。持續(xù)的檢查和分析代碼的健康軌跡。
SonarQube 還可以集成到可持續(xù)集成和開發(fā)(CI/CD)流程中,協(xié)助和自動確定代碼是否為生產(chǎn)環(huán)境做好了準備的過程。
它可以衡量什么
開箱即用,SonarQube 可以測量的關(guān)鍵指標,包括代碼錯誤、代碼異味、安全漏洞和重復(fù)的代碼。
- 代碼錯誤 是代碼中的一部分不正確或無法正常運行、可能會導致錯誤的結(jié)果,是指那些在代碼發(fā)布到生產(chǎn)環(huán)境之前應(yīng)該被修復(fù)的明顯的錯誤。
- 代碼異味 不同于代碼錯誤,被檢測到的代碼是可能能正確執(zhí)行并符合預(yù)期。然而,它不容易被修復(fù),也不能被單元測試覆蓋,卻可能會導致一些未知的錯誤,或是一些其它的問題。從長期的可維護性來講,立即修復(fù)代碼異味是明智之舉。通常在編寫代碼的時候,代碼異味并不容易被發(fā)現(xiàn),而 SonarQube 的靜態(tài)分析是一種發(fā)現(xiàn)它們的很好的方式。
- 安全漏洞 正如聽起來的一樣:指的是現(xiàn)在的代碼中可能存在的安全問題的缺陷。這些缺陷應(yīng)該立即修復(fù)來防止黑客利用它們。
- 重復(fù)的代碼 也和聽起來的一樣:指的是源代碼中重復(fù)的部分。代碼重復(fù)在軟件設(shè)計中是一種很不好的做法。總的來說,如果對一部分代碼進行更改而另一部分沒有,則會導致一些維護性的問題。例如,識別重復(fù)的代碼可以很容易的將重復(fù)的代碼打包成一個庫來重復(fù)的使用。
可自定義的選項
因為它是開源的,所以 SonarQube 鼓勵用戶開發(fā)和提供可定制的選項。目前有超過 60 個插件 可用于增強 SonarQube 開箱即用的分析功能。
大多數(shù)的插件是為了增加 SonarQube 可以分析的編程語言的數(shù)量。另一些插件可以分析一些額外的指標甚至包括一些顯示的儀表盤視圖。實際上,如果組織需要檢查一些自定義指標,或是想要在自己的儀表盤和以特定的方式查看分析數(shù)據(jù),或使用 SonarQube 不支持的編程語言,則可能存在一些自定義的選項可以使用。如果你想要的功能并不支持,SonarQube 源碼的開放也為你自己開發(fā)新的功能提供了可能性。
用戶還可以定制適用于每種特定編程語言分析器的規(guī)則。通過 SonarQube 用戶界面,可以按語言和按項目選擇和取消規(guī)則。這些為特定的項目指定的規(guī)則,可以很好的在一個集中的位置維護所有的數(shù)據(jù)和配置。
為什么它那么重要
SonarQube 為組織提供了一個集中的位置來管理和跟蹤多個項目代碼中的問題。它還可以把持續(xù)的檢查與質(zhì)量門限相結(jié)合。一旦項目分析過一次以后,更進一步的分析會參考軟件***的修改來更新原始的統(tǒng)計信息,以反映***的變化。這些跟蹤可以讓用戶看到問題解決的程度和速度。這與 “盡早發(fā)布并經(jīng)常發(fā)布”不謀而合。
另外,SonarQube 可使用 可持續(xù)集成流程,比如像 Hudson 和 Jenkins 這樣的工具。這個質(zhì)量門限可以很好的反映代碼的整體運行狀況,并且通過 Jenkins 等集成工具,在發(fā)布代碼到生產(chǎn)環(huán)境時擔任一個重要的角色。
本著 DevOps 的精神, SonarQube 可以量化代碼質(zhì)量,來達到組織內(nèi)部的要求。為了加快代碼生產(chǎn)和發(fā)布的周期,組織必須意識到它們自己的技術(shù)債務(wù)和軟件問題。通過發(fā)現(xiàn)這些信息, SonarQube 可以幫助組織更快的生成高質(zhì)量的軟件。
想要了解更多嗎?
SonarQube 基于 GUN 通用公共許可證發(fā)布,它的源碼可以在 GitHub 上查看。越來越多的用戶對 SonarQube 的特性和功能感興趣。 Twitter 和 Google 上有活躍的社區(qū)。這些社區(qū)以及 SonarQube 博客 對任何有興趣開始和使用 SonarQube 的人有很有幫助。