APP下载

基于模型设计的嵌入式软件测试技术研究

2018-05-30中国汽车技术研究中心张亚楠谢冬红

电子世界 2018年9期
关键词:嵌入式软件单元测试电控

中国汽车技术研究中心 张亚楠 谢冬红

引言

在汽车电控系统嵌入式软件开发方式上,随着MBD(基于模型的开发)模式的普及,传统手工写代码开发模式已逐渐被取代,在ISO 26262中更是以MBD模式为嵌入式软件功能安全开发为例子介绍了新型开发模式下的测试V流程。

基于上述背景,本文首先介绍嵌入式软件测试的基本概念及方法;之后比较传统嵌入式软件开发与MBD开发模式的区别;进而着重分析MBD开发模式下的嵌入式软件测试即模型在环,并以相关电控系统模型为例,研究模型在环测试技术;最后对全文进行总结。

1.嵌入式软件测试

嵌入式软件测试分为静态测试以及动态测试。静态测试指静态缺陷检测,不需要运行被测程序是指不需运行被测程序,主要检测代码的逻辑、语法错误、是否符合编码规则,常见的静态检测工具有PC-Lint、cppcheck、splint等等。动态检测技术属于黑盒测试,指在程序运行过程中进行数据注入,测试结果与预期是否相符合,从而达到寻找程序漏洞的目的。

单元测试对应嵌入式软件测试V流程前半部分的详细设计,又称为模块测试,测试对象是最小可测单元,检查每个单元是否按照详细设计实现了预期的功能,为白盒测试范畴。

单元测试完成之后,进行的是集成测试。集成测试的主要目的为发现与接口有关的模块之间的问题。集成测试包括两种方法:非增式集成测试法和增式集成测试法,不断地把待测模块连接到已测模块集(或其子集)上,对待测模块进行测试,直到最后一个模块测试完毕,增量式集成测试能够对程序进行循序渐进测试,容错率小,能做到充分、完全的测试。

2.模型在环和传统嵌入式软件对比

嵌入式系统是以应用为中心,以计算机技术为基础,软、硬件可裁剪,具有功能稳定、可靠性好、成本低、集成度高、功耗低、子系统能直接通信融合等特点,决定了它适用于汽车工业领域,近年来电子技术的发展日新月异,使得嵌入式系统在车载电子中的应用更为广泛。

汽车电控系统的复杂性和集成度不断增高,意味着其可靠性要求也越来越高,早期汽车电控系统采用传统开发模式,即手工写代码的方式,但随着软件的复杂性越来越高,功能越来越多,代码量也随之越来越多,并且进入快时代,开发周期需求没有随之延长,因此近几年开始兴起基于模型的设计(Model-Based Design,简称MBD)开发模式,并逐渐取代传统开发模式。

2.1 基于模型的设计

随着汽车电控系统越来越复杂,传统开发方式已经变得不再适用了,采用基于模型设计的方法,能够大大加快产品开发周期,并同时提高软件产品的质量。基于模型开发模式的一个特征在于功能模型不仅详述了所想要的功能,而且还提供了设计信息,并最终作为代码生成方法的实施基础。

相比较于前文提到的传统开发模式几方面的缺陷而言,基于模型的设计在四个过程中紧密联系,互相验证,有较高的耦合性,避免了某一流程的孤立性。基于模型的设计工作流程图如图一,可以看出,在整个流程中持续不断地进行设计和验证,从需求到设计到实现,测试贯穿每一流程。这就保证了软件缺陷能够越早地被发现,测试成本、维护成本大大降低,软件的质量得到有效保证。

图一 MBD模式的工作流程

3.MBD模式测试流程

模型生成之后,需对模型进行检查与验证。针对以上情况将MBD模式下的嵌入式软件测试流程大致分为以下几点:模型规范性验证、模型结构分析、单元测试、集成测试、MIL测试(模型在环测试)、静态代码测试、SIL测试(软件在环测试)、PIL测试(处理器在环测试)等。

3.1 模型规范性验证

该步骤主要对设计的模型进行规范性检查,验证模型是否符合需求规定的若干标准规则,在matlab中通过Model Advisor进行,用户在Model Advisor中能够自定义标准规则集进行校验,这一过程一般都在早期进行,能够有效识别出模型中隐含的问题,找出模型设置是否会导致生成后期代码的无效或不符合某安全标准。

3.2 模型结构分析

在模型通过规范性检验之后,可以利用matlab中提供的Simulink Design Veri fier模块自动生成测试用例,去检查结构是否存在问题,是否存在不合理的逻辑设计,例如除零等异常问题,能够利用该模块去测试这些异常,覆盖一些运行不到的分支路径。

3.3 单元测试、集成测试

接下来就可以利用matlab提供的System Test模块进行单元级别的功能测试,为模型的测试用例设计提供一个框架,创建测试程序,并能直接运行被测模型,分析测试结果。在单元测试通过后,需进行集成测试,这时候更多的是关注模块间的接口关系、参数传递等,与单元测试相辅相成,保证测试的完整、全面。

3.4 MIL测试

某些电控系统在测试过程中,需要对其建立被控对象模型,形成闭环进行测试,是在模型层面上实现的闭环测试,这种测试通常发生在两种场景之下,一是系统工程师为了验证算法,使用控制算法模型控制被控对象模型;另外一种是软件工程师做模型级别的集成测试。

3.5 静态代码分析

在模型阶段充分验证完成之后就可以对模型进行自动代码生成,自动生成的代码也不一定就是准确无误的,因此在软件代码层面上首先需要对代码质量做到保证,就需要做静态代码测试,matlab提供的工具为Polyspace能够进行静态分析,其中包含若干条默认代码规则供用户进行选择组合。

3.6 SIL测试

同时还需要对代码进行模型-代码的一致性检查,SIL的目的其实就是为了验证自动生成的代码和模型在功能需求上是一致的。

3.7 PIL测试

这一阶段的测试过程主要内容是进行等效性验证,并得到测试模型生成的代码在目标处理器上的运行时间。

4.总结与分析

本文首先介绍了简单介绍了嵌入式软件测试发展的背景,并引出汽车电控系统嵌入式软件测试;之后对传统的嵌入式软件开发模式与基于模型设计的开发模式进行了对比;并对基于模型的设计下的嵌入式软件测试流程进行了详细的介绍和实验说明,并着重分析了新型开发模式下基于模型的设计,其测试流程、测试工具及测试要点等;最后对全文进行了总结,在新型开发模式的来临之时,同时也要对测试技术加以提升,保证软件产品的质量及功能安全性。

[1]解志君.嵌入式软件测试技术分析研究[J].自动化与仪器仪表,2016(12):3-4.

[2]吕金和.嵌入式软件测试[J].软件导刊,2010,(9):40-41.

猜你喜欢

嵌入式软件单元测试电控
实时嵌入式软件的测试技术
全景相机遥控器嵌入式软件V1.0 相关操作分析
ECAS空气悬架电控系统介绍
基于Eclipse的航天嵌入式软件集成开发环境设计与实现
航天嵌入式软件浮点运算误差分析与控制
电控发动机点火控制系统的原理与诊断
一年级上册第五单元测试
一年级上册一、二单元测试
电控气动步进系统的PLC实现
空分设备电控回路的改良