软件部件仿真测试平台的设计与实现(计算机工程与设计2017-11)

本文提出了一种基于计数循环调度的嵌入式软件部件仿真测试平台设计方案,旨在解决定时调度中部件运行超时导致的软件时序问题。平台通过程序循环计数替代定时器,简化调度过程,确保测试结果的正确性。测试框架包括初始化、周期性调度、自动化执行控制和结果记录输出等部分,支持多种测试模式,可用于软件部件的回归测试。实验对比显示,新平台能正确模拟软件部件的时序,提高了测试效率和准确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. 引 言

嵌入式软件部件测试可在目标机平台执行;如果不具备目标机环境,可基于宿主机平台[1-3]以全数字仿真[4]的形式模拟部件运行环境。基于宿主机开发部件仿真测试平台时,通常采用基于时钟驱动的循环调度[5]来模拟软件产品对周期性运行的部件所采用的定时调度,以便高保真地模拟软件产品在目标机上的行为。如果仿真测试平台运行于非实时、多任务操作系统上,定时执行的部件受外部进程影响,可能无法在规定时限执行结束,引起软件运行时序错乱,影响仿真结果的正确性。因此本文将部件定时循环调度进一步简化为计数循环调度,以程序循环计数取代基于定时器的时间度量:无论某次循环是否调度部件执行、执行几个部件,每次循环计数在逻辑上都等价于所有部件运行周期的最大公约数。一方面消除了定时调度中部件运行超时对软件时序的负面影响,同时避免了部件等待调度运行的周期间隙过长对仿真时间的浪费。关于循环调度的研究,主要集中在对多核处理器进行循环结构执行效率的优化方面[6-9]。分时系统中有时也将时间片轮转调度(Round-Robin)称为循环调度[10],适用于相互间无功能耦合的多进程调度;而软件产品的各部件之间存在紧密的功能耦合,在单个部件执行结束前不宜受制于时间片结束而强制切换部件的执行,否则可能导致部件仿真测试结果错误。

 

  1. 测试平台接口说明

测试平台接口包括软件部件和用例文件选择输入的人机接口;软件部件接口包括从用例文件中提取部件输入和将部件输出存储到测试结果文件。

  1. 软件部件和用例的选择

为适应不同的软件部件测试场景,设置4种部件测试模式:单部件单用例文件手动循环执行、单部件多用例文件自动循环执行、多部件单用例文件自动循环执行和多部件多用例文件自动循环执行。其中单部件单用例文件手动循环执行模式最简单易行,主要适用于首轮部件测试,便于逐个判断每个测试用例文件在各软件部件上运行的结果是否正确;其他部件测试模式主要适用于软件部件回归测试,以加快回归测试进度。

为方便测试执行,将待测试软件部件从1连续编号。在启动软件部件测试执行时,根据部件测试执行模式不同,以界面友好的方式提示软件部件编号并接受部件号输入;为防止软件部件号输入越界或非法,设置默认软件部件编号为1。

测试用例输入文件按软件版本和部件分级存放。如软件版本V1.00包含两个软件部件PartA和PartB,可将部件PartA所有测试用例输入文件集中存放在V1_00\PartA路径下,部件PartB的用例文件存放在V1_00\PartB路径下。为提高测试执行效率,可在测试平台内部设定部件测试用例文件路径,执行测试时只要输入或选择文件名即可准确定位。

由用例编号和用例文件名(NAMELEN代表约定的测试用例文件命名的最大字符串长度)组成的测试用例文件结构体类型定义如下:

typedef struct{

int tcFileNo;//用例文件自动编号

char tcName[NAMELEN];//用例文件名

}TESTSUITE;//用例文件结构体

由软件部件编号、用例文件数目、用例文件集合、用例文件路径(MAXTCNUM 代表从属于部件的用例文件数最大值,PATHLEN代表用例文件绝对路径包含字符数最大值)组成的软件部件结构体类型定义如下:

typedef struct{

int partNo;//软件部件编号

int tcTotalNum;//用例文件数目

TESTSUITE tcSet[MAXTCNUM];//用例集

char tcPath[PATHLEN];//用例文件存储路径

}TEST4PART;//软件部件结构体

所有软件部件(PARTNUMS代表被测软件部件的数目)及用例文件集合组成的数组定义如下:

TEST4PART swPartTests[PARTNUMS];

//软件部件与用例文件集合数组

  1. 输入/输出数据结构定义

软件部件外部接口分为输入、输出两种接口,输入接口为测试用例文件,输出接口为测试结果文件,均为.csv格式的文本文件。

为了简化测试用例注入方式,统一定义测试用例文件格式。约定首列为控制用例注入的时序节拍seq,可以连续(seq=0、1、2……)或跳跃(seq=0、1、5……)的方式递增,以便灵活地模拟测试输入保持时间;其余各列为数据类型和范围与各部件输入接口严格匹配的数值集合。

设A、B两个软件部件待测,以结构体形式(其中TYPEA和TYPEB代表适用的标准数据类型或自定义数据类型)定义各部件输入集合如下:

typedef struct{

TYPEA varAin;//来自部件A测试用例文件

}PARTAIN;//部件A测试输出结构体定义(输入)

typedef struct{

TYPEB varBin;//来自部件B测试用例文件   

}PARTBIN;//部件B测试输出结构体定义(输入)

在测试结果记录和存储时,以结构体形式定义各部件输出变量的集合如下:

typedef struct{

TYPEA varAout;//部件A测试执行运算结果

}PARTAOUT;//部件A测试输出结构体定义(输出)

typedef struct{

TYPEB varBout;//部件B测试执行运算结果

}PARTBOUT;//部件B测试输出结构体定义(输出)

为了判断每个测试用例执行结果通过与否,需要建立各部件测试用例输入与测试结果输出的一一对应关系。定义结构体如下:

typedef struct{

int recNo;//部件被调度次数

int lasting;//部件单次调度执行时间

PARTAIN in;//来自测试用例的输入

PARTAOUT out

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值