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