软件部件仿真测试平台的设计与实现(计算机工程与设计2017-11)
- 引 言
嵌入式软件部件测试可在目标机平台执行;如果不具备目标机环境,可基于宿主机平台[1-3]以全数字仿真[4]的形式模拟部件运行环境。基于宿主机开发部件仿真测试平台时,通常采用基于时钟驱动的循环调度[5]来模拟软件产品对周期性运行的部件所采用的定时调度,以便高保真地模拟软件产品在目标机上的行为。如果仿真测试平台运行于非实时、多任务操作系统上,定时执行的部件受外部进程影响,可能无法在规定时限执行结束,引起软件运行时序错乱,影响仿真结果的正确性。因此本文将部件定时循环调度进一步简化为计数循环调度,以程序循环计数取代基于定时器的时间度量:无论某次循环是否调度部件执行、执行几个部件,每次循环计数在逻辑上都等价于所有部件运行周期的最大公约数。一方面消除了定时调度中部件运行超时对软件时序的负面影响,同时避免了部件等待调度运行的周期间隙过长对仿真时间的浪费。关于循环调度的研究,主要集中在对多核处理器进行循环结构执行效率的优化方面[6-9]。分时系统中有时也将时间片轮转调度(Round-Robin)称为循环调度[10],适用于相互间无功能耦合的多进程调度;而软件产品的各部件之间存在紧密的功能耦合,在单个部件执行结束前不宜受制于时间片结束而强制切换部件的执行,否则可能导致部件仿真测试结果错误。
- 测试平台接口说明
测试平台接口包括软件部件和用例文件选择输入的人机接口;软件部件接口包括从用例文件中提取部件输入和将部件输出存储到测试结果文件。
- 软件部件和用例的选择
为适应不同的软件部件测试场景,设置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];
//软件部件与用例文件集合数组
- 输入/输出数据结构定义
软件部件外部接口分为输入、输出两种接口,输入接口为测试用例文件,输出接口为测试结果文件,均为.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;//与输入相关的输出
}PARTAOUTPUT;//部件A测试输出内容
typedef struct{
int recNo;//部件被调度次数
int lasting;//部件单次调度执行时间
PARTBIN in;//来自测试用例的输入
PARTBOUT out;//与输入相关的输出
}PARTBOUTPUT;//部件B测试输出内容
为了实时记录每个测试用例的执行结果,需要将测试用例输入与测试结果输出建立一一对应的关系。定义结构体如下:
typedef union {
PARTAOUTPUT PartA;//部件A测试输出
PARTBOUTPUT PartB;//部件B测试输出
}TESTOUTPUT;
与测试用例输入关联的待测软件部件测试输出缓冲区定义如下:
TESTOUTPUT testData[TSTBUFLEN];
//部件测试输出缓冲区
- 软件部件测试框架设计
软件部件测试主体框架包括初始化和周期性调度两部分,流程如下:
图1 软件部件测试平台主体框架流程图
- 部件测试初始化
部件测试初始化包括软件部件初始化和部件测试平台初始化。软件部件初始化即调用软件部件初始化模块。部件测试平台初始化即根据选择的测试模式不同,对软件部件和测试用例文件进行定制化设置:
- 对于单部件单用例文件手动循环执行模式,设置软件部件编号和用例文件名;
- 对于单部件多用例文件自动循环执行模式,设置软件部件编号和多个用例文件名;
- 对于多部件单用例文件自动循环执行模式,设置用例文件名,并以循环枚举方式确认各部件是否执行测试;
- 对于多部件多用例文件自动循环执行模式,以循环枚举方式分别确认各部件是否执行测试,如选是,则输入多个用例文件名;如选否,则跳过该部件,接着设置剩余软件部件执行与否及从属的用例文件集。
部件测试平台初始化流程如下:
图2 部件测试平台初始化流程图
上图部件测试平台初始化流程中的最后一步,即测试用例文件解析模块的主要功能是提取用例文件内容,以首列所有时序节拍数据初始化控制时序数组,用于控制各行测试数据的注入时机,作为软件部件周期性调度、输入接口数据维持或更新的依据;并以用例文件中第一行数据对当前被测软件部件输入接口变量进行初始化,其流程如下:
图3 测试用例文件解析模块流程图
- 部件周期性调度控制
部件测试周期性调度包括软件部件调度运行、部件测试自动化执行控制和测试结果即时记录三部分,主要功能是控制用例注入节拍、以不同模式控制部件测试不间断自动执行和单个测试用例文件执行结束后的结果输出等。
调度循环计数r |
部件A调度计数cntA |
部件输入接口变量varAin |
0 |
0 |
0 |
1 |
0 |
0 |
2 |
1 |
11 |
3 |
1 |
11 |
4 |
2 |
11 |
5 |
2 |
11 |
6 |
3 |
33 |
7 |
3 |
33 |
部件测试自动化执行控制包括利用来自测试用例文件的时序节拍数据(已转存入时序控制数组),检查当前调度节拍是否到达下一个时序控制点,测试输入数据是维持前一个调度循环状态,还是重新注入用例文件中下一组数据。
无论采用哪种部件测试自动化执行策略,都要保证与指定软件部件绑定的用例文件逐个顺序执行,不允许多个用例文件交叉运行或多个部件同时测试。
对于单部件单用例文件手动循环执行模式,在指定部件上单个用例文件中所有输入数据全部执行结束,则该测试模式自然结束。其他模式下软件部件测试自动化执行控制方法如下:
针对指定部件,当前用例文件中所有测试输入处理结束,保持当前软件部件编号不变,再次执行测试用例文件解析模块,读取下一个用例文件进行解析,调度执行该部件,实时记录测试结果。直到所有测试用例文件执行结束。
由于所有部件测试用例格式是统一的,因此单个用例文件可包含多个部件的输入信息。但不同部件输入接口不同,使用同一个用例文件执行软件部件测试,要针对不同部件分别解析。
针对当前软件部件,当用例文件中所有输入处理完毕,再次运行测试用例文件解析模块,对该用例文件按照下一个部件的输入接口重新解析,然后调度运行新部件,实时记录测试结果,直到所有软件部件测试执行结束。
如果存在几个用例文件同属于多个部件的情况,需要在初始化时,为这些部件重复设置相同的用例文件名。
按照部件优先原则,参考单部件多用例文件自动循环执行模式,先执行第一个部件的所有用例文件,再执行第二个部件,直到完成所有部件测试。
本文设计的部件测试平台方案不考察部件调度周期,软件部件的调度由程序主循环运行节拍来控制。
序号 |
用例注入时刻 |
信号采集值 |
1 |
0s |
200 |
2 |
0.02s |
200 |
3 |
0.04s |
210 |
4 |
0.06s |
220 |
5 |
0.08s |
230 |
6 |
0.10s |
240 |
7 |
0.12s |
250 |
8 |
0.14s |
260 |
9 |
0.16s |
270 |
10 |
0.18s |
280 |
11 |
0.20s |
290 |
12 |
0.22s |
300 |
后续研究中,将进一步增强部件仿真测试平台对部件接口的可扩展性,消除部件升级时对平台软件的直接修改,保持测试平台的稳定性;同时,逐步增加测试结果的自动判读功能,提高部件测试自动化程度。
软件部件仿真测试平台的设计与实现(计算机工程与设计2017-11)相关推荐
- 航天总线测试系统软件,总线仿真测试平台软件
产品介绍: FZ-BEST是一款综合了ARINC664.FC-AE.ARINC818.ARINC429.1553B等总线仿真测试平台,主要面向航空/航天.车辆以及船舶等应用领域,提供协议分析.总线仿真 ...
- 凯云科技——装备软件全数字仿真测试平台DSTP
1)产品简介 装备软件全数字仿真测试平台(DSTP)是基于嵌入式处理器的全数字仿真测试系统,主要功能是仿真真实的嵌入式处理器内核(包括处理器的内存.寄存器.运算器等),同时提供可视化的外部场景模型和环 ...
- 汽车智能安装仿真测试软件,智能网联汽车仿真测试平台建设.pdf
国家轿车质量监督检验中心 智能网联汽车仿真测试平台建设 目录 1 智能网联汽车仿真测试平台建设的需求 基于仿真工具的智能网联汽车研发测试 2 及认证测试 3 现阶段智能网联汽车仿真测试面临的关键问题 ...
- 航天总线测试系统软件,BEST 总线仿真测试平台
产品介绍: BEST是一款综合了ARINC664.FC-AE.ARINC818.ARINC429.1553B等总线仿真测试平台,能够快速搭建多网.多总线的仿真测试环境,并可根据用户的需求进行定制拓展, ...
- 基于QT的多场景机动车防碰撞算法仿真测试平台
基于QT的多场景机动车防碰撞算法仿真测试平台 大创项目日志,仅供参考 1.道路模块的搭建与拼接 主界面如图所示 头文件 源文件 UI界面文件 mainwindow.h/.cpp/.ui 主界面 map ...
- 地铁车辆主传动系统实时仿真测试平台ETest研究
设备组成 Etest_CPS系统主要由硬件部分与软件部分组成.硬件部分由PCI机箱.PCI控制器以及各种PCI接口板卡组成.软件部分由测试设计软件模块.测试执行服务软件模块.测试执行客户端软件模块.设 ...
- V2X仿真测试平台技术研究
[摘 要]随着汽车保有量快速增长,交通问题愈发严重,V2X在智能交通领域作用越来越重要.V2X OBU将成为智能网联汽车中的重要零部件,着重介绍了对OBU的仿真测试,包括V2X仿真平台设计和V2X硬 ...
- 示波器万用表源表电源信号发生器频谱仪程控软件,ATECLOUD智能测试平台
仪器自动化测试已经广泛应用于各行各业的生产测试当中,相比于以前的手动测试,现代化的智能测试成为行业的宠儿.越来越多的传统测试企业希望通过仪器自动化测试实现计算机与仪器的集成,提高仪器测试效率,减少人员 ...
- 计算机工程与设计 北大核心,计算机工程与设计 统计源期刊北大核心期刊
本站主要从事期刊订阅及增值电信业务中的信息服务业务(互联网信息服务),并非<计算机工程与设计>杂志官方网站.办理业务请联系杂志社. 计算机工程与设计杂志简介 <计算机工程与设计> ...
最新文章
- 在SQLserver数据库里设置作业的步骤
- xpdf将pdf转换为html,(WordExcelPDF文件转换成HTML整理.docx
- Oracle入门(三A)之sqlplus
- Java系列笔记(4) - JVM监控与调优【转】
- 计数排序vs基数排序vs桶排序
- 低秩矩阵分解 matlab,低秩分解的matlab代码看不懂,分解的两个矩阵在哪呀??...
- 训练日志 2019.7.27
- [Servlet] 初识Servlet
- Codeigniter开发技巧:连接多个数据库(可实现DB读写分离)
- win10下如何安装.NetFrame3.5框架
- Mat 转 IplImage
- 不越狱破解A1528 iPhone5s移动联通4G网络
- java 端口流量统计_java—流量统计源码 | 学步园
- put url带参数_Superlurl 一款开源关键词URL采集工具
- 艾拉物联:标准协议不同,碎片化将是IoT长期挑战
- Java Web实战详细教程(十一)贯穿项目搭建+CSS修饰前端页面
- 汇编:shl, shr 逻辑移动指令
- vmlinux 反汇编_看vmlinux的符号信息
- android:拍照或从相册选取图片
- 判断一棵树是不是另一棵树的子树