董 昕 梁 艷 李建佳 石欣漾
(成都工業(yè)學(xué)院計算機工程學(xué)院,四川 成都 611730)
較大規(guī)模和較高復(fù)雜度使軟件開發(fā)、測試及運營維護變得更加困難,嚴重制約了軟件研發(fā)效率提升及軟件產(chǎn)業(yè)的進一步發(fā)展具體問題有4類。1)代碼提交結(jié)果較長時間不可見。2)分析構(gòu)建失敗耗時較多。3)開發(fā)及測試的脫節(jié)。4)管理層與開發(fā)、測試的脫節(jié)。
為了解決上述問題,筆者提出一種基于虛擬化容器技術(shù)的自動編譯測試新方法。該方法在持續(xù)集成的環(huán)境基礎(chǔ)上構(gòu)建軟件全生命周期自動化環(huán)境,實現(xiàn)適合大規(guī)模軟件安裝部署的容器技術(shù),并向團隊提供測試框架、大數(shù)據(jù)分析解決方案及基于云的可視化質(zhì)量管理平臺。
該文提出一種自動編譯測試新方法,在持續(xù)集成的環(huán)境(例如基于Jenkins 或TFS完成全過程的自動調(diào)度)的基礎(chǔ)上構(gòu)建軟件全生命周期自動化環(huán)境(例如基于容器技術(shù)平臺Kubernetes),向團隊提供適合大規(guī)模軟件安裝部署的容器技術(shù)、統(tǒng)一的測試自動化框架、大數(shù)據(jù)分析的解決方案及基于云平臺的質(zhì)量管理平臺,使整個軟件生命周期軟件質(zhì)量狀態(tài)(例如質(zhì)量儀表盤Quality Dashboard)能夠一目了然。
筆者基于自動化原理,首先明確具體自動化的目標(biāo),然后制定策略、確定方案、采用技術(shù)及工具,提高效率。自動化過程可使開發(fā)人員更關(guān)心軟件的邏輯而不用與復(fù)雜的配置打交道。自動化也是提高可測試性、一致性、穩(wěn)定性、部署頻率和達到持續(xù)交付核心[1]。經(jīng)調(diào)查,軟件企業(yè)對自動構(gòu)建、自動部署、自動監(jiān)控以及自動測試等方面關(guān)注度較高。
自動化是自動編譯測試首先要完成的工作,也是效率提升最直接的抓手,需要重點關(guān)注構(gòu)建、測試的自動化[2]。以構(gòu)建自動化為例,實現(xiàn)自動化的大致步驟如下。構(gòu)建工具和架構(gòu)成型→開發(fā)人員能方便輕易使用→實現(xiàn)快速構(gòu)建成功→失敗構(gòu)建逐漸減少→人工構(gòu)建工作減少→減員增效。
基于虛擬化的容器技術(shù),能夠有效減少大規(guī)模軟件安裝、部署、配置及升級等引入的大量重復(fù)性工作。容器是輕量級的虛擬化組件,以隔離的方式運行應(yīng)用負載。它們運行自己的進程、文件系統(tǒng)和網(wǎng)絡(luò)棧,這些資源都是由運行在硬件上的操作系統(tǒng)所虛擬化出來的。容器為開發(fā)、測試團隊提供一致的環(huán)境,避免因為環(huán)境不統(tǒng)一產(chǎn)生的缺陷誤報。開發(fā)人員可以很容易的通過容器鏡像復(fù)現(xiàn)測試人員和客戶報來的缺陷[3]。利用容器還可以避免環(huán)境污染和批量快速地啟動多個測試環(huán)境并行測試來提高測試效率。容器能夠用新穎的方式驗證軟件安裝。通過自動化解決方案,同時配合容器技術(shù),打通開發(fā)、測試團隊間的無形壁壘。
該文實驗的被測體基于網(wǎng)絡(luò)的應(yīng)用程序及移動端app。采用的技術(shù)架構(gòu)基于Jenkins為核心搭建,如圖1所示。日常工作中訪問的Jenkins網(wǎng)站是運行在Master主節(jié)點上,當(dāng)一個項目Job被(自動或手動)觸發(fā)后,Master主節(jié)點根據(jù)項目Job的配置實現(xiàn)對項目job的分配調(diào)度。該架構(gòu)利用云與虛擬化技術(shù)可同時支持多個被測體的回歸測試及升級—回滾測試,并利用虛擬化技術(shù)支持多個被測體的冒煙測試[4]。
以自動化構(gòu)建為例,編譯測試構(gòu)建系統(tǒng)可以實現(xiàn)自動化開發(fā)及構(gòu)建,減少編譯時間,增加每天的集成次數(shù)和編譯次數(shù),創(chuàng)建一個穩(wěn)定的可以隨時發(fā)布的應(yīng)用程序代碼庫,實現(xiàn)自動化集成并且自動回滾有缺陷的代碼[5]。新方法通過Jenkins上運行的自動化編譯及測試項目Job實現(xiàn)自動化,表1是自動編譯及測試項目Job。
表1 自動編譯類項目Job
各項目Job之間無管道Pipeline,各類項目Job間的觸發(fā)、依賴關(guān)系,如圖2所示。
為了在任何時間點都可以向客戶交付可運行高品質(zhì)的軟件產(chǎn)品,需要建立自動化測試機制[6]。這意味著代碼在合成到主干前,系統(tǒng)就可以捕獲新代碼的編譯錯誤或功能錯誤,并觸發(fā)代碼自動回滾,其是一套動態(tài)并且強大高效機制。代碼提交觸發(fā)冒煙測試后。
采用的自動測試策略,見表2。冒煙測試應(yīng)用于每一個活躍的開發(fā)分支和主干Master分支,每15 min檢查一次代碼改動,如有更新則運行冒煙測試。冒煙測試用例個數(shù)隨著新功能的增加而增加[7]?;貧w測試應(yīng)用于每一個活躍的開發(fā)分支和主干Master分支,每日凌晨運行自動化測試平臺上的所有用例。升級—回滾測試應(yīng)用于每一個活躍的開發(fā)分支和主干Master分支,每日凌晨運行。
隨著新功能的增加,冒煙測試的范圍會逐步擴大,包括所有活躍的開發(fā)分支和Master分支都會有運行冒煙測試?;貧w測試包括所有測試用例和檢查點,并逐步實現(xiàn)自動化測試平臺所有用例的自動化。升級—回滾測試支持客戶版本到最新開發(fā)版本的升級—回滾自動化測試。
容器技術(shù)(Docker)是一個集群管理、操作系統(tǒng)和應(yīng)用的全面解決方案。例如,編排平臺Kubernetes,Apache Mesos和 Service Fabric提供集群環(huán)境的統(tǒng)一化管理方案,對應(yīng)用有非常巨大的推動作用。Chef/Puppet/PowerShell等極大地推動自動編譯測試環(huán)境獲取能力的提升。
容器化的ACF構(gòu)架,如圖3所示。構(gòu)建一個半Docker解決方案,NFS和DHCP服務(wù)器是在主機而不是容器中。Docker容器是環(huán)境,代碼是在版本控制下從主機映射的,配置通過腳本“加載”到容器中。這里選擇半Docker解決方案是因為Docker技術(shù)還是存在一些限制,例如與內(nèi)核相關(guān)的功能NFS,于是放到虛擬環(huán)境外的真機上。而DHCP理論上可以放到Docker內(nèi)部,但是需要配置2層網(wǎng)絡(luò),這樣會破壞虛擬化的封裝性,權(quán)衡利弊決定將其也放到外部真機上。
圖1 自動編譯測試方法技術(shù)架構(gòu)
表2 自動測試策略
圖2 各類項目job的觸發(fā)依賴關(guān)系
圖3虛擬容器化的ACF構(gòu)架圖
在新時期促進集成電路產(chǎn)業(yè)和軟件產(chǎn)業(yè)高質(zhì)量發(fā)展的大背景下,為了更快更好地交付業(yè)務(wù)需求,提高效率的軟件自動編譯測試新方法順應(yīng)時代需求應(yīng)運而生。
通過實驗驗證,該方法以全覆蓋的自動化技術(shù)及虛擬化容器技術(shù)為基礎(chǔ),實現(xiàn)了全覆蓋自動構(gòu)建、自動部署、自動監(jiān)控、自動測試。基于虛擬化的容器技術(shù),有效減少了大規(guī)模軟件安裝、部署、配置及升級等引入的大量重復(fù)性工作?;谲浖|(zhì)量保障理論,選取合適的測試技術(shù),實現(xiàn)了自動化測試,降低了缺陷及失效概率,提高了軟件產(chǎn)品質(zhì)量,促進了持續(xù)質(zhì)量改進。該方法具有較的廣泛適應(yīng)性,值得推廣。