APP下载

嵌入式软件PIL自动化测试技术研究

2021-07-03郭佳金鑫邓煜

汽车实用技术 2021年12期
关键词:测试用例断点嵌入式

郭佳,金鑫,邓煜

(陕西重型汽车有限公司,陕西 西安 710200)

引言

当前汽车控制器的开发大都采用V流程开发模式。V流程大致可以用图1表示,分为系统需求分析、架构设计、模型设计、模型测试(MIL)、代码生成、代码测试(SIL)、处理器在环测试(PIL)、硬件在环测试(HIL)[1]。左边是开发流程,右边是对应的是测试流程,每个阶段的开发和测试流程都互相对应[2]。

图1 V流程开发

与V流程相对应的是汽车控制器的开发方法——基于模型设计(MBD),MBD已经成为当前汽车控制器开发的主流方法[3]。基于模型设计采用建模软件完成控制策略建模,模型完成后自动生成代码,然后控制策略代码与底层驱动代码集成,最后下载到目标控制器中。为了保证开发质量,整个开发方法中推荐有相应的测试环节:模型完成后需要进行模型测试(MIL),模型自动生成代码后需要对代码进行测试(SIL),代码经过编译器编译生成可执行文件下载到控制器中,需要处理器在环测试(PIL),还需要对整个控制器进行硬件在环测试(HIL)。整个过程环环相扣,需要一步一步按照MIL、SIL、PIL和HIL执行,只有这样才能开发出符合预期的可靠的一款控制器。否则在实车的复杂工况下可能会出现一些故障无法定位的问题。

另外,在《GB∕T 34590.6-2017 道路车辆 功能安全 第6部分:产品开发:软件层面》的9.4.6章节中指出:对于软件单元测试的测试环境,应尽可能地接近目标环境。如果软件单元测试不是在目标环境下执行,应分析目标代码与源代码的差异,以便在后续测试阶段的目标环境中,定义额外的测试。因此针对基于模型设计的方法中,需要进行模型环境下的测试,即MIL;模型转换成代码后,需要进行代码环境下的测试,即SIL;代码编译后下载到处理器中,需要进行处理器环境测试,即PIL;最后是模拟整个实车环境的硬件在环测试,即HIL测试。”

图2 背靠背测试

1 PIL测试原理

PIL测试(Processor-in-the-Loop-Testing)是发生在SIL测试之后,在HIL测试之前。类似SIL测试,PIL测试是为了验证软件代码在仿真的非实时控制系统中的正确性。在此情况下,程序是在实际的嵌入式处理器或者指令集仿真器上执行的[4]。因此,可以通过PIL测试来验证嵌入式对象代码在处理器中的功能行为。通过PIL测试,不仅可以评估不同的硬件、编译器组合情况下处理数据的方式有所区别,还可以测试模型环境无法测试出的一些行为(如硬件优化代码的使用)。同时也可以读写程序中变量,获取输入控制流。PIL测试原理图如下图3所示。

图3 PIL测试原理

PIL测试是基于模型设计控制器中的一个重要环节,是确保控制器具有较高可靠性的一种重要手段,本文就是研究了一种自动化执行PIL测试的方法:借助德国PikeTec公司提供的嵌入式系统测试工具TPT软件和PLS公司的调试软件UDE(Universal Debug Engine)集成来提供PIL自动化测试技术。

2 PIL测试环境搭建

PIL测试原理如图4所示,首先搭建控制算法模型,将模型生成代码,生成代码后下载到嵌入式处理器里,然后通过调试器与嵌入式处理器相连,再通过调试软件调试目标嵌入式处理器中的代码。调试软件一般都包含设置断点,读取变量值以及给变量赋值等调试功能,这是一种手动PIL测试,本文是在此基础上,加入自动化测试软件,通过自动化测试软件自动调用调试软件进行自动化PIL测试。

图4 自动化PIL测试原理图

2.1 控制算法模型及代码生成

本文中的控制模型是在当前主流模型设计软件MATL-AB/Simulink/Staflow环境下搭建的,搭建完模型首先需要对模型进行仿真,仿真通过只是一个基本的要求,说明模型没有语法类的错误,并不保证模型算法的输出结果与期望一致。为了验证模型算法的输出结果与期望值的一致性,就需要对模型进行测试,也就是前面提到的模型在环测试(MIL),MATLAB/Simulink自带一些工具箱就可以完成对模型的测试,还有一些第三方软件可以进行模型测试。模型通过测试后,就基本充分验证了模型的正确性,用正确的模型再进行代码生成。

MATLAB/Simulink自带有生成嵌入式控制器代码的工具——Embedded Code。Embedded Code工具是一种目标语言编译器,即将模型编译成目标代码——嵌入式代码。正如前文提到的,这种编译器在编译过程中也有可能引入一些因为编译本身原因的错误,导致生成代码可靠性不确定,因为我们需要对生成的代码进行代码测试,也就是我们常说的代码在环测试(SIL),经过SIL之后,基本认为生成的代码安全可靠,就可以下载到嵌入式控制器中了。

本文中嵌入式硬件采用搭载英飞凌公司TC297处理器的开发板,该开发板支持数据的下载、在线调试,同时有基本的输入开关用来给控制器输入信号,有输出指示灯用来观测输出结果。

2.2 自动化测试软件

本文用到的在线调试工具是PLS开发的在线调试工具UDE。UDE支持主流的16/32位单片机产品,如英飞凌32位Aurix系列、飞思卡尔PowerArchitecture系列。可以实现PIL自动化测试的测试软件有多种,需要通盘考虑所使用的嵌入式控制器和在线调试工具来选择相应的PIL测试软件。本文以TPT软件为例,TPT软件是由全球知名的基于模型的嵌入式系统测试工具软件供应商PikeTec开发, TPT全方位支持MIL测试,SIL测试和PIL测试。TPT支持所有的测试过程包括测试建模、测试执行、测试评估以及测试报告的生成。

3 PIL测试过程

3.1 算法模型搭建

在MATLAB的Simulink/stateflow环境下搭建一个简单的灯控算法模型如下图5,算法大致为打开不同的开关,然后调用灯光控制函数,执行不同的亮度。为了叙述方便,设计算法为:当开关(light_switch)为1挡时,输出灯光强度(headlight)为1,开关为2时输出灯光强度为2,开关为0时关闭灯具。左边是开关选择,右边是灯光亮度算法。

图5 亮度控制算法模型

3.2 算法模型生成代码

按照前文叙述的,在模型完成之后,代码生成之前,我们需要进行MIL测试,本文通过Simulink自带的Test Harness工具完成了MIL测试。同时为了提高代码的可读性,在生成代码前进行代码生成配置时将生成代码的输入输出接口变量名进行自定义,生成的核心算法代码如下:

在编译器中编译需要测试的软件代码,生成elf文件(或者其他类型可执行文件),然后在UDE中导入elf文件,根据测试需要设置几个断点,可以进行调试工作,如图6所示:

图6 在源文件中设置断点

3.3 PIL测试工程建立

打开Execution->Platform Configuration进行平台配置,新建FUSION Platform,在右侧添加节点,选择PLS UDE Node,完成在FUSION平台中新建PLS UDE节点,并完成相应的设置,包括制定UDE的工作空间文件加载,elf文件加载,和软件源代码路径加载等。同时需要在TPT完成断点的设置,设置与UDE中一致的断点,设置断点时需要制定源文件,断点的行数,断点的执行顺序,以及可以对变量进行读写设置。本示例中设置与源文件中对应的两个变量,headlight和light_switch, headlight为输出值,只需要读取即可,因此设置为read,light_switch为条件判断变量,需要写入,因此设置为write。如图7和图8所示,图7是在建立FUSION平台中新建PLS UDE节点,图8是完成调用UDE环境的设置。

图7 FUSION平台中新建PLS UDE节点

图8 TPT进行PIL测试工程设置

3.4 测试建模

在设计测试用例时,UDE无法直接识别TPT测试用例中的变量,需要通过Mapping映射来对应两者的关系,可以打开声明编译器View->Declaration Editor,通过Import添加被测代码变量接口,之后在Mappings中注明变量改动之处。Mapping变量之后就打通了TPT与UDE的调用接口了。然后就可以在TPT中对变量进行测试用例设计,设计变量为读或者写,也可以对读取来的变量和特定值进行比较,测试变量是否满足需求。本示例中,为了方便,在TPT中设计的两个变量headlight和light_switch和UDE调试工程中的变量名一样,完成两者的关联后,在TPT中设计测试用例如下,在Channel中选择变量light_switch等于1时,Compare比较headlight是否为1,然后wait等待1s。测试用例设计如下图9。设计完测试用例后,还可以设计不同的测试顺序,形成测试集。

图9 设计测试用例

3.5 测试执行

测试用例设计完了之后,可以设置测试用例的执行顺序,可以选择执行某个特定的测试集,也可以全选,按照设定的顺序执行,点击运行后,可以在图10中看到当前执行到那个测试阶段。测试执行时可以看到UDE界面被TPT调用在自动的调试代码,并按照之前设计断点,不停地在断点处赋值、读值、作比较,自动完成测试。为了方便,在UDE中打开watch窗口,可以看到UDE环境中headlight和light_switch两个变量当前被自动执行时的变化,如图11。同时在TPT执行界面可以看到TPT中声明的变量,定义的断点,参数初始化,调试过程中读写变量的值等信息,这些调试的过程与之前在Configure PLS UDE中配置相对应。

图10 设计测试顺序

图11 UDE环境被TPT软件自动调用并自动测试代码

3.6 测试评估与测试报告

完成测试后,会自动生成测试报告,测试报告会首先有个测试概述,可以看到执行了哪些测试集,测试的通过率,下面是详细的测试结果。从上面的概述中可以随意跳转到你关注的测试点,关注详细的测试结果,供分析参考,图12为本示例设计的一个测试用例的测试报告,从报告中可以看出测试全绿,全部通过,通过前面设计的代码也可以看出当light_switch为1时,headlight就是为1,我们设计的测试用例也是给light_switch赋值1时比较headlight的值是否为1,为1时即测试通过。

图12 测试报告

4 总结

PIL测试作为控制器正向开发的一个环节或者疑难问题分析的一种重要手段,其作用越来越重要。而常规的手动调,难以实现自动化,测试效率低,难以满足工程化的测试要求。本文通过分析当前汽车控制器开发流程,分析PIL测试是控制器开发中的重要一环节,并分析了PIL测试原理,介绍了PIL测试的工具链,最后通过一个例子介绍了用TPT软件进行PIL自动化测试过程,通过整个过程,可以看出借助TPT软件,可以方便地实现PIL自动化测试,整个测试过程也是一种图形化的建模过程。这种测试建模的方式大大降低了测试用例的编写难度,同时测试过程是一种自动化的执行,可以清楚地看到TPT调用编译软件UDE进行测试,最后形成测试报告。这种基于TPT软件的PIL自动化测试的优点概括起来就是:测试用例图形化设计,自动化执行,自动输出测试报告。另外,TPT软件还擅长实现基于模型设计的MIL测试和SIL测试,同时还可以实现MIL测试和SIL测试的背靠背测试对比,可以进行MIL测试和PIL测试的背靠背测试对比,整个测试过可以有效保证控制器的开发质量。

猜你喜欢

测试用例断点嵌入式
基于IMX6ULL的嵌入式根文件系统构建
一种高精度光纤断点检测仪
断点
基于关键点的混合式漏洞挖掘测试用例同步方法
用Eclipse调试Python
一类无限可能问题的解法
面向多目标测试用例优先排序的蚁群算法信息素更新策略
高校图书馆开展嵌入式信息素质教育的思考
嵌入式组件技术的研究及应用
测试用例集的优化技术分析与改进