曾新勵(lì)
摘要:隨著企業(yè)軟件項(xiàng)目復(fù)雜性的日益增加,提高可靠性和避免錯(cuò)誤缺陷成為開(kāi)發(fā)企業(yè)級(jí)應(yīng)用軟件的一個(gè)重要因素。該文在分析企業(yè)代碼質(zhì)量管理方面的現(xiàn)狀以及對(duì)代碼質(zhì)量管理的內(nèi)外在需求的基礎(chǔ)上,研究了SonarQube平臺(tái)的運(yùn)行機(jī)制和技術(shù)優(yōu)勢(shì),結(jié)合代碼質(zhì)量規(guī)范標(biāo)準(zhǔn)的制定、質(zhì)量管理平臺(tái)在企業(yè)內(nèi)的部署和代碼質(zhì)量管理流程,提出了基于SonarQube平臺(tái)的代碼質(zhì)量管理解決方案。從系統(tǒng)源代碼的角度出發(fā),在軟件研發(fā)過(guò)程中使用SonarQube控制代碼質(zhì)量,不但實(shí)現(xiàn)了在項(xiàng)目開(kāi)發(fā)時(shí)的代碼質(zhì)量標(biāo)準(zhǔn)化,并且能夠持續(xù)跟蹤代碼質(zhì)量,對(duì)問(wèn)題形成閉環(huán)高效管理。持續(xù)有效地進(jìn)行代碼質(zhì)量監(jiān)控,并制定相應(yīng)的改進(jìn)措施,對(duì)企業(yè)高質(zhì)量交付軟件產(chǎn)品意義重大。
關(guān)鍵詞:SonarQube;代碼質(zhì)量;質(zhì)量分析;質(zhì)量管理
中圖分類(lèi)號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1009-3044(2019)11-0078-03
1引言
企業(yè)軟件項(xiàng)目質(zhì)量會(huì)受到團(tuán)隊(duì)開(kāi)發(fā)人員個(gè)體能力以及團(tuán)隊(duì)磨合期不夠等因素影響,傳統(tǒng)的人工代碼質(zhì)量檢查隨著企業(yè)軟件復(fù)雜性的日益增加逐漸成為項(xiàng)目的瓶頸。如何持續(xù)有效地進(jìn)行代碼質(zhì)量管理,高質(zhì)量交付軟件產(chǎn)品成為企業(yè)當(dāng)下必須要解決的問(wèn)題。
企業(yè)對(duì)代碼質(zhì)量管理的需求一方面來(lái)自企業(yè)對(duì)軟件產(chǎn)品的代碼需要標(biāo)準(zhǔn)化、精細(xì)化的管控,力求控制軟件項(xiàng)目的風(fēng)險(xiǎn)。代碼質(zhì)量管理不當(dāng)直接造成員工工作量增加,上級(jí)不滿意,間接管理成本增加。另一方面,民航機(jī)場(chǎng)信息系統(tǒng)建設(shè)競(jìng)爭(zhēng)日益激烈,軟件產(chǎn)品服務(wù)質(zhì)量的高低成為是否能夠贏得客戶(hù)的重要因素。與此同時(shí)在交付軟件產(chǎn)品時(shí),客戶(hù)不僅要檢測(cè)產(chǎn)品功能是否實(shí)現(xiàn),還要檢驗(yàn)軟件自身的代碼質(zhì)量。
針對(duì)民航機(jī)場(chǎng)業(yè)務(wù)支撐系統(tǒng)的現(xiàn)狀,本文從接入復(fù)雜度、應(yīng)用范圍、規(guī)則數(shù)量、可擴(kuò)展性和準(zhǔn)確率幾個(gè)方面對(duì)用于代碼質(zhì)量管理的主流工具進(jìn)行了調(diào)研,重點(diǎn)研究了SonarQube平臺(tái)的運(yùn)行機(jī)制和技術(shù)優(yōu)勢(shì),并提出了一種基于SonarQube平臺(tái)的代碼質(zhì)量管理解決方案。從系統(tǒng)源代碼的角度出發(fā),在軟件研發(fā)過(guò)程中使用SonarQube控制代碼質(zhì)量,減少人工代碼質(zhì)量檢查的時(shí)間成本,提高問(wèn)題檢測(cè)的準(zhǔn)確率,并且同企業(yè)現(xiàn)有的內(nèi)部問(wèn)題管理工作流程相結(jié)合,對(duì)問(wèn)題形成閉環(huán)高效管理,從源頭上把控業(yè)務(wù)系統(tǒng)質(zhì)量。
2 SonarQube介紹
研發(fā)人員在編寫(xiě)、組織、構(gòu)建、測(cè)試和不斷改進(jìn)應(yīng)用程序時(shí)使用許多工具、技術(shù)、框架和流程,SonarQube作為一款開(kāi)源代碼質(zhì)量管理工具,最初是為了跟蹤Java項(xiàng)目的質(zhì)量而編寫(xiě)的,它使跟蹤、管理和提高代碼總體質(zhì)量變得高效規(guī)范,并且實(shí)現(xiàn)了公認(rèn)的最佳實(shí)踐,為代碼質(zhì)量度量、評(píng)審和補(bǔ)救提供了功能齊全的綜合平臺(tái)[1]。
SonarQube通過(guò)插件式設(shè)計(jì)模式方便地集成FindBugs、PMD、Checkstyle、Cubertuna、Jcoco等多種工具,實(shí)現(xiàn)軟件項(xiàng)目代碼的靜態(tài)檢測(cè)。并且通過(guò)配置語(yǔ)言插件即可以支持對(duì)C/C++、C#、Cobol、Java、PHP等超過(guò)25種編程語(yǔ)言進(jìn)行質(zhì)量檢測(cè) [2]。
基于SQALE軟件質(zhì)量方法理論,將通過(guò)插件集成工具的各項(xiàng)檢測(cè)結(jié)果統(tǒng)計(jì)分析,以數(shù)據(jù)、圖表等多維度方式將代碼質(zhì)量的變化和最終檢測(cè)結(jié)果合并分析輸出,形成直觀可視化代碼質(zhì)量報(bào)告,量化評(píng)估軟件項(xiàng)目質(zhì)量。也可以擴(kuò)充報(bào)表展示插件,更加豐富Web頁(yè)面的展現(xiàn)形式。
在對(duì)其他工具的支持方面,采用了統(tǒng)一接口設(shè)計(jì)方式便于自身被其他平臺(tái)引入。支持持續(xù)集成工具,可以利用持續(xù)集成工具Jenkins來(lái)使用SonarQube。得益于其通用規(guī)范的設(shè)計(jì)思想,得到了國(guó)內(nèi)外越來(lái)越多軟件研發(fā)人員的關(guān)注。SonarQube提供了對(duì)Eclipse和IntelliJ IDEA開(kāi)發(fā)環(huán)境的SonarLint插件支持,對(duì)于Maven工程可以在Maven的settings.xml配置文件中添加分析器插件的配置進(jìn)行分析,還可以直接在控制臺(tái)啟動(dòng)分析項(xiàng)目代碼的默認(rèn)啟動(dòng)器SonarQube Scanner執(zhí)行分析,就可以完成對(duì)項(xiàng)目代碼的分析[3]。
3 應(yīng)用SonarQube代碼質(zhì)量管理平臺(tái)
基于SonarQube的代碼質(zhì)量管理體系具有三個(gè)方面的內(nèi)容:代碼質(zhì)量規(guī)范標(biāo)準(zhǔn)的制定、質(zhì)量管理平臺(tái)在企業(yè)內(nèi)的部署和代碼質(zhì)量管理流程。
3.1 代碼質(zhì)量規(guī)范標(biāo)準(zhǔn)
代碼質(zhì)量是從代碼的角度衡量軟件系統(tǒng)的質(zhì)量。SonarQube通過(guò)簡(jiǎn)單、易于遵循的核心7大質(zhì)量標(biāo)準(zhǔn)來(lái)持續(xù)改進(jìn)源代碼質(zhì)量,包括設(shè)計(jì)與架構(gòu)、重復(fù)度、注釋比例、單元測(cè)試質(zhì)量、復(fù)雜度、潛在bug、編碼規(guī)范,如圖1所示。每個(gè)維度中包含若干掃描規(guī)則,根據(jù)不同場(chǎng)景的需要和對(duì)代碼質(zhì)量關(guān)注點(diǎn)的差異,可以按照需求對(duì)SonarQube中配置的掃描規(guī)則進(jìn)行裁剪和調(diào)整。SonarQube根據(jù)這7個(gè)維度的代碼質(zhì)量檢測(cè)數(shù)據(jù)形成一個(gè)直觀可視化質(zhì)量報(bào)告。
3.2 質(zhì)量管理平臺(tái)在企業(yè)內(nèi)的部署
SonarQube平臺(tái)可以很好的與企業(yè)現(xiàn)有的開(kāi)源持續(xù)集成工具Jenkins和版本管理工具SVN相結(jié)合,借助持續(xù)集成工具的輔助可以不斷地創(chuàng)建、執(zhí)行軟件測(cè)試。首先在SonarQube中安裝檢測(cè)插并按需求配置好相應(yīng)規(guī)則,然后創(chuàng)建Jenkins項(xiàng)目來(lái)啟動(dòng)SonarQube進(jìn)行質(zhì)量檢測(cè),完成檢測(cè)后SonarQube會(huì)把執(zhí)行結(jié)果直接寫(xiě)入數(shù)據(jù)庫(kù),并執(zhí)行分析統(tǒng)計(jì)供Web展現(xiàn)時(shí)讀取。SonarQube支持多種數(shù)據(jù)庫(kù),默認(rèn)安裝情況下使用自帶的H2 嵌入式數(shù)據(jù)庫(kù),在遷移和擴(kuò)展時(shí)存在不足,可以根據(jù)需要選擇MySql、Oracle、MS SQLServer等數(shù)據(jù)庫(kù)。通過(guò)修改sonar.properties配置文件完成數(shù)據(jù)庫(kù)連接的配置,SonarQube啟動(dòng)時(shí)會(huì)自動(dòng)創(chuàng)建數(shù)據(jù)庫(kù)實(shí)例并配置好相應(yīng)的表結(jié)構(gòu)。代碼質(zhì)量管理平臺(tái)如圖2所示。
3.3 代碼質(zhì)量管理流程
在項(xiàng)目開(kāi)發(fā)中,應(yīng)用SonarQube進(jìn)行代碼質(zhì)量分析評(píng)估是一個(gè)循環(huán)往復(fù)、持續(xù)性的工作,遵循四個(gè)標(biāo)準(zhǔn)流程執(zhí)行,具體流程包括版本管理、執(zhí)行評(píng)估、風(fēng)險(xiǎn)應(yīng)對(duì)、持續(xù)改進(jìn),符合PDCA持續(xù)循環(huán)改進(jìn)的科學(xué)過(guò)程。具體流程如圖3所示。
過(guò)程描述如下:
1)版本管理。隨著軟件開(kāi)發(fā)過(guò)程中業(yè)務(wù)創(chuàng)新和需求變更,代碼版本控制成為了代碼質(zhì)量評(píng)估的基礎(chǔ)。在版本升級(jí)和維護(hù)的過(guò)程中需要記錄新增加的功能,具體修復(fù)的問(wèn)題,以及在此過(guò)程中產(chǎn)生的新問(wèn)題,都依賴(lài)于版本管理的把控。
2)執(zhí)行評(píng)估。執(zhí)行評(píng)估的對(duì)象是軟件系統(tǒng)源代碼。從代碼版本管理工具中獲取新的軟件項(xiàng)目版本,使用SonarQube按照預(yù)先配置的掃描規(guī)則集,執(zhí)行代碼的初步掃描。SonarQube將掃描出的結(jié)果以報(bào)表的形式展示,向研發(fā)人員提供決策支持。同時(shí)調(diào)用企業(yè)問(wèn)題管理平臺(tái),根據(jù)掃描出來(lái)的問(wèn)題列表創(chuàng)建任務(wù)清單,以消息的形式推送給各個(gè)研發(fā)人員。
3)風(fēng)險(xiǎn)應(yīng)對(duì)。執(zhí)行完評(píng)估后的首要工作是對(duì)收到的問(wèn)題任務(wù)清單進(jìn)行分析,任何工具都可能會(huì)產(chǎn)生誤報(bào)或漏報(bào)的情況,人工參與審查代碼是必須的。研發(fā)人員共同對(duì)問(wèn)題進(jìn)行分析、確認(rèn)、篩選并確定其嚴(yán)重程度,刪除無(wú)關(guān)緊要和誤報(bào)的問(wèn)題。并針對(duì)實(shí)際問(wèn)題設(shè)計(jì)解決方案,提出改進(jìn)建議,提交到版本管理SVN。
4)持續(xù)改進(jìn)。研發(fā)人員按照風(fēng)險(xiǎn)應(yīng)對(duì)環(huán)節(jié)給出的改進(jìn)方案進(jìn)行修改,在提交代碼時(shí)系統(tǒng)自動(dòng)判斷是否所有任務(wù)清單問(wèn)題都已修改,防止問(wèn)題代碼繼續(xù)提交。完成修改后研發(fā)人員填寫(xiě)任務(wù)修改記錄單,企業(yè)內(nèi)部問(wèn)題管理平臺(tái)關(guān)閉相關(guān)問(wèn)題,并刪除代碼質(zhì)量管理平臺(tái)對(duì)應(yīng)問(wèn)題,實(shí)現(xiàn)對(duì)問(wèn)題的閉環(huán)管理。
4 結(jié)論
通過(guò)在企業(yè)軟件研發(fā)過(guò)程中引入SonarQube代碼質(zhì)量管理平臺(tái),實(shí)現(xiàn)代碼質(zhì)量管理全流程的標(biāo)準(zhǔn)化和精細(xì)化,讓軟件產(chǎn)品質(zhì)量管理更加集中,并且能夠?qū)崿F(xiàn)代碼質(zhì)量的持續(xù)改進(jìn)。帶來(lái)的好處有以下幾點(diǎn)。
1)讓部門(mén)管理者、項(xiàng)目管理者可以有針對(duì)性的對(duì)項(xiàng)目質(zhì)量進(jìn)行控制,研發(fā)人員隨時(shí)了解自己的代碼質(zhì)量,注重程序設(shè)計(jì)質(zhì)量符合企業(yè)標(biāo)準(zhǔn)。
2)利用SonarQube和代碼質(zhì)量管理流程實(shí)現(xiàn)代碼質(zhì)量的持續(xù)改進(jìn),通過(guò)分析評(píng)估,使問(wèn)題得到有效解決,形成一個(gè)符合PDCA的科學(xué)流程,提升軟件開(kāi)發(fā)過(guò)程的工作效率。
3)持續(xù)對(duì)改進(jìn)后的結(jié)果再評(píng)估,確保所有問(wèn)題落實(shí)到相應(yīng)的人負(fù)責(zé),監(jiān)督改進(jìn)方案的執(zhí)行情況,避免到項(xiàng)目后期測(cè)試上線才發(fā)現(xiàn)問(wèn)題,實(shí)現(xiàn)在開(kāi)發(fā)階段完成軟件產(chǎn)品質(zhì)量的有效保證,提升客戶(hù)滿意度。
5 總結(jié)
科學(xué)的代碼質(zhì)量管理能夠有效提高企業(yè)軟件項(xiàng)目質(zhì)量。本文在分析企業(yè)代碼質(zhì)量管理方面的現(xiàn)狀以及需求的基礎(chǔ)上,研究了SonarQube平臺(tái)的運(yùn)行機(jī)制和技術(shù)優(yōu)勢(shì),并與企業(yè)現(xiàn)有的內(nèi)部問(wèn)題管理工作流程相結(jié)合,提出了基于SonarQube平臺(tái)的代碼質(zhì)量管理解決方案。不但實(shí)現(xiàn)了在項(xiàng)目開(kāi)發(fā)時(shí)的代碼質(zhì)量標(biāo)準(zhǔn)化,還可以持續(xù)有效地進(jìn)行代碼質(zhì)量監(jiān)控。按期評(píng)估代碼質(zhì)量并制定相應(yīng)的風(fēng)險(xiǎn)應(yīng)對(duì)措施,持續(xù)循環(huán)改進(jìn),有助于實(shí)現(xiàn)高質(zhì)量完成軟件項(xiàng)目。同時(shí),SonarQube也適用于企業(yè)代碼質(zhì)量管理云平臺(tái)的搭建,有助于推進(jìn)民航信息系統(tǒng)標(biāo)準(zhǔn)化和規(guī)范化建設(shè)。
參考文獻(xiàn):
[1] 楊冰娥.代碼規(guī)則自動(dòng)化檢查系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].成都:西南交通大學(xué),2014.
[2] 徐萌.持續(xù)集成在現(xiàn)代企業(yè)軟件開(kāi)發(fā)中的研究與實(shí)現(xiàn)[D].青島:中國(guó)海洋大學(xué),2013.
[3] 戚華,楊銘.代碼質(zhì)量管理平臺(tái)Sonar在軟件項(xiàng)目管理中的應(yīng)用研究[J].電子技術(shù)與軟件工程,2016(6):68-69.
【通聯(lián)編輯:王力】