王 帥,藍啟亮,陳 聰,吳光耀,周升輝
基于汽車嵌入式軟件的持續集成和持續測試分析
王 帥,藍啟亮,陳 聰,吳光耀,周升輝
(比亞迪汽車工業有限公司 產品規劃及汽車新技術研究院,廣東 深圳 518118)
隨著汽車控制器軟件迭代速度的加快,其對軟件質量提出了更高的要求,故軟件集成和測試周期短而頻繁。持續集成/持續測試(CI/CT)已被認可是盡早發現缺陷的最佳實踐。文章分析了汽車嵌入式軟件的開發過程,通過引入持續集成測試方法,基于Jenkins搭建軟件持續集成測試平臺,該平臺支持多種開發語言,可以集成調用編譯器、模型在環(MIL)測試、硬件在環(HIL)測試等工具鏈,從而實現軟件集成、測試和缺陷通知完全自動化,將軟件工程師從重復冗長的集成測試任務中解放出來。持續集成測試在某混合電動汽車(HEV)整車控制器(VCU)軟件項目應用以后,可以節省近90%的軟件迭代耗時。
持續集成;持續測試分析;軟件自動化測試;汽車嵌入式軟件
在汽車行業向“新四化”趨勢發展的推動下,傳統分布式的電子電氣(Electrical Electronic, EE)架構向域集中式架構發展,伴隨著域控制器概念的提出,軟件也將根據相應功能域分類集成,域控制器的代碼量也與日俱增。服務導向架構(Service-Oriented Architecture, SOA)的開發模式可實現各軟件功能模塊間解耦,幫助軟件團隊縮短開發周期,快速迭代軟件版本。空中下載(Over- The-Air, OTA)升級技術將軟件快速部署到各個域控制器,為軟件產品的快速迭代提供保障。在行業競爭日趨激烈的背景下,只有要求產品不斷壓縮上市時間,才能搶占市場獲得主動權。持續集成(Continuous Integration, CI)和持續測試(Conti- nus Testing, CT)來源于Development和Operations,即DevOps[1]中提倡的CI—持續部署(Continuous Deployment, CD)—CT—持續交付(Continuous Delivery, CD),通過流程和CI/CT工具平臺,實現自動化“軟件交付”,使得構建、測試、發布軟件能夠更加快捷、頻繁和可靠,從而為軟件快速迭代提供質量保證,這一開發模式多出現于互聯網軟件行業[2-7],近年來在汽車嵌入式軟件領域中的應用也逐漸增多[8]。
傳統汽車軟件開發模型中,軟件開發工程師負責對軟件進行集成編譯,測試工程師通過手動/半自動化腳本進行軟件測試,其特點是以“人”為中心,需要工程師重復性的手動編譯、集成、測試、不斷更新工具腳本或配置、記錄問題和測試狀態跟蹤。測試周期和質量依賴于軟件工程師的數量、經驗能力和工具數量。CI/CT方法以人、測試流程、測試工具相結合,通過一系列工具鏈組合與自動化測試工程,提交新版軟件時即為測試流程的開始,接著快速找到軟件缺陷,解決測試和開發在時間上的矛盾,從而幫助軟件開發團隊實現軟件產品速度與質量目標。
基于Jenkins[9]搭建了CI/CT平臺,通過Jenkins配合版本控制軟件、軟件編譯工具、自動化測試工具和報告插件,當檢測到代碼倉庫有版本變化時,能夠自動觸發Jenkins調度相關軟件完成編譯集成、測試執行、測試報告并將測試結果以郵件形式發送給開發和測試人員。本方案不僅能夠密切監視軟件開發過程中的問題,而且能夠在無人值守的環境下自動完成預設的測試任務,完成重復的測試過程,通過更快地識別和修復相關問題,最終實現持續不斷的快速交付。
本文所構建的CI/CT平臺架構如圖1所示,該系統主要由包含版本控制、自動化構建、自動化測試三個核心環節。因此,將CI/CT平臺劃分為以下三個部分:

圖1 CI/CT平臺架構
1)版本管理服務器:Gitblit作為版本控制管理的工具,負責軟件代碼的版本控制,保證實施持續集成時,源代碼保存位置一致,以保障代碼的可維護性。因此,集成人員能夠從中輕松獲取項目工程全部源代碼。
2)持續集成服務器:Jenkins作為持續集成服務器,是CI/CT平臺的中心,通過驅動整套系統完成持續集成測試流程,并將結果發送至相關人員。Jenkins支持分布式部署,其中Jenkin-Master為Jenkins的主節點,通過Web端登錄,主要用于管理平臺任務和調度Jenkins-Slaver從節點。一個Master可以關聯多個Salver,同時每個Slaver可以分配多個Job[9]。
3)自動化集成測試環境:Hightec等工具作為軟件編譯集成環境,配置成Jenkins-Slaver1從節點進行軟件集成編譯,負責CI任務。dSPACE等硬件在環(Hardware In Loop, HIL)測試工具鏈作為軟件測試環境,配置成Jenkins-Slaver2從節點負責CT任務。
持續集成測試平臺的工作流程如下:
1)開發人員負責軟件迭代并提交新的變更到Git倉庫;
2)Jenkins Master服務器會輪詢或者被Git Post-receive hooks腳本觸發,分發相應任務;
3)CI節點Jenkins Slaver1接收到集成任務后,從Git中拉取相應分支進行集成編譯和模型在環(Model In Loop, MIL)單元測試,最后反饋集成編譯結果給Jenkins Master;
4)CT節點Jenkins Slaver2接收到測試任務后,從Jenkins Master獲取CI的結果文件和測試用例進行自動化測試,最后反饋測試結果給Jenkins Master;
5)最終全部測試結果和報告會由Jenkins Master統一以郵件方式發送給相關人員。
開發人員在接收到Jenkins報告郵件后,可以迅速得知本次Git推送是否成功通過編譯和測試,如果失敗也可以迅速查找問題并重新推送。測試人員可以通過Jenkins Master對整個持續集成平臺進行管理維護,同時可以根據反饋結果對測試用例進行維護。以上流程會反復迭代,從而達到軟件持續集成測試的目的。
根據前述的CI/CT平臺架構設計,針對新能源整車控制器的嵌入式軟件進行CI/CT項目的應用。
Jenkins具備內容豐富的插件庫,其作為開源工具可供測試人員實現持續集成配置,整車控制器(Vehicle Control Unit, VCU)軟件集成測試任務需安裝Jenkins插件,如表1所示。
表1 Jenkins插件列表
插件作用 Git Plugin輪詢、提取、簽出分支,合并、標記和推送Git存儲庫等 Copy Artifact Plugin項目間傳遞文件 JUnit Plugin生成可擴展的標記語言(EXtensible Markup Language, XML)測試報告,并提供歷史測試結果的圖形可視化 Piketec-tpt Plugin執行TPT軟件的測試用例,并生成測試報告 Html Publisher發布html測試報告 Mailer Plugin為構建結果配置電子郵件通知
基于以上插件在Jenkins搭建持續集成和持續測試任務,任務流主要由以下部分組成:
1)General通用設置:可以設定全局參數等;
2)源碼管理:負責與Git服務器進行交互;
3)構建觸發器:負責設定任務的觸發條件;
4)構建環境:負責對工程文件進行配置,如編譯配置、測試用例生成、控制器程序燒寫、執行編輯測試等;
5)構建后操作:負責收集結果和發送郵件。
Jenkins需要通過Git Plugin分別與軟件倉庫和測試倉庫進行交互,如圖2所示,填入軟件倉庫地址以及具有倉庫讀寫權限的用戶密碼。根據任務需求,分別在Polling ignores commits in certain paths中通過正則表達式監控指定文件夾進行觸發構建,并設定淺克隆深度為5層,以提高克隆速度。
構建觸發器可以實現軟件更改后自動觸發執行構建,此處采用Poll SCM方式,并配置兩種觸發器,即
1)事件觸發:gitblit配置Post-receive鉤子實現事件觸發;
2)定時觸發:Jenkins設置定期輪詢定時觸發。其中,Post-receive鉤子函數采用groovy腳本實現,程序結構如圖3所示。

圖2 源碼管理配置

圖3 Gitblit的鉤子函數
此腳本需在Gitblit倉庫啟用,Gitblit Post- receive設置如圖4所示。

圖4 Gitblit Post-receive設置
定時觸發方式在Jenkins構建觸發器設置,如圖5所示,(H */1 * * *)為每小時進行輪詢。

圖5 Jenkins構建觸發器設置
CI任務主要通過bat腳本調用相關編譯工具和模型靜態檢查工具實現,任務流程如圖6所示。

圖6 CI任務流程
CI節點服務器Jenkins-Slaver1的環境采用統一部署,避免了不同人員因配置不同導致的編譯差異,編譯結果更加可靠,同時服務器擁有高達72個核心的處理器,因此,可以充分調用Hightec的多核編譯能力,大大加快編譯速度。
對于CT任務,通過Python調用測試系統api實現自動化測試,自動化測試的流程框架如圖7所示。自動化測試用例是實現CT的關鍵所在,為了加速自動化測試用例的開發速度,事先將整套HIL測試系統[10]提供的接口變量聲明到Mapping文件中,軟件測試工程師根據Mapping中的接口變量進行標準的文本用例開發,Python負責識別預先定義的文本關鍵字,將文本用例自動轉換為所需的自動化測試用例,縮短人工開發自動化用例90%的耗時。測試工程師將用例和用例組合上傳到測試倉庫用于Jenkins調用以執行CT任務。

圖7 CT任務流程框架
注:集成校準和采集(INtegrated Calibration and Acquisition, INCA)。
CT任務構建過程中涉及到的控制器上下電、燒寫腳本分別通過調用dSPACE、INCA軟件系統的api函數來實現,使繁瑣手動的控制器程序燒寫及標定步驟得以完全自動化,避免人為操作失誤的引入。測試工程師只需專注于用例開發和測試分析報告即可。
在CI/CT任務結束以后,需要將測試結果生成測試報告并傳遞給相關人員,同時開啟Junit、html和E-mail插件,相關配置如圖8 所示。
Junit生成的結果趨勢報告可以查看項目的歷史構建狀態。圖9為html詳細報告,其可在網頁快速進行查看,從而幫助項目成員快速了解項目進展及定位問題點,進而完成用例和軟件迭代。

圖8 構建后的配置

圖9 html詳細報告

圖10 郵件通知
Jenkins的任務信息會通過E-mail插件發送給相關人員,以達到提醒目的,如圖10所示。
經過前面配置后可以將CI/CT應用于具體的汽車嵌入式軟件開發項目中,以某混合電動汽車(Hybrid Electric Vehicle, HEV)VCU軟件迭代開發過程為例,統計得到如圖11所示的開發過程耗時分析圖,可以發現CI/CT引入以后節省了近90%的軟件迭代耗時,這主要是歸功于全自動集成測試流程帶來的效率提升。

圖11 軟件單次迭代耗時分析
CI/CT平臺將繁瑣重復的集成測試工作交給機器來完成,降低了產品軟件集成的難度,提高了軟件開發效率,同時允許項目組將精力投入到更重要及更棘手的問題上,幫助項目成員時刻了解開發測試進度,開展有效決策,樹立產品信心,最終提高軟件產品的質量。研究的CI/CT平臺在某HEV整車控制器軟件開發項目中應用后,節省了近90%的迭代耗時。
[1] ALLSPAW J, HAMMOND P. 10+ Deploys Per Day: Dev and Ops Cooperation at Flickr[C]//Web Perfor- mance and Operations Conference.Washington:O'Rei- lly,2009:233-237.
[2] 卞孟春.基于Jenkins的持續集成方案設計與實現[D].北京:中國科學院大學,2014.
[3] 劉博,汪宇昕.一種基于Jenkins的嵌入式軟件持續集成方法[J].鐵道機車車輛,2018,38(6):20-22.
[4] 陳迪.基于Jenkins的持續集成系統研究[J].電子測試, 2020(8):48-51.
[5] 蔡永健,路云菲,鄔遠祥,等.基于Jenkins和Docker容器技術在數字化電站項目自動化部署的研究及應用[J].計算機時代,2020(2):77-80.
[6] 雷建勝,蘇曉,金明磊.一種分布式可持續集成自動化測試平臺[J].計算機與現代化,2020(4):14-18.
[7] 張曉帆,劉寧,潘帆.持續集成系統可視化設計研究[J].計算機與現代化,2020,30(2):58-62.
[8] 錢俊磊.基于CANoe和Jenkins的ECU軟件自動化測試系統的設計與實現[J].汽車實用技術,2019,44 (22):64-67.
[9] SMART J F.Jenkins權威指南[M].北京:電子工業出版社,2016.
[10] 黨美婷,任佳越,楊啟東.基于dSPACE 的電機控制器硬件在環測試研究[J].汽車實用技術,2019,44(18): 131-134.
Continuous Integration and Continuous Testing Analysis Based on Automotive Embedded Software
WANG Shuai, LAN Qiliang, CHEN Cong, WU Guangyao, ZHOU Shenghui
( Product Planning & Automotive New Technology Research Institude,BYD Automobile Industry Company Limited, Shenzhen 518118, China )
As the iteration of automotive embedded software becomes more and more frequent, it poses a higher challenge to software quality, and so software integration and testing cycles become shorter and more frequent. Continuous integration/continus testing(CI/CT) has been acknowledged as the best practice for early detection of defects.This paper analyzes the development process of automotive embedded software,though introducing the method of continuous integration testing,and a software continuous integration testing platform is built based on Jenkins.The platform supports multiple development languages, and can integrate and call the tool chain of compiler, model in loop(MIL) testing, hardware in loop(HIL) testing, etc., so as to realize the complete automation of software integration, testing and defect notification. Finally, engineers can be free themselves from tremendous software development tasks.After the application of continuous integration and continuous testing methods in a hybrid electric vehicle(HEV) vehicle control unit (VCU) software projects, nearly 90% of the software iteration time can be saved.
Continuous integration;Continuous testing analysis;Software automated testing;Automotive embedded software
U467.5+26
A
1671-7988(2023)10-156-07
10.16638/j.cnki.1671-7988.2023.010.032
王帥(1989—),男,工程師,研究方向為混合動力汽車控制、嵌入式軟件、軟件自動化測試,E-mail:sandey. wong@hotmail.com。