嵌入式控制系统的软件测试及其应用

时间:2022-08-31 03:17:17

嵌入式控制系统的软件测试及其应用

摘 要本文概要论述了嵌入式系统的软件测试的测试步骤、测试目的、测试模式的设计、测试方法,并举例说明了其在汽车电池充电控制系统上的应用。

【关键词】嵌入式系统 软件测试 程序模块

1 引言

随着技术的发展,越来越多的功能加入到嵌入式软件中。嵌入式软件在各种不同条件下可能出现未知、不可预测的状况,其潜在的风险往往较高,高可靠性和安全性自然成为嵌入式系统的重要指标。

嵌入式系统安全性的失效可能会导致灾难性的后果,即使是非安全性系统,由于大批量生产也会导致严重的经济损失。这就要求对嵌入式系统,包括嵌入式软件进行严格的测试、确认和验证。

一般来说,嵌入式软件测试在4个阶段上进行,即模块测试、集成测试、系统测试、硬件/软件集成测试。前3个阶段适用于任何软件的测试,硬件/软件集成测试阶段是嵌入式软件所特有的,目的是验证嵌入式软件与其所控制的硬件设备能否正确地交互。

2 模块测试

2.1 模块测试的定义和特点

(1)模块测试又称单元测试,是针对程序模块(软件设计最小单位)来进行正确性检验的测试工作。

(2)模块测试的目的是检测程序模块对《详细设计说明书》的符合程度。

(3)模块测试由测试工程师编制测试用例进行测试,并将结果记录在《软件测试报告》上。

2.2 模块测试的设计

测试模型:分为驱动模块和桩模块。

驱动模块相当于所测试模块的主程序,桩模块是用来代替所测试模块调用的子模块。

2.3 输入和输出的规则

2.3.1 输入

一般来说有以下四种情况:

(1)被测函数的参数;

(2)通过赋值运算符“=”向局部变量赋值或作为被调用函数的参数的全局变量(包括静态变量);

(3)有返回值的被调函数;

(4)全局变量作为被调用函数的参数。

2.3.2 输出

一般有三种情况:

(1)被测函数的返回值;

(2)被改变过的全局变量(包括静态变量);

(3)所有的被调函数。

2.4 三值确认

做大小比较的检证时,通过选取基准点,和基准点-1,基准点+1共三点来保证大小比较的正确。例如:

if(a>10)大小比较需三值确认,10为境界值,所以取11,10,9三值。

{a=11时,结果b=OFF; a=10时,结果b=ON; a=9时,结果b=ON

b=OFF;为何取三值?

}a ? 10

Else三值确认后能判定是什么符号。

b=ON;

2.5 if语句的组合规则

在if语句中,每个判定条件的成立和不成立的情况,都要测试到:

例如:If(A)

则有:A=T时,结果=T; A=F时,结果=F

若有两个或多个判定条件组合起来的判定语句,例如:

(1)A && B

A=T B=T时,结果=T;

A=T B=F时,结果=F;

A=F B=T时,结果=F;

A=F B=F时,结果=F

(2)CD

C=T D=F时,结果=T;

C=F D=T时,结果=T;

C=F D=F时,结果=F;

C=T D=T时,结果=T

(3)A && BC

A=T B=T时,A&&B结果=T,C=F时,最终结果=T;

A=T B=F时,A&&B结果=F,C=F时,最终结果=F;

A=F B=T时,A&&B结果=F,C=F时,最终结果=F;

A=T B=F时,A&&B结果=F,C=T时,最终结果=T。

2.6 模块测试方法

2.6.1 代入

(1)确认对象:

①被测试函数的参数,参数做代入。

②全局变量通过赋值运算符“=”向局部变量赋值,形如“local_var=global_var;”,全局变量做代入。

③被测试函数的代码中有调用其他函数,且被调用函数返回类型不为空(另一说法是没有返回值),被调用函数做代入。

④全局变量做为被调用函数的参数使用,全局变量做代入。

(2)确认方法:确认对象动态取值范围的最大值和最小值。

2.6.2 大小比较

(1)确认对象:逻辑表达式中的变量和常量。

(2)确认方法:三值确认(表达式中任意一侧即可,变量侧优先)。

2.6.3 加减运算

(1)确认对象:加减算式(包括库函数)中的变量和常量。

(2)确认方法:确认对象动态取值范围的最大值,最小值,一般值(不为0,取值唯一;运算结果不为0且尽量为负)。

加减演算指所有只含有加减运算符和赋值运算符“=”的语句及调用具有加减演算功能的库函数的语句,加减运算符共有六种,加运算符“+”,减运算符“-”,自加运算符“++”,自减运算符“--”,以及赋值运算符“+=”,“-=”。

2.6.4 乘除运算

(1)确认对象:乘除算式(包括库函数)中的变量和常量。

乘除演算指所有只含有乘除运算符和赋值运算符“=”的语句及只含有移位运算符和赋值运算符“=”的语句及调用具有乘除、移位演算功能的库函数语句,乘除演算中的运算符共有十种,乘运算符“*”,除运算符“/”,求余运算符“%”,左移运算符“>>”,右移运算符“

(2)确认方法:确认对象动态取值范围的最大值,最小值,一般值(不为0,取值唯一;运算结果不为0且尽量为负),除零.当运算结果不能直接输出时,可以通过其他逻辑表达式(二值确认)或运算加以确认。当库函数中带有右移位操作时,必须进行精度确认。(尽量利用一般值)。

3 集成测试

3.1 集成测试的目的

集成测试是在单元测试的基础上,将所有模块按照概要设计要求组装成为子系统或系统。集成测试的目的是检测程序是否符合《概要设计说明书》的要求。通常采用黑盒测试技术。

3.2 实施

集成测试采用的方法是测试软件单元的组合能否正常工作,以及与其他组的模块能否集成起来工作。最后,还要测试构成系统的所有模块组合能否正常工作。

在制定测试计划时,应考虑如下因素:

(1)是采用何种系统组装方法来进行组装测试;

(2)组装测试过程中连接各个模块的顺序;

(3)模块代码编制和测试进度是否与组装测试的顺序一致。

3.3 完成标准

判定集成测试过程完成了,可按以下几个方面检查:

(1)成功地执行了测试计划中规定的所有集成测试;

(2)修正了所发现的错误;

(3)测试结果通过了专门小组的评审。

4 系统测试

系统测试是把经过测试的子系统装配成一个完整的系统来测试。在这个过程中应该验证系统确实能提供需求说明书中指定的功能,而且系统的动态特性也符合预定要求。

系统测试的主要方法:

4.1 多任务测试

多任务测试是指测试对象处于工作状态时,有新的事件发生,测试系统模块之间相互影响的一种重要测试,这种测试一般可以检测到内存混乱,数据丢失等严重情况。

4.2 临界测试

在事件、任务刚刚发生、结束以及储存系统处于临界等边界状态下所进行测试。

4.3 中断测试

中断指软件在工作中被其他的任务或意外事件等情况终止,推出相应的测试即为中断测试。

中断测试有人为中断、新任务中断以及意外中断等几种情况。

下面以汽车电池充电控制系统为例,解释系统测试(见表1)。

根据车辆启动或行驶等不同状态,对外气温等不同的变量,电池电压等硬线信号和车速等传感器信号,计算出所需充电的电压,输出到变量和通信信号,控制发电机的转速。和实际程序运行结果进行比较来验证系统功能。

5 硬件/软件集成测试

硬件/软件集成测试应该在嵌入式软件系统测试完成的基础上进行。此时软件已经按照功能模块组装成子系统,为了有效验证硬件与软件的协调性,保证软件在特定的硬件平台上能够按照设计的要求进行工作,完成其要求的功能、性能指标,就必须进行硬件/软件集成测试。

硬件/软件集成测试通常在硬件配置完成后,在实际的硬件平台上上电,运行软件进行测试。

表2是以汽车电池充电控制系统为例,解释系统硬件/软件集成测试。在实际的实验车辆上连接测试设备,测试物理、网络信号和控制器内存值,检查是否和车辆实际状态相互符合。

相关硬件为发电机、网络、外接电器负载、起动机等。测试项目包括发电电压、仪表灯、点火最低电压、充电模式等。

6 结语

嵌入式控制系统的软件测试有其自身的特点,本文论述的嵌入式软件测试各个阶段的设计要点、设计思路和方法,可以有助于有效地、科学地组织、进行软件测试,不光能提高嵌入式控制系统的高可靠性和安全性,还能节省测试时间和金钱。

参考文献

[1]谭浩强著.C程序设计(第二版)[M].北京:清华大学出版社,2002.

[2]Michael J.Pont著.C语言嵌入式系统开发[M].北京:中国电力出版社,2003.

[3]William E.Perry著.软件测试的有效方法(第三版)[M].北京:清华大学出版社,2008.

作者单位

上海索广映像有限公司 上海市 201201

上一篇:黑龙江省医药企业营销策略研究 下一篇:武山拉梢寺北周造像的历史语言探析