APP下载

基于汽车嵌入式软件的持续集成和持续测试分析

2023-06-14蓝启亮吴光耀周升辉

汽车实用技术 2023年10期
关键词:嵌入式软件测试用例插件

王 帅,蓝启亮,陈 聪,吴光耀,周升辉

基于汽车嵌入式软件的持续集成和持续测试分析

王 帅,蓝启亮,陈 聪,吴光耀,周升辉

(比亚迪汽车工业有限公司 产品规划及汽车新技术研究院,广东 深圳 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调度相关软件完成编译集成、测试执行、测试报告并将测试结果以邮件形式发送给开发和测试人员。本方案不仅能够密切监视软件开发过程中的问题,而且能够在无人值守的环境下自动完成预设的测试任务,完成重复的测试过程,通过更快地识别和修复相关问题,最终实现持续不断的快速交付。

1 系统设计

1.1 架构设计

本文所构建的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.2 持续集成测试流程

持续集成测试平台的工作流程如下:

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对整个持续集成平台进行管理维护,同时可以根据反馈结果对测试用例进行维护。以上流程会反复迭代,从而达到软件持续集成测试的目的。

2 CI/CT项目配置

根据前述的CI/CT平台架构设计,针对新能源整车控制器的嵌入式软件进行CI/CT项目的应用。

2.1 Jenkins平台配置

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)构建后操作:负责收集结果和发送邮件。

2.2 源码管理配置

Jenkins需要通过Git Plugin分别与软件仓库和测试仓库进行交互,如图2所示,填入软件仓库地址以及具有仓库读写权限的用户密码。根据任务需求,分别在Polling ignores commits in certain paths中通过正则表达式监控指定文件夹进行触发构建,并设定浅克隆深度为5层,以提高克隆速度。

2.3 构建触发器配置

构建触发器可以实现软件更改后自动触发执行构建,此处采用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构建触发器设置

2.4 CI任务配置

CI任务主要通过bat脚本调用相关编译工具和模型静态检查工具实现,任务流程如图6所示。

图6 CI任务流程

CI节点服务器Jenkins-Slaver1的环境采用统一部署,避免了不同人员因配置不同导致的编译差异,编译结果更加可靠,同时服务器拥有高达72个核心的处理器,因此,可以充分调用Hightec的多核编译能力,大大加快编译速度。

2.5 CT任务配置

对于CT任务,通过Python调用测试系统api实现自动化测试,自动化测试的流程框架如图7所示。自动化测试用例是实现CT的关键所在,为了加速自动化测试用例的开发速度,事先将整套HIL测试系统[10]提供的接口变量声明到Mapping文件中,软件测试工程师根据Mapping中的接口变量进行标准的文本用例开发,Python负责识别预先定义的文本关键字,将文本用例自动转换为所需的自动化测试用例,缩短人工开发自动化用例90%的耗时。测试工程师将用例和用例组合上传到测试仓库用于Jenkins调用以执行CT任务。

图7 CT任务流程框架

注:集成校准和采集(INtegrated Calibration and Acquisition, INCA)。

CT任务构建过程中涉及到的控制器上下电、烧写脚本分别通过调用dSPACE、INCA软件系统的api函数来实现,使繁琐手动的控制器程序烧写及标定步骤得以完全自动化,避免人为操作失误的引入。测试工程师只需专注于用例开发和测试分析报告即可。

2.6 构建后配置

在CI/CT任务结束以后,需要将测试结果生成测试报告并传递给相关人员,同时开启Junit、html和E-mail插件,相关配置如图8 所示。

Junit生成的结果趋势报告可以查看项目的历史构建状态。图9为html详细报告,其可在网页快速进行查看,从而帮助项目成员快速了解项目进展及定位问题点,进而完成用例和软件迭代。

图8 构建后的配置

图9 html详细报告

图10 邮件通知

Jenkins的任务信息会通过E-mail插件发送给相关人员,以达到提醒目的,如图10所示。

3 项目应用

经过前面配置后可以将CI/CT应用于具体的汽车嵌入式软件开发项目中,以某混合电动汽车(Hybrid Electric Vehicle, HEV)VCU软件迭代开发过程为例,统计得到如图11所示的开发过程耗时分析图,可以发现CI/CT引入以后节省了近90%的软件迭代耗时,这主要是归功于全自动集成测试流程带来的效率提升。

图11 软件单次迭代耗时分析

4 结论

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。

猜你喜欢

嵌入式软件测试用例插件
基于SmartUnit的安全通信系统单元测试用例自动生成
自编插件完善App Inventor与乐高机器人通信
基于混合遗传算法的回归测试用例集最小化研究
实时嵌入式软件的测试技术
全景相机遥控器嵌入式软件V1.0 相关操作分析
基于jQUerY的自定义插件开发
MapWindowGIS插件机制及应用
基于Eclipse的航天嵌入式软件集成开发环境设计与实现
航天嵌入式软件浮点运算误差分析与控制
基于Revit MEP的插件制作探讨