一种基于状态机的测试用例生成方法和系统与流程

文档序号:33377980发布日期:2023-03-08 04:41阅读:70来源:国知局
一种基于状态机的测试用例生成方法和系统与流程

1.本发明属于嵌入式软件测试领域,尤其涉及一种基于状态机的测试用例生成方法和系统。


背景技术:

2.目前,软件测试中的测试用例,大部分还是依靠测试人员手工的编写方式实现的,这种方式测试效率低下,不仅不能够保证测试的充分性,而且还需要耗费大量的人力、财力、物力和时间。随着软件复杂程度的不断提高,对测试人员的要求也在不断的提高,为了能够提高测试的准确性和节约测试成本,自动化生成测试用例技术是软件测试领域的研究热点之一。
3.目前的测试用例生成技术大致可以划分为随机测试用例生成方法、基于搜索的测试用例生成方法、形式化的测试用例生成方法。其中随机测试用例生成方法的缺点是生成测试用例集庞大,测试执行效率不高,浪费大量的时间;基于搜索的测试用例生成方法的缺点是在算法搜索求最优解的过程中,算法可能陷入局部最优值,难以保证正确收敛到全局最优解;形式化测试用例生成方法的缺点是求解比较困难和路径爆炸。
4.另一方面,领域特定语言dsl是针对某一特定领域,具有受限表达性的一种计算机程序设计语言。dsl主要分为两类:内部dsl和外部dsl。内部dsl形式,由于利用现有通用编程语言为宿主,而通用编程语言固有的缺陷很难实现对总线协议报文以及信号特征的领域通用化描述。由此,需要构建独立于任何宿主语言的外部dsl语言,以满足嵌入式接口的自动化测试需要。


技术实现要素:

5.鉴于上述的分析,本发明旨在提供一种基于状态机生成测试用例的方法和系统,利用自定义数据协议描述语言dpd,基于根据状态机的状态转移图自动生成测试用例,并经过覆盖率优化达到高覆盖率、低重复率的高质量测试用例集。
6.一方面,本发明提供了一种基于状态机生成测试用例的方法,具体包括如下步骤:
7.基于被测系统的接口协议信息构建状态机得到状态变迁矩阵;
8.基于所述状态变迁矩阵,使用完全变迁路径覆盖算法生成初始测试用例;
9.使用改进的aetg算法对所述初始测试用例进行覆盖率优化得到完整测试用例集。
10.进一步的,所述基于被测系统的接口协议信息构建状态机得到状态变迁矩阵包括:
11.使用数据协议描述语言dpd对接口协议进行描述;
12.基于dpd所描述的接口协议信息和被测系统的软件设计说明书构建状态机并用状态图表示;
13.基于所述状态图得到状态变迁矩阵。
14.进一步的,所述基于所述状态变迁矩阵,使用完全变迁路径覆盖算法生成初始测
试用例包括:
15.从所述状态变迁矩阵第0行第一个不为0的变迁开始搜索,逐行查找为0的变迁,当变迁的目标状态为终止状态时或者变迁已在查找到的路径中出现过,则形成一条基于变迁的完全路径;
16.返回第0行重新开始查找下一条基于变迁的完全路径,对于已出现过的变迁不再使用,直到所有的变迁均已在路径中出现后,生成了所有的初始测试用例;
17.其中,所述不为0的变迁指由一个状态无法变迁到矩阵的相邻状态。
18.进一步的,所述使用改进的aetg算法对所述初始测试用例进行覆盖率优化得到完整测试用例集包括:使用改进的aetg算法对每个所述初始测试用例进行覆盖率优化,得到该测试用例对应的测试用例集;所有初始测试用例对应的测试用例集,构成完整测试用例集。
19.进一步的,所述得到状态变迁矩阵包括:
20.矩阵stn×n=(st
ij
),0≤i,j≤n-1,st
ij
=tk,tk∈t;
21.其中,st表示状态变迁矩阵,n
×
n表示矩阵的维度,()表示矩阵所有元素的集合,s表示状态,t表示变迁,st
ij
表示从状态si变迁到sj,st
ij
=tk,当tk=0时表示由状态si无法变迁到sj。
22.进一步的,所述基于所述状态变迁矩阵,使用完全变迁路径覆盖算法生成初始测试用例包括以下步骤:
23.step1:初始化,令i=0,j=0,变迁集t初始化为stn×n中所有不为0的st
ij
;其中,tps表示基于变迁的完全路径集合,tp表示完全路径,表示空集;
24.step 2:判断st
ij
是否为0,若st
ij
==0,则j=j+1,返回step2继续判断,否则,转向step3;
25.step3:将si·
tk·
sj加入到完全路径tp中,即tp

tp+si·
tk·
sj,将tk从变迁集t中删除,即t

t-tk,并且令st
ij
=tk=0;
26.step4:判断sj==se||tk∈tps,若是,则完全路径tp已形成,将其加入到完全路径集合tps中,即tps

tps+tp,继续step5;否则,i=j,j=0,返回step2;
27.step5:判断若是,则结束并输出tps;否则,令i=0,j=0,返回step2,搜索下一条基于变迁的完全路径。
28.进一步的,使用改进的aetg算法对所述初始测试用例进行覆盖率优化得到完整测试用例集,包括:
29.step 1:根据p1、p2、

、ph的值集v1、v2、

、vh,产生初始两两组合集uncover;其中,p1、p2、

、ph表示测试用例的h个参数,v、v2、

、vh表示对应的值集;
30.step 2:置初始测试用例集ts为空集φ;
31.step 3:查找uncover中出现的次数最多的值vk,得到其对应的参数标识pk,将pk加入已扩展参数列表lp;
32.step 4:构造一个待完成的测试用例t,令t[k]=vk,将t的其余位置置为
“‑”
;其中,t[k]表示参数pk的取值;
[0033]
step 5:从uncover中查找含有待完成的测试用例t中各参数取值与未扩展参数组合的未覆盖两两组合uncovert,uncovert的计算方法为:若p1,p2,

,pj的参数值已经确定,
设为v1,v2,

,vj,则查找uncover中的所有组合(pi,pm),i∈{1,2,...,j},m∈{j+1,j+2,...,h},该组合集即为uncovert;
[0034]
step 6:从uncovert中查找未扩展参数列表中其它参数出现次数最多的值v
k'
,得到其对应的参数标识,设为p
k’,将p
k’加入已扩展参数列表lp;
[0035]
step 7:补充测试用例t中的测试数据,即令t[k’]=v
k'

[0036]
step 8:检查测试用例t是否存在
“‑”
符号,若还存在
“‑”
符号,返回step 5,否则,生成了一个完成的测试用例t,将其加入测试用例集ts中;
[0037]
step 9:把测试用例t覆盖的所有两两组合从uncover中删除;
[0038]
step 10:判断uncover是否为空,若,否返回step3;若是,则结束,输出ts。
[0039]
进一步的,所述数据协议描述语言dpd采用根root、元素element、属性property三层的语法结构;
[0040]
定义rtype描述协议或设备,定义etype描述协议字段或接口;
[0041]
定义rtype取“protocol”时,etype取“segment”,表示为协议的字段;
[0042]
定义rtype取“device”时,etype取各种接口表示。
[0043]
另一方面,本发明还提供了一种基于状态机生成测试用例的系统,包括:
[0044]
状态变迁矩阵构建模块,用于基于状态机构建状态变迁矩阵;
[0045]
测试用例生成模块,用于基于所述状态变迁矩阵,使用完全变迁路径覆盖算法生成测试用例;
[0046]
覆盖率优化模块,用于使用改进的aetg算法对所述测试用例进行覆盖率优化。
[0047]
进一步的,所述状态变迁矩阵构建模块包括:
[0048]
语言管理模块,用于管理数据协议描述语言dpd;
[0049]
状态机构建模块,用于基于dpd所描述的接口协议信息和被测系统的软件设计说明书构建状态机并用状态图表示;
[0050]
状态变迁矩阵生成模块,用于基于所述状态图生成状态变迁矩阵。
[0051]
本发明至少可以实现下述之一的有益效果:
[0052]
通过使用完全路径覆盖dwfs算法,以深度优先搜索为主、宽度优先搜索为辅,基于变迁完全路径搜索状态变迁矩阵,生成完全路径的测试用例,保证了得到路径覆盖完全的最优测试用例集合且避免了用例生成过程中的路径爆炸问题。
[0053]
通过使用改进的ateg算法,从一个空的测试用例集开始,每次向测试用例集中加入一个新的测试用例,遵循该新增的测试用例能覆盖最多未被覆盖的测试用例参数和值集两两组合的原则,最终形成完整的测试用例集,实现测试用例的测试数据的覆盖率优化,避免了测试用例集过于庞大测试执行率不高的问题。
[0054]
通过使用协议与信号的领域描述语言:自定义数据协议描述语言dpd,提升了测试平台对于军用嵌入式系统和设备的适应性,解决了协议与信号的通用化与灵活化描述问题,可以针对不同接口、不同协议自动生成测试用例,实现了测试平台对不同测试对象与测试需求的扩展与适配。
[0055]
本发明的其他特征和优点将在随后的说明书中阐述,并且,部分优点可从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过说明书、权利要求书以及附图中所特别指出的内容中来实现和获得。
附图说明
[0056]
附图仅用于示出具体实施例的目的,而并不认为是对本发明的限制,在整个附图中,相同的参考符号表示相同的部件。
[0057]
图1为本发明实施例1测试用例生成方法流程图;
[0058]
图2为本发明实施例2有限状态机对应的状态图;
具体实施方式
[0059]
下面结合附图来具体描述本发明的优选实施例,其中,附图构成本技术一部分,并与本发明的实施例一起用于阐释本发明的原理,并非用于限定本发明的范围。
[0060]
方法实施例
[0061]
实施例1
[0062]
本发明的一个具体实施例,公开了一种基于状态机的测试用例生成方法,具体包括如下步骤:
[0063]
步骤s01、基于被测系统的接口协议信息构建状态机得到状态变迁矩阵,具体包括:
[0064]
s01-1、使用数据协议描述语言dpd对接口协议进行描述。
[0065]
接口协议指待测系统的通讯接口的数据协议。
[0066]
具体的,本发明的dpd语言采用根root、元素element、属性property三层的语法结构。
[0067]
具体的,其ebnf范式表示如下:
[0068]
etl::=rtype,identifier,“{“,{elements},”}”;
[0069]
rtype::=”topology”|”protocol”|”device”;
[0070]
elements::=elementidentifier,”{”,{properties},”}”;
[0071]
elementidentifier::=(etype,identifier)|(etype,“:”)
[0072]
identifier::=character,{character|digit|“_”}
[0073]
character="a"|"b"|"c"|"d"|"e"|"f"|"g"|"h"|

;//省略
[0074]
digit::="0"|"1"|"2"|"3"|"4"|"5"|"6"|"7"|

;//省略
[0075]
etype::=”segment”|”serial_232”|”can”|

;//省略
[0076]
properties::=pidentifier,”:”,pvalue
[0077]
pidentifier::=”parser”|“autovalue”|”ip”|”port”|


[0078]
//省略
[0079]
pvalue::=digits|bool|string
[0080]

[0081]
具体的,在rtype取“protocol”时,etype只能取“segment”,表示为协议的字段;可选的,字段的属性包括解析方法”parser”、“autovalue”。
[0082]
具体的,在rtype取“device”时,etype取各种接口表示可选的,包括“serial_232”、”can”;可选的,接口的属性包括“ip”、“port”,分别表示ip地址、端口。
[0083]
s01-2、基于dpd所描述的接口协议信息和被测系统的软件设计说明书构建状态机并用状态图表示。
[0084]
具体的,有限状态机是一种用来进行对象行为建模的工具,其作用主要是描述对象在它的生命周期内所经历的状态序列,以及如何响应来自外界的各种事件。构建状态机指构建被测系统对应的状态和响应事件以及响应事件所满足的监护条件。
[0085]
具体的,在协议的打包和解包过程中,调用dpd描述的接口协议提供的api接口,减少编写状态机模型脚本时的重复性工作量。
[0086]
具体的,基于软件设计说明书得到所要构建状态机的状态、事件和监护条件。
[0087]
用状态图表示包括用图的形式表示状态、触发状态转移的事件以及监护条件。
[0088]
s01-3、基于所述状态图定义状态变迁矩阵st。
[0089]
具体的,定义矩阵stn×n=(st
ij
),0≤i,j≤n-1,st
ij
=tk,tk∈t;
[0090]
其中,st表示状态变迁矩阵,n
×
n表示矩阵的维度,()表示矩阵所有元素的集合,s表示状态,t表示变迁,st
ij
表示从状态si变迁到sj,st
ij
=tk,当tk=0时表示由状态si无法变迁到sj。
[0091]
步骤s02、基于所述状态变迁矩阵,使用完全变迁路径覆盖算法生成初始测试用例。
[0092]
具体的,从所述状态变迁矩阵的第0行开始搜索第一个不为0的变迁,逐行查找为0的变迁,当变迁的目标状态为终止状态时或者变迁已在查找到的路径中出现过,则形成一条基于变迁的完全路径;
[0093]
返回第0行重新开始查找下一条基于变迁的完全路径,对于已出现过的变迁不再使用,直到所有的变迁均已在路径中出现后,便生成了所有的测试用例;
[0094]
其中,所述不为0的变迁指由一个状态无法变迁到矩阵的相邻状态。
[0095]
具体的,算法步骤描述如下:
[0096]
step1:初始化,令i=0,j=0,变迁集t初始化为stn×n中所有不为0的st
ij
;其中,tps表示基于变迁的完全路径集合,tp表示完全路径,表示空集;
[0097]
step2:判断st
ij
是否为0,若st
ij
==0,则j=j+1,返回step2继续判断,否则,转向step3;
[0098]
step3:将si·
tk·
sj加入到完全路径tp中,即tp

tp+si·
tk·
sj,将tk从变迁集t中删除,即t

t-tk,并且令st
ij
=tk=0;
[0099]
step4:判断sj==se||tk∈tps,若是,则完全路径tp已形成,将其加入到完全路径集合tps中,即tps

tps+tp,继续step5;否则,i=j,j=0,返回step2;
[0100]
step5:判断若是,则结束并输出tps;否则,令i=0,j=0,返回step2,搜索下一条基于变迁的完全路径。
[0101]
具体的,执行完算法后,形成了所有的初始测试用例。
[0102]
步骤s03、使用改进的aetg算法对所述初始测试用例进行覆盖率优化得到完整测试用例集。
[0103]
具体的,对于步骤s02通过路径覆盖得到的初始测试用例,每个初始测试用例的状态的取值可能为多个,使用改进的aetg算法对每个初始测试用例进行覆盖率优化,得到该测试用例对应的测试用例集;所有初始测试用例对应的测试用例集,构成完整测试用例集。
[0104]
具体的,使用改进的aetg算法对每个所述初始测试用例进行覆盖率优化得到其对应的测试用例集,包括如下步骤:
[0105]
step 1:根据p1、p2、

、ph的值集v1、v2、

、vh,产生初始两两组合集uncover;其中,p1、p2、

、ph表示测试用例的h个参数,v、v2、

、vh表示对应的值集;
[0106]
step 2:置测试用例集ts为空集φ;
[0107]
step 3:查找uncover中出现的次数最多的值vk,得到其对应的参数标识pk,将pk加入已扩展参数列表lp;
[0108]
step 4:构造一个待完成的测试用例t,令t[k]=vk,将t的其余位置置为
“‑”
;其中,t[k]表示参数pk的取值;
[0109]
step 5:从uncover中查找含有待完成的测试用例t中各参数取值与未扩展参数组合的未覆盖两两组合uncovert,uncovert的计算方法为:若p1,p2,

,pj的参数值已经确定,设为v1,v2,

,vj,则查找uncover中的所有组合(pi,pm),i∈{1,2,...,j},m∈{j+1,j+2,...,h},该组合集即为uncovert;
[0110]
step 6:从uncovert中查找未扩展参数列表中其它参数出现次数最多的值vk′
,得到其对应的参数标识,设为p
k’,将p
k’加入已扩展参数列表lp;
[0111]
step 7:补充测试用例t中的测试数据,即令t[k’]=vk′

[0112]
step 8:检查测试用例t是否存在
“‑”
符号,若还存在
“‑”
符号,返回step 5,否则,生成了一个完成的测试用例t,将其加入测试用例集ts中;
[0113]
step 9:把测试用例t覆盖的所有两两组合从uncover中删除;
[0114]
step 10:判断uncover是否为空,若,否返回step3;若是,则结束,输出ts。
[0115]
本实施例,公开了一种基于状态机的测试用例生成方法,使用完全路径覆盖dwfs算法,以深度优先搜索为主、宽度优先搜索为辅,基于变迁完全路径搜索状态变迁矩阵生成测试用例,提高了测试用例的生成效率;通过使用改进的ateg算法实现测试用例的测试数据的覆盖率优化;通过自定义数据协议描述语言dpd,提升了测试平台对于军用嵌入式系统和设备的适应性,实现了测试平台对不同测试对象与测试需求的扩展与适配。
[0116]
实施例2
[0117]
本发明的另一个具体实施例,公开了一种基于状态机生成测试用例的方法,具体包括:
[0118]
本实施例的协议格式如下:
[0119][0120]
步骤s11、基于状态机构建状态变迁矩阵。
[0121]
s11-1、使用数据协议描述语言dpd对接口协议进行描述。具体的,使用dpd对接口协议描述如下:
[0122]
【包头】property_packet_header="packet_header"|"length"|"size","=",position;
[0123]
property_bound="bound",l"=","["|"(",expression,",",expression,"]"|")";
[0124]
【长度】property_len="len"|"length"|"size","=",positio n;
[0125]
property_bound="bound",l"=","["|"(",expression,",",expression,"]"
|")";
[0126]
【内容】property_data="data"|"element"|"type","=",refe rence;
[0127]
property_count="count"|"length"|"size","=",exp ression;
[0128]
【校验和】property_checksum="checksum"|"length"|"size","=",position;
[0129]
property_algorithm="algorithm","=",innate_algorithm|"{",
[0130]
{method},"}"
[0131]
property_bound="bound",l"=","["|"(",expression,",",expression,"]"|")";
[0132]
property_default="default","=",expression;
[0133]
【包尾】property_end_flag="end_flag"|"length"|"size","=",position;
[0134]
property_bound="bound",l"=","["|"(",expression,",",expression,"]"|")";
[0135]
s11-2、基于dpd所描述的接口协议和软件设计说明书构建状态机并用状态图表示。
[0136]
具体的,基于软件设计说明书得到:
[0137]
状态集合:<开始,无效,包头aa,头55,长度l,内容,校验,尾55,尾aa,结束》,共10个状态;
[0138]
事件集合:<收到1字节》,只有一个事件,就是收到“1个字节”;
[0139]
监护条件:<==aa,!=aa,==55,!=55,content<l,checklen==2,共6个监护条件;content<l表示收到的内容字节长度还小于长度l的规定,checklen<2表示收到的校验字节长度还小于2,==aa表示收到下一个字节为aa,!=aa表示收到下一个字节不为aa,==55表示收到下一个字节为55,!=55表示收到下一个字节不为55。
[0140]
如图2所示为所对应的状态图。
[0141]
s11-3,基于所述状态图定义状态变迁矩阵。具体的,状态变迁矩阵如下表:
[0142][0143][0144]
步骤s12、基于所述状态变迁矩阵,使用完全变迁路径覆盖算法生成测试用例。
[0145]
在上表中,
×
代表无法转换,所有不是
×
的项都能转换,根据基于变迁的完全路径生成算法,可得到如下序列:
[0146]
(1)开始(!=aa)无效(!=aa)无效(==aa)头aa(!=55)无效;
[0147]
(2)开始(==aa)头aa(==55)头55(√)长度l(√)内容(contentl<l)内容(contentl=l)校验(checkl==2&&!=55)无效;
[0148]
(3)开始(==aa)头aa(==55)头55(√)长度l(√)内容(contentl<l)内容(contentl=l)校验(checkl<2)校验(checkl==2&&==55)尾55(!=aa)无效;
[0149]
(4)开始(==aa)头aa(==55)头55(√)长度l(√)内容(contentl<l)内容(contentl=l)校验(checkl<2)校验(checkl==2&&==55)尾55(==aa)尾aa(√)结束。
[0150]
上述4个序列形成4个用例,这4个用例覆盖了所有的状态和所有的变迁。
[0151]
具体的,将监护条件列出来形成测试数据,如下表,其中,
“‑‑”
表示无所谓取什么数。
[0152][0153][0154]
可选的,测试数据选取如下:
[0155]
03 06aa 07 04 04 06 08 0a 0b
[0156]
aa 55 03 01 02 03 0d 06 07 09
[0157]
aa 55 03 01 02 03 0f 03 55 02
[0158]
aa 55 03 01 02 03 0a 01 55aa
[0159]
具体的,上述测试数据可以测试出协议解析器的状态机来,同时由于串行通信以及缓冲区的特点,测试时可以将测试用例1到测试用例4串成序列发送,即采用发送串口数据这样的形式进行发送即可:
[0160]
03 06aa 07 04 04 06 08 0a 0b aa 55 03 01 02 03 0d 06 07 09aa 5503 01 02 03 0f 03 55 02aa 55 03 01 02 03 0a 01 55aa
[0161]
只要能解析出一包来(不包括校验和错的情况),说明状态机程序是正确的。
[0162]
步骤s13、使用改进的aetg算法对所述测试用例进行覆盖率优化。
[0163]
示例性的,对于步骤s12中得到的第2条测试用例进行覆盖率优化。
[0164][0165]
具体的,设第2条用例第7、8、10字节为a、b、c,软件设计说明书中得到对应的值集如下:
[0166]
a有2种不同取值:a1,a2;
[0167]
b有2种不同取值:b1,b2;
[0168]
c有3种不同取值:c1,c2,c3;
[0169]
具体的,得到uncover:所有未覆盖的因素的成对组合如下:
[0170]
{(a1,b1);(a1,b2);(a2,b1);(a2,b2);(a1,c1);(a1,c2);(a1,c3);(a2,c1);(a2,c2);(a2,c3);(b1,c1);(b1,c2);(b1,c3);(b2,c1);(b2,c2);(b2,c3)};
[0171]
统计情况如下:
[0172]
取值a1a2b1b2c1c2c3出现次数5555444
[0173]
可得第一个测试用例为t1=(a1,b1,c1)。
[0174]
第1次更新uncover:所有未覆盖的因素的成对组合
[0175]
{;(a1,b2);(a2,b1);(a2,b2);;(a1,c2);(a1,c3);(a2,c1);(a2,c2);(a2,c3);;(b1,c2);(b1,c3);(b2,c1);(b2,c2);(b2,c3)};
[0176]
取值a1a2b1b2c1c2c3出现次数3535244
[0177]
在a2和b2任选一个,t2:(-,b2,-);
[0178]
当前uncover:所有未覆盖的因素的成对组合:
[0179]
{;(a1,b2);(a2,b1);(a2,b2);;(a1,c2);(a1,c3);(a2,c1);(a2,c2);(a2,c3);;(b1,c2);(b1,c3);(b2,c1);(b2,c2);(b2,c3)};
[0180]
与b2组合的a有(a1,b2)和(a2,b2),所以a1和a2随机选一个t2:(a2,b2,-)
[0181]
当前uncover:所有未覆盖的因素的成对组合:
[0182]
{;(a1,b2);(a2,b1);(a2,b2);;(a1,c2);(a1,c3);(a2,c1);(a2,c2);(a2,c3);;(b1,c2);(b1,c3);(b2,c1);(b2,c2);(b2,c3)};
[0183]
和a2、b2组合的c有(a2,c1);(a2,c2);(a2,c3);(b2,c1);(b2,c2);(b2,c3),c1、c2、c3都出现2次;
[0184]
c1,c2,c3任选一个,得到t2:(a2,b2,c1)。
[0185]
第2次更新uncover:所有未覆盖的因素的成对组合如下:
[0186]
{;(a1,b2);(a2,b1);;;(a1,c2);(a1,c3);;(a2,c2);(a2,c3);;(b1,c2);(b1,c3);;(b2,c2);(b2,c3)};
[0187]
取值a1a2b1b2c1c2c3出现次数3333044
[0188]
c2,c3任选一个t3:(-,-,c2);
[0189]
与c2组合的a有(a1,c2)和(a2,c2),a1和a2各一次,然后在a1,a2中任选一个,t3:(a1,-,c2),和a1、c2组合的b有(a1,b2);(b1,c2);(b1,c3);(b2,c2);(b2,c3),b1有2次,b2有3次,选择b2,得到:
[0190]
t3:(a1,b2,c2)。
[0191]
第3次更新uncover:所有未覆盖的因素的成对组合:
[0192]
{;;(a2,b1);;;;(a1,c3);;(a2,c2);(a2,c3);;(b1,c2);(b1,c3);;;(b2,c3)};
[0193]
取值a1a2b1b2c1c2c3出现次数1331024
[0194]
t4:(-,-,c3);和c3组合的a有(a1,c3)和(a2,c3),若选择a1,则与a1、c3组合的b只有(b1,c3)、(b2,c3),此时无论是(a1,b1,c3)还是(a1,b2,c3)都只能覆盖uncover覆盖两项,若选a2则与a2、c3组合的b有(a2,b1),(b1,c3)、(b2,c3),此时选b1得到(a2,b1,c3)能覆盖到uncover中3项;得到:
[0195]
t4:(a2,b1,c3)。
[0196]
第4次更新uncover:所有未覆盖的因素的成对组合
[0197]
{;;;;;;(a1,c3);;(a2,c2);;;(b1,c2);;;;(b2,c3)}
[0198]
取值a1a2b1b2c1c2c3出现次数1111022
[0199]
c2和c3任选一个
[0200]
候选t5:(-,-,c2),下一步只能选a2,v5:(a2,-,c2),么下一步只能选b1,得到:
[0201]
t5:(a2,b1,c2)。
[0202]
第5次更新uncover:所有未覆盖的因素的成对组合:
[0203]
{;;;;;;(a1,c3);;;;;;;;;(b2,c3)}
[0204]
候选v6:(a1,b2,c3)
[0205]
最终得到的对应的测试用例集为:
[0206]
t1:(a1,b1,c1);
[0207]
t2:(a2,b2,c1);
[0208]
t3:(a1,b2,c2);
[0209]
t4:(a2,b1,c3);
[0210]
t5:(a1,b2,c3);
[0211]
t6:(a2,b1,c2)。
[0212]
相比于现有技术,本实施例提供的一种基于状态机的测试用例生成方法有益效果与实施例一提供的有益效果基本相同,在此不一一赘述。
[0213]
系统实施例
[0214]
本实施例,公开了一种基于状态机的测试用例生成系统,包括状态变迁矩阵构建模块、测试用例生成模块和覆盖率优化模块。
[0215]
状态变迁矩阵构建模块:用于基于状态机构建状态变迁矩阵,包括:语言管理模块,用于管理数据协议描述语言dpd;状态机构建模块,用于基于dpd所描述的接口协议信息和被测系统的软件设计说明书构建状态机并用状态图表示;状态变迁矩阵生成模块,用于基于所述状态图生成状态变迁矩阵。
[0216]
测试用例生成模块:用于基于所述状态变迁矩阵,使用完全变迁路径覆盖算法生成测试用例。
[0217]
覆盖率优化模块:用于使用改进的aetg算法对所述测试用例进行覆盖率优化。
[0218]
需要说明的是,上述实施例基于相同的发明构思,未重复描述之处,可相互借鉴。
[0219]
以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,
都应涵盖在本发明的保护范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1