董 昕 梁 艷 李建佳 石欣漾
(成都工業學院計算機工程學院,四川 成都 611730)
較大規模和較高復雜度使軟件開發、測試及運營維護變得更加困難,嚴重制約了軟件研發效率提升及軟件產業的進一步發展具體問題有4類。1)代碼提交結果較長時間不可見。2)分析構建失敗耗時較多。3)開發及測試的脫節。4)管理層與開發、測試的脫節。
為了解決上述問題,筆者提出一種基于虛擬化容器技術的自動編譯測試新方法。該方法在持續集成的環境基礎上構建軟件全生命周期自動化環境,實現適合大規模軟件安裝部署的容器技術,并向團隊提供測試框架、大數據分析解決方案及基于云的可視化質量管理平臺。
該文提出一種自動編譯測試新方法,在持續集成的環境(例如基于Jenkins 或TFS完成全過程的自動調度)的基礎上構建軟件全生命周期自動化環境(例如基于容器技術平臺Kubernetes),向團隊提供適合大規模軟件安裝部署的容器技術、統一的測試自動化框架、大數據分析的解決方案及基于云平臺的質量管理平臺,使整個軟件生命周期軟件質量狀態(例如質量儀表盤Quality Dashboard)能夠一目了然。
筆者基于自動化原理,首先明確具體自動化的目標,然后制定策略、確定方案、采用技術及工具,提高效率。自動化過程可使開發人員更關心軟件的邏輯而不用與復雜的配置打交道。自動化也是提高可測試性、一致性、穩定性、部署頻率和達到持續交付核心[1]。經調查,軟件企業對自動構建、自動部署、自動監控以及自動測試等方面關注度較高。
自動化是自動編譯測試首先要完成的工作,也是效率提升最直接的抓手,需要重點關注構建、測試的自動化[2]。以構建自動化為例,實現自動化的大致步驟如下。構建工具和架構成型→開發人員能方便輕易使用→實現快速構建成功→失敗構建逐漸減少→人工構建工作減少→減員增效。
基于虛擬化的容器技術,能夠有效減少大規模軟件安裝、部署、配置及升級等引入的大量重復性工作。容器是輕量級的虛擬化組件,以隔離的方式運行應用負載。它們運行自己的進程、文件系統和網絡棧,這些資源都是由運行在硬件上的操作系統所虛擬化出來的。容器為開發、測試團隊提供一致的環境,避免因為環境不統一產生的缺陷誤報。開發人員可以很容易的通過容器鏡像復現測試人員和客戶報來的缺陷[3]。利用容器還可以避免環境污染和批量快速地啟動多個測試環境并行測試來提高測試效率。容器能夠用新穎的方式驗證軟件安裝。通過自動化解決方案,同時配合容器技術,打通開發、測試團隊間的無形壁壘。
該文實驗的被測體基于網絡的應用程序及移動端app。采用的技術架構基于Jenkins為核心搭建,如圖1所示。日常工作中訪問的Jenkins網站是運行在Master主節點上,當一個項目Job被(自動或手動)觸發后,Master主節點根據項目Job的配置實現對項目job的分配調度。該架構利用云與虛擬化技術可同時支持多個被測體的回歸測試及升級—回滾測試,并利用虛擬化技術支持多個被測體的冒煙測試[4]。
以自動化構建為例,編譯測試構建系統可以實現自動化開發及構建,減少編譯時間,增加每天的集成次數和編譯次數,創建一個穩定的可以隨時發布的應用程序代碼庫,實現自動化集成并且自動回滾有缺陷的代碼[5]。新方法通過Jenkins上運行的自動化編譯及測試項目Job實現自動化,表1是自動編譯及測試項目Job。

表1 自動編譯類項目Job
各項目Job之間無管道Pipeline,各類項目Job間的觸發、依賴關系,如圖2所示。
為了在任何時間點都可以向客戶交付可運行高品質的軟件產品,需要建立自動化測試機制[6]。這意味著代碼在合成到主干前,系統就可以捕獲新代碼的編譯錯誤或功能錯誤,并觸發代碼自動回滾,其是一套動態并且強大高效機制。代碼提交觸發冒煙測試后。
采用的自動測試策略,見表2。冒煙測試應用于每一個活躍的開發分支和主干Master分支,每15 min檢查一次代碼改動,如有更新則運行冒煙測試。冒煙測試用例個數隨著新功能的增加而增加[7]。回歸測試應用于每一個活躍的開發分支和主干Master分支,每日凌晨運行自動化測試平臺上的所有用例。升級—回滾測試應用于每一個活躍的開發分支和主干Master分支,每日凌晨運行。
隨著新功能的增加,冒煙測試的范圍會逐步擴大,包括所有活躍的開發分支和Master分支都會有運行冒煙測試。回歸測試包括所有測試用例和檢查點,并逐步實現自動化測試平臺所有用例的自動化。升級—回滾測試支持客戶版本到最新開發版本的升級—回滾自動化測試。
容器技術(Docker)是一個集群管理、操作系統和應用的全面解決方案。例如,編排平臺Kubernetes,Apache Mesos和 Service Fabric提供集群環境的統一化管理方案,對應用有非常巨大的推動作用。Chef/Puppet/PowerShell等極大地推動自動編譯測試環境獲取能力的提升。
容器化的ACF構架,如圖3所示。構建一個半Docker解決方案,NFS和DHCP服務器是在主機而不是容器中。Docker容器是環境,代碼是在版本控制下從主機映射的,配置通過腳本“加載”到容器中。這里選擇半Docker解決方案是因為Docker技術還是存在一些限制,例如與內核相關的功能NFS,于是放到虛擬環境外的真機上。而DHCP理論上可以放到Docker內部,但是需要配置2層網絡,這樣會破壞虛擬化的封裝性,權衡利弊決定將其也放到外部真機上。

圖1 自動編譯測試方法技術架構

表2 自動測試策略

圖2 各類項目job的觸發依賴關系

圖3虛擬容器化的ACF構架圖
在新時期促進集成電路產業和軟件產業高質量發展的大背景下,為了更快更好地交付業務需求,提高效率的軟件自動編譯測試新方法順應時代需求應運而生。
通過實驗驗證,該方法以全覆蓋的自動化技術及虛擬化容器技術為基礎,實現了全覆蓋自動構建、自動部署、自動監控、自動測試。基于虛擬化的容器技術,有效減少了大規模軟件安裝、部署、配置及升級等引入的大量重復性工作。基于軟件質量保障理論,選取合適的測試技術,實現了自動化測試,降低了缺陷及失效概率,提高了軟件產品質量,促進了持續質量改進。該方法具有較的廣泛適應性,值得推廣。