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