首页> 中国专利> 嵌入式软件的单参数事件序列测试数据生成方法

嵌入式软件的单参数事件序列测试数据生成方法

摘要

嵌入式软件的单参数事件序列测试数据生成方法,涉及一种嵌入式软件的测试数据生成方法。本发明为了解决现有的嵌入式软件测试系统测试数据的生成方法没有考虑数据的时序问题和测试数据非常庞大问题。本发明首先生成初始的包含所有的t维事件交互集合Q,初始化测试数据覆盖向量V为空;在Q中随机挑选1条候选t维事件交互,加入测试数据覆盖向量V中,同时在Q中删除该t维事件交互;然后在Q中取一条适应值最大的t维事件交互追加到向量V的尾部,并在Q中删除所有被向量U覆盖的t维事件交互;直至Q为空,输出测试数据覆盖向量V,测试数据覆盖向量V中的数据及顺序就是生成的单参数事件序列测试数据。本发明适用于嵌入式软件的测试数据生成。

著录项

  • 公开/公告号CN106095692A

    专利类型发明专利

  • 公开/公告日2016-11-09

    原文格式PDF

  • 申请/专利权人 哈尔滨工业大学;

    申请/专利号CN201610663751.0

  • 发明设计人 魏长安;孙超;盛云龙;姜守达;

    申请日2016-08-12

  • 分类号G06F11/36;

  • 代理机构哈尔滨市松花江专利商标事务所;

  • 代理人杨立超

  • 地址 150001 黑龙江省哈尔滨市南岗区西大直街92号

  • 入库时间 2023-06-19 00:49:26

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2018-07-03

    授权

    授权

  • 2016-12-07

    实质审查的生效 IPC(主分类):G06F11/36 申请日:20160812

    实质审查的生效

  • 2016-11-09

    公开

    公开

说明书

技术领域

本发明涉及一种嵌入式软件的测试数据生成方法。

背景技术

随着计算机软硬件技术的不断发展,嵌入式软件也获得了越来越广泛的应用。作为一种特殊的软件形式,嵌入式软件广泛应用于军用武器系统和航空航天装备中,其可信性、可靠性和安全性对武器装备的影响至关重要。近年来在试验和训练中频繁发生由于软件缺陷导致的事故,甚至是重大事故。由此可见,提高嵌入式软件的质量对军工武器产品等有着重大意义。

对嵌入式软件进行测试是检测产品故障、提高产品质量的重要手段。软件的测试过程一般分为事件序列测试集生成、事件序列测试集执行和测试结果分析三个阶段,其中测试结果分析包括结果比对以及故障定位。在软件测试过程中,如何快速有效的设计一个能够检测更多错误类型和错误数量的事件序列测试集,是软件在测试过程中的重点所在,它决定了整个软件测试过程的有效性。

相比于传统的软件产品,嵌入式软件产品存在以下一些特点:

(1)实时性,即嵌入式软件的处理速度一般较快,能够对当前的输入数据进行快速响应;

(2)嵌入性,嵌入式软件往往是嵌入到固定的硬件系统中,其软件性能与硬件系统的关联极其紧密;

(3)系统专用性强。嵌入式软件均以应用为中心,其功能较为单一,一般不会同时载入执行多个不同的程序,某单一被测设备仅完成独立功能。

(4)可靠性要求高。与一般软件相比,嵌入式软件更多应用于某些关键领域,如航空航天或国防武器装备等等,因此对软件质量要求较高。

(5)动态参数种类多,变化范围大。嵌入式软件所涉及的参数类型多种多样,如:震动,温度,电压等物理信号,又包含了数字,模拟等多种不同类型的数据形式。同时,输入输出均为硬件接口实现,并且接口类型多样。

正是嵌入式软件产品固有的这些特点,在很大程度上增加了测试嵌入式软件的复杂性和困难程度。

在嵌入式软件的测试过程中,除了参数间取值会对软件造成影响外,被测软件参数的输入顺序同样会对嵌入式软件造成影响。因此,对嵌入式软件还需要增加时序的测试,现有的软件测试过程并没有对测试数据进行考虑,而且针对现有的软件进行测试时的测试数据非常庞大,增加了软件测试的难度、测试的时间以及增大了系统的测试的负担。

发明内容

本发明为了解决现有的嵌入式软件测试系统测试数据的生成方法没有考虑数据的时序问题和测试数据非常庞大问题。

嵌入式软件的单参数事件序列测试数据生成方法,包括以下步骤:

步骤1:在单参数事件序列中,针对任意t个事件,设事件序号分别为1,2,……,t;则由t个事件组成的任意一个有序序列s1→s2→...→st,叫做一个t维事件交互,记作(s1,s2,...st);

生成初始的t维事件交互集合Q,此时令Q中包含所有的t维事件交互,有Q=Ht,Ht为全部t维事件交互集;初始化测试数据覆盖向量V为空,测试数据覆盖向量V的长度m=0;

步骤2:在t维事件交互集合Q中随机挑选1条候选t维事件交互,加入测试数据覆盖向量V中,同时在t维事件交互集合Q中删除该t维事件交互;

步骤3:计算t维事件交互集合Q中每个t维事件交互的适应值,取一条适应值最大的t维事件交互,将适应值最大的t维事件交互追加到向量V的尾部,向量V长度增加t维;

适应值计算方法为:

设当前已有的测试数据覆盖向量为V,未被测试数据覆盖向量V覆盖的全部t维事件交互所组成的集合对应为当前的t维事件交互集合Q;对Q中某一t维事件交互x,取测试数据覆盖向量V中最后t-1个事件与x组成一个向量U;令向量U中包含的所有t维事件交互组成的集合为HU,t,则适应值计算函数定义为:

f(x)=|{HU,t∩Q}|>

适应值为HU,t和向量Q中交集t维事件交互的个数;

步骤4:在t维事件交互集合Q中删除所有被向量U覆盖的t维事件交互;

步骤5:若t维事件交互集合Q不为空,则执行步骤3,否则执行步骤6;

步骤6:输出测试数据覆盖向量V,测试数据覆盖向量V中的数据及顺序就是生成的单参数事件序列测试数据。

优选地,所述方法还包括:

针对有多个参数的待测嵌入式软件系统,在测试事件序列生成和执行时,将软件的多参数事件的一组参数作为一个单参数事件,从而将多参数事件变成单参数事件;然后按照单参数事件序列测试数据生成方法生成测试数据。

优选地,所述将多参数事件变成单参数事件的过程包括以下步骤:

对于含有k个参数的嵌入式软件系统,每个参数取值分别对应v1,v2,…,vk个取值,针对k个参数中的某个参数i,1≤i≤k,有vi个可能取值,用0,1,…,vi-1来表示,用记号[0,vi-1]表示集合{0,1,…,vi-1};

针对有k个参数的嵌入式软件系统,将k个参数中的每个参数的一次取值作为一个事件,则所述的嵌入式软件系统一共有v1+v2+…+vk个事件,相当于单参数事件有v1+v2+…+vk个取值所对应的事件个数,就能够将多参数事件转换为单参数事件进行处理。

本发明在考量了测软件参数输入顺序的的基础上能够生成嵌入式软件的测试数据。并且生成的测试数据完全能够代表穷举事件序列测试集,而且冗余度几乎为0;所以利用本发明生成的测试数据不但能够实现嵌入式软件全方面的测试,同时能够节省大量的测试时间和测试资源。

附图说明

图1为本发明的流程图。

具体实施方式

具体实施方式一:结合图1说明本实施方式,

嵌入式软件的单参数事件序列测试数据生成方法,包括以下步骤:

步骤1:在单参数事件序列中,针对任意t个事件,设事件序号分别为1,2,……,t;则由t个事件组成的任意一个有序序列s1→s2→...→st,叫做一个t维事件交互,记作(s1,s2,...st);

生成初始的t维事件交互集合Q,此时令Q中包含所有的t维事件交互,有Q=Ht,Ht为全部t维事件交互集;初始化测试数据覆盖向量V为空,测试数据覆盖向量V的长度m=0;

步骤2:在t维事件交互集合Q中随机挑选1条候选t维事件交互,加入测试数据覆盖向量V中,同时在t维事件交互集合Q中删除该t维事件交互;

步骤3:计算t维事件交互集合Q中每个t维事件交互的适应值,取一条适应值最大的t维事件交互,将适应值最大的t维事件交互追加到向量V的尾部,向量V长度增加t维;

适应值计算方法为:

设当前已有的测试数据覆盖向量为V,未被测试数据覆盖向量V覆盖的全部t维事件交互所组成的集合对应为当前的t维事件交互集合Q;对Q中某一t维事件交互x,取测试数据覆盖向量V中最后t-1个事件与x组成一个向量U;令向量U中包含的所有t维事件交互组成的集合为HU,t,则适应值计算函数定义为:

f(x)=|{HU,t∩Q}|>

适应值为HU,t和向量Q中交集t维事件交互的个数;

步骤4:在t维事件交互集合Q中删除所有被向量U覆盖的t维事件交互;

步骤5:若t维事件交互集合Q不为空,则执行步骤3,否则执行步骤6;

步骤6:输出测试数据覆盖向量V,测试数据覆盖向量V中的数据及顺序就是生成的单参数事件序列测试数据。

具体实施方式二:

本实施方式所述的嵌入式软件的单参数事件序列测试数据生成方法,包括以下步骤:

针对有多个参数的待测嵌入式软件系统,在测试事件序列生成和执行时,将软件的多参数事件的一组参数作为一个单参数事件,从而将多参数事件变成单参数事件;然后按照单参数事件序列测试数据生成方法生成测试数据,即按照以下步骤生成测试数据;

步骤1:在单参数事件序列中,针对任意t个事件,设事件序号分别为1,2,……,t;则由t个事件组成的任意一个有序序列s1→s2→...→st,叫做一个t维事件交互,记作(s1,s2,...st);

生成初始的t维事件交互集合Q,此时令Q中包含所有的t维事件交互,有Q=Ht,Ht为全部t维事件交互集;初始化测试数据覆盖向量V为空,测试数据覆盖向量V的长度m=0;

步骤2:在t维事件交互集合Q中随机挑选1条候选t维事件交互,加入测试数据覆盖向量V中,同时在t维事件交互集合Q中删除该t维事件交互;

步骤3:计算t维事件交互集合Q中每个t维事件交互的适应值,取一条适应值最大的t维事件交互,将适应值最大的t维事件交互追加到向量V的尾部,向量V长度增加t维;

适应值计算方法为:

设当前已有的测试数据覆盖向量为V,未被测试数据覆盖向量V覆盖的全部t维事件交互所组成的集合对应为当前的t维事件交互集合Q;对Q中某一t维事件交互x,取测试数据覆盖向量V中最后t-1个事件与x组成一个向量U;令向量U中包含的所有t维事件交互组成的集合为HU,t,则适应值计算函数定义为:

f(x)=|{HU,t∩Q}|>

适应值为HU,t和向量Q中交集t维事件交互的个数;

步骤4:在t维事件交互集合Q中删除所有被向量U覆盖的t维事件交互;

步骤5:若t维事件交互集合Q不为空,则执行步骤3,否则执行步骤6;

步骤6:输出测试数据覆盖向量V,测试数据覆盖向量V中的数据及顺序就是生成的单参数事件序列测试数据。

具体实施方式三:

本实施方式所述将多参数事件变成单参数事件的过程包括以下步骤:

对于含有k个参数的嵌入式软件系统,每个参数取值分别对应v1,v2,…,vk个取值,针对k个参数中的某个参数i,1≤i≤k,有vi个可能取值,用0,1,…,vi-1来表示,用记号[0,vi-1]表示集合{0,1,…,vi-1};

针对有k个参数的嵌入式软件系统,如果不考虑各参数之间的影响,则可以将k个参数中的每个参数的一次取值作为一个事件,则所述的嵌入式软件系统一共有v1+v2+…+vk个事件,相当于单参数事件有v1+v2+…+vk个取值所对应的事件个数,就能够将多参数事件转换为单参数事件进行处理。

其他步骤和参数与具体实施方式二相同。

实施例

针对有多个参数的待测嵌入式软件系统,被测软件的参数特征数据的每一个特征数据都可以看作是一个事件,如果每次测试都需要按一定次序依次输入全部事件,那么利用全因子方法生成其全部的事件序列难以实现,例如一个具有10个事件的待测系统,其穷举事件序列测试集规模有10!=3628800个,这是个非常庞大的数据,很难实现全部测试。因此,可以考虑测试其中若干个事件的排序,组合测试技术提供了类似的强度为t的事件序列测试生成方法,即t维事件交互的单参数事件序列测试数据生成方法。

针对有多个参数的待测嵌入式软件系统,在测试事件序列生成和执行时,将软件的多参数事件的一组参数作为一个单参数事件,从而将多参数事件变成单参数事件;然后按照单参数事件序列测试数据生成方法生成测试数据。

在单参数事件序列中,针对任意t个事件,设事件序号分别为1,2,……,t;则由t个事件组成的任意一个有序序列,如s1→s2→...→st,叫做一个t维事件交互,记作(s1,s2,...st);

设A是一个矩阵,矩阵的每一行对应一条事件序列测试数据,且满足:每个可能的t维事件交互都被矩阵中的某一行所对应的测试数据所覆盖,即对于任意的t维事件交互(s1,s2,...st),则称A是一个t维事件序列覆盖矩阵,记为SCA(N;k,t);其中,k为事件个数;t为事件序列覆盖强度,即t维事件交互;N为使得SCA(N;k,t)存在的最小整数,N称为覆盖数。

假设被测软件的单参数事件具有四个特征取值,A、B、C、D可看作是四个事件,如果每次测试都将四个事件的序列作为测试数据,那么全因子组合会有4!=24条测试数据,如果在不考虑事件相邻的情况下,生成强度为t=2的事件序列测试集,测试数据的覆盖目标是:对任意的两个事件,这两个事件的任意组合次序至少被测试数据的一行所包含,因此只用5条测试序列即可。如表1所示。

表1事件序列测试集:SCA(N;4,2)

SCA(N;4,2)其实就是将A,B,C,D四个事件中2维事件交互都涵盖的矩阵,即涵盖A→B、A→C、A→D、B→C、B→D、C→D、D→C、D→B、D→A、C→B、C→A、B→A的矩阵;

进一步,如果考虑测试是连续进行的,即任意连续两条测试数据是连续注入的,则表1中第二条测试数据可不必再注入事件D,因此,可更改为表2:

表2进一步优化后事件序列测试集:SCA(N;4,2)

当测试是连续进行的,对表2所示测试覆盖矩阵,可利用一向量表示,为:(A,B,C,D,C,B,…,B,A,D,C)。虽然利用向量表示后,可通过减少部分事件而降低测试数据的规模,但向量内部仍含有大量冗余事件交互,如本例中2维事件交互A→B和B→A都出现两次,通过删除冗余t维事件交互,可进一步缩减事件序列的规模。

因此,在实际应用中,可不再利用事件序列覆盖矩阵来表示测试数据,实际可使用事件序列覆盖向量来表示,即用本发明所述的数据覆盖向量V表示,具体过程如下:

步骤1:生成初始的2维事件交互集合Q,此时令Q={A→B,A→C,A→D,B→C,B→D,C→D,D→C,D→B,D→A,C→B,C→A,B→A};初始化测试数据覆盖向量V为空,测试数据覆盖向量V的长度m=0;

步骤2:在2维事件交互集合Q中随机挑选1条候选2维事件交互,加入测试数据覆盖向量V中,如挑选A→B加入测试数据覆盖向量V中,测试数据覆盖向量V=(A,B)

同时在t维事件交互集合Q中删除A→B;

步骤3:计算2维事件交互集合Q中每个2维事件交互的适应值,取一条适应值最大的C→D追加到向量V的尾部,测试数据覆盖向量V=(A,B,C,D)

适应值计算方法为:

设当前已有的测试数据覆盖向量为V=(A,B),未被测试数据覆盖向量V覆盖的全部2维事件交互所组成的集合对应为当前的2维事件交互集合Q={A→C,A→D,B→C,B→D,C→D,D→C,D→B,D→A,C→B,C→A,B→A};

如果选取的x是C→D,那么向量U=(B,C,D),向量U中包含的所有t维事件交互组成的集合为HU,t={B→C,C→D},其对应的f(x)为2。

按照此方式依次判断选取的x所对应的f(x);

假设选取的适应值最大的C→D追加到向量V的尾部,则测试数据覆盖向量V=(A,B,C,D);

步骤4:则在Q={A→C,A→D,B→C,B→D,C→D,D→C,D→B,D→A,C→B,C→A,B→A}删除B→C和C→D,此时Q={A→C,A→D,B→D,D→C,D→B,D→A,C→B,C→A,B→A};

步骤5:若此时2维事件交互集合Q不为空,则执行步骤3,否则执行步骤6;

步骤6:输出测试数据覆盖向量V={A,B,C,D,C,B,A,C,A,D,B,D,A}(这仅是生成的一种结果,还有其他的可能生成的结果),测试数据覆盖向量V中的数据及顺序就是生成的单参数事件序列测试数据。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号