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

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

圖2 源碼管理配置

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

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

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

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

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

圖8 構建后的配置

圖9 html詳細報告

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

圖11 軟件單次迭代耗時分析
CI/CT平臺將繁瑣重復的集成測試工作交給機器來完成,降低了產品軟件集成的難度,提高了軟件開發(fā)效率,同時允許項目組將精力投入到更重要及更棘手的問題上,幫助項目成員時刻了解開發(fā)測試進度,開展有效決策,樹立產品信心,最終提高軟件產品的質量。研究的CI/CT平臺在某HEV整車控制器軟件開發(fā)項目中應用后,節(jié)省了近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的持續(xù)集成方案設計與實現(xiàn)[D].北京:中國科學院大學,2014.
[3] 劉博,汪宇昕.一種基于Jenkins的嵌入式軟件持續(xù)集成方法[J].鐵道機車車輛,2018,38(6):20-22.
[4] 陳迪.基于Jenkins的持續(xù)集成系統(tǒng)研究[J].電子測試, 2020(8):48-51.
[5] 蔡永健,路云菲,鄔遠祥,等.基于Jenkins和Docker容器技術在數(shù)字化電站項目自動化部署的研究及應用[J].計算機時代,2020(2):77-80.
[6] 雷建勝,蘇曉,金明磊.一種分布式可持續(xù)集成自動化測試平臺[J].計算機與現(xiàn)代化,2020(4):14-18.
[7] 張曉帆,劉寧,潘帆.持續(xù)集成系統(tǒng)可視化設計研究[J].計算機與現(xiàn)代化,2020,30(2):58-62.
[8] 錢俊磊.基于CANoe和Jenkins的ECU軟件自動化測試系統(tǒng)的設計與實現(xiàn)[J].汽車實用技術,2019,44 (22):64-67.
[9] SMART J F.Jenkins權威指南[M].北京:電子工業(yè)出版社,2016.
[10] 黨美婷,任佳越,楊啟東.基于dSPACE 的電機控制器硬件在環(huán)測試研究[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。