基于VS的智能驾驶软件测试系统的设计与实现

2021-09-24 08:32曲延羽邓琬云熊铎程林智桂冉毅德
汽车与驾驶维修(维修版) 2021年9期
关键词:软件测试软件开发

曲延羽 邓琬云 熊铎程 林智桂 冉毅德

关键词:软件测试;软件开发;逻辑验证

0 引言

随着智能驾驶技术的快速发展,目前智能驾驶辅助系统产品已占了汽车市场的一席之地并快速迭代[1]。为了保证智能驾驶辅助系统软件的质量及安全性能,相应需求的软件测试成为软件开发过程中必不可少的一部分[2]。

不同平台开发的软件代码,测试模式也不尽相同。目前,常见的开发模式是基于Matlab 数字软件平台搭建Simulink模型开发,或基于Microsoft Visual Studio(VS)编译环境使用C++ 语言进行编程开发。对于Simulink 开发的模型,可以在Matlab 平台上完成单元模块的部分测试和仿真验证[3] ;但对于C++ 语言编程开发的软件,需要通过借助不同工具进行测试和仿真验证。

智能驾驶辅助系统软件代码具有严密的逻辑性,需要完善的测试手段对各源代码模块进行充分验证,最大限度地提高软件性能。单一的单元测试不能满足对控制模块内部逻辑结构的完整测试。而集成测试需采用黑盒模型且过程较长,这种验证过程耗费大量的时间,会降低开发与测试效率。

因此,针对C++ 语言编程的智能驾驶辅助系统软件,本文提出了一种基于VS 编译环境,以模块作为测试单元,对模块逻辑功能进行测试的方法。本方法结合白盒测试与黑盒测试的方式对模块的算法进行测试与验证,快速精准定位到源代码中的问题代码和逻辑漏洞,提高了代码开发与测试效率。

1 智能驾驶软件测试系统设计原理及架构

1.1 智能驾驶软件测试系统设计原理

智能驾驶软件测试系统的设计原理,是使用数据文件或实车数据的输入信号,形成输入参数,在测试驱动程序中建立读取测试数据与选取测试模块的接口。再通过确定读取的测试数据及选取的测试模块,将相应的输入参数传入测试驱动程序,测试驱动程序调用相应的待测模块工作函数执行测试程序。待执行测试程序结束后,将测试结果输出,并在测试结果模块中,将预期输出结果与实际输出结果进行比较。之后,系统对不符合预期结果的部分进行标记,提示开发人员对不符合预期结果的部分进行检查或修正(图1)。

1.2 智能驾驶软件测试系统设计架构

智能驾驶软件测试系统架构主要由测试数据存储、测试执行程序和输出结果处理三大功能模块组成(图2)。待测模块代表具有相对独立且逻辑结构完整的源代码模块,其中小模块1、小模块2 等代表具有不同逻辑判断的模块。整个测试执行过程维持待测模块源代码“黑盒”状态,确保待测模块与测试执行程序模块间的相对独立性。这样既保证了测试的可执行性,又保证源代码的安全性。智能驾驶软件测试系统的主要功能模块如下。

1.2.1 测试数据存储模块

测试数据存储模块存储读取的輸入参数与预期结果变量数据信息,可接收实车采集数据与模拟数据两种数据模式。这些数据传输到测试执行程序模块,作为模拟运行的输入参数。

1.2.2 测试执行程序模块

测试执行程序调用待测模块工作函数,对输入信号进行循环读取执行,模拟多帧连续运行模式,再将每次读取运行后的输出结果变量传输给结果处理模块。除了待测模块固定的测试值外,可以依据功能需求将模块类成员变量的测试值同时输出。整个测试执行过程不涉及开发模块内部源代码的改动,既保证测试的可执行性,又保证源代码的安全性。

1.2.3 数据结果处理模块

测试得到的运算输出变量(测试值)逐帧存储到结果处理模块,并与测试数据存储模块的预期输出变量(期望值)进行逐一比对,将测试值与期望值的比对结果作为源代码测试验证的最终结果。

2 智能驾驶软件测试系统策略

智能驾驶软件测试系统策略如下:编写测试用例数据文件,读取测试用例数据文件的输入信号,对待测试模块进行测试。测试系统根据每帧的模块输出信号、中间值信号与数据文件的期望值之间产生的差异,对当前帧的计时器信号进行标记。

测试人员通过计时器信号的标记进行定位查找,找出导致测试失败的输出信号与中间值信号。然后通过观察测试值与期望值之间的差异,再梳理待测模块中包含导致测试时报的输出信号与中间值信号的部分代码逻辑,缩小搜索代码逻辑漏洞的范围,快速定位待测试模块问题,提高更正代码的效率(图3)。

3 智能驾驶软件测试系统的应用

本次测试采用符合LKA 按键逻辑功能规范的实车测试数据真实信号,作为测试数据文件的输入信号与期望值信号。LKA按键是是车道保持功能的物理开关被按下时,从CAN 总线传过来的信号。通过选择测试用例,将实车测试数据文件导入测试系统中,点击开始测试,则对LKA 按键逻辑模块进行逻辑测试。

整个测试结果如图4 所示,其中,红色点线为输入数据(LKA按键状态),蓝色点线与黑色点线,分别表示LKA 功能状态是否激活的预期输出变量信号和测试输出变量信号。除此之外,在测试结束后,可输出数据测试报告(图5)。

图5 中标出了LKA 按键帧数及功能状态在2.00 ~ 2.26 s 的相关数据。可以看出,在2.00 s 时,LKA 开关按键被按下,持续时间为0.14 s,大于0.10 s(0.10 s 为功能开启的时间范围最小值),LKA 功能状态信号从0 跳变至1,LKA 功能状态激活;3.52 s 时,LKA 开关按键被按下的持续时间为2.14 s,小于3.00 s(3.00 s 为功能开启的时间范围最大值),LKA 功能状态信号从1 跳变至0,LKA 功能状态关闭;7.62 ~ 8.04 s 时,LKA 开关按键按下,持续时间为0.42 s,因此,随着按键抬起,LKA 功能状态激活;9.44 s 时,LKA 开关按键被按下,12.94 s 时LKA 开关按键抬起,持续时间为3.50 s(大于3.00 s),LKA 功能不会被关闭,仍保持激活状态。

从图4 可以看出,在2.14 s、5.68 s 和8.04 s,LKA 功能状态信号期望值与测试值的信号跳变状态完全一致,表明此测试系统对LKA 按键模块逻辑条件的测试结果符合测试用例中提出的预期结果,模块代码逻辑符合预期设计,测试成功。另外,通过利用实车采集信号作为输入信号进行模块逻辑测试,还可应用于测试用例外其他多种真实输入场景模块代码的测试验证手段。

本测试系统应用场景不仅应用于实车信号,通过智能驾驶软件测试系统验证修改软件算法,缩减集成及上车验证时间;还可以更多应用于符合功能规范设计的测试用例信号,在软件集成前期使用此方法来验证软件算法的逻辑性是否符合功能规范。

4 结束语

综上所述,对于C++ 语言编程开发的智能驾驶系统软件测试方法,具有同一编译环境不需要移植源代码的优势,可使部分模块测试参与到代码开发过程中,实现源代码的部分自测自验,提高开发效率。通过与智能驾驶软件测试系统的设计用例与实车测试数据对比说明,此测试系统能够有效自检模块源代码的逻辑结构,可以作为辅助开发人员更高效开发源代码的手段。通过每帧预期结果与运算结果对应比较,可以实现智能驾驶软件算法的验证,解决查找源代码问题时效慢的问题。

猜你喜欢
软件测试软件开发
软件测试方向人才培养“1+X”融合研究
大数据背景下软件测试技术的发展
关于 Web 应用系统的软件测试的研究
信息安全环境下的计算机软件开发研究
核电厂定期试验管理软件开发
FPGA软件开发过程中编码规范的作用
军用软件测试项目管理系统设计与实现
软件测试发展现状及前景的探讨