CN112699039B - 一种基于分类树的测试数据自动生成方法及系统 - Google Patents

一种基于分类树的测试数据自动生成方法及系统 Download PDF

Info

Publication number
CN112699039B
CN112699039B CN202011641866.2A CN202011641866A CN112699039B CN 112699039 B CN112699039 B CN 112699039B CN 202011641866 A CN202011641866 A CN 202011641866A CN 112699039 B CN112699039 B CN 112699039B
Authority
CN
China
Prior art keywords
value
test data
parameter
constraint
coverage
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202011641866.2A
Other languages
English (en)
Other versions
CN112699039A (zh
Inventor
杨京礼
林连雷
魏长安
盛云龙
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Harbin Institute of Technology
Original Assignee
Harbin Institute of Technology
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Harbin Institute of Technology filed Critical Harbin Institute of Technology
Priority to CN202011641866.2A priority Critical patent/CN112699039B/zh
Publication of CN112699039A publication Critical patent/CN112699039A/zh
Application granted granted Critical
Publication of CN112699039B publication Critical patent/CN112699039B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

一种基于分类树的测试数据自动生成方法及系统,属于软件测试领域。本发明是为了解决现有的测试数据生成方法存在数据生成效率较低的问题以及测试覆盖率较低的问题。本发明提出了一种联合覆盖数组的覆盖准则,然后利用带有分类树的测试数据表对待测试的数据进行表示;基于测试数据的约束描述和覆盖准则,针对于不存在次序约束和存在次序约束的情况,采用遗传算法生成联合覆盖数组。本发明主要用于测试数据的生成。

Description

一种基于分类树的测试数据自动生成方法及系统
技术领域
本发明涉及一种测试数据自动生成方法及系统,属于软件测试领域。
背景技术
电子与信息系统已经在公共安全和国防等重要领域占据核心地位,承担着计算、控制、信息处理和通信等重要的任务。它们结构复杂、集成的功能项多、功能之间的耦合程度紧密,且具有多样的通信接口、复杂的输入参数。一些微小的错误或偶然因素的影响就可能带来巨大的财产损失和严重的人员伤害,造成难以估计的后果。为了减少损失、降低伤害且保证质量和可靠性,需要对这类系统进行更全面的测试。
理论上对测试空间中的全部数据进行全因子测试才能保证全面性,然而测试空间中可能的测试数据举不胜举,无法在实际测试中应用。组合测试是一种科学有效的黑盒测试方法,可以使用较少的测试数据有效地检测被测系统中参数之间的相互作用产生的影响。组合测试可以使用较少的测试数据达到全因子测试的效果,因此,实际中常常使用组合测试代替全因子测试。
在实际的电子与信息系统中,参数间的依赖关系往往将形成一系列的约束,如果忽略约束,组合测试就会产生无效的测试数据,进一步增加了组合测试数据集的构造难度。而且输入往往还具有时序性,即输入要满足一定的次序要求,对应的参数之间、参数的取值之间也存在次序上的约束。为保证测试的有效性,输入的测试数据必须满足这种约束,进一步提升了组合测试数据集的构造难度。
目前基于分类树的测试数据设计工具只支持手动设置测试数据,面对大规模的测试需求,无能为力。而且,不支持参数之间的组合约束和同一参数取值之间的前后次序约束。测试数据不能大规模自动生成的主要原因是没有统一的、全面的测试覆盖准则,一旦测试覆盖准则完备,则自动生成方法自然而然能够根据覆盖准则进行设计。参数之间的组合约束和取值之间的前后次序约束属于常见的约束形式,它们的描述较为简单,一旦测试数据工具能够支持这两类约束,自动生成方法是可以在满足覆盖准则的情况下,同时生成满足约束的测试数据的。该工具的研制对于电子系统的全面测试具有重要的意义。
发明内容
本发明是为了解决现有的测试数据生成方法存在数据生成效率较低的问题以及测试覆盖率较低的问题。
一种基于分类树的测试数据自动生成方法,包括以下步骤:
利用带有分类树的测试数据表对待测试的数据进行表示;基于测试数据的约束描述和覆盖准则,采用遗传算法生成联合覆盖数组,包括以下步骤:
(1)参数初始化
参数初始化包括两个部分:
1.1、对遗传算法本身的参数进行初始化;
1.2、生成测试数据过程的初始化:
采用“Map”数据结构存储组合约束,“Map”的键“Key”表示参数的组合,值“Value”是一个存储了参数约束取值组合对应索引的数组;存储约束时,非约束的索引不能出现;
目标取值组合使用“Map”数据结构进行存储,目标取值组合“Map”中的每一个参数组合“Key”对应的“Value”数组中的每一个索引都需要进行约束一致性验证,通过约束一致性验则是目标取值组合;
利用整数集表示任意t个参数的全部取值组合,已知每个取值对应参数的取值个数集/>任意一个取值组合/>对应的索引index的求解过程为:
(1.1)令
(1.2)令j从2取到t,循环执行
(1.3)index即为取值组合对应的索引;
其中,gj为每个取值对应参数的取值个数;
取值序列表采用“Map”结构,“Map”的键“Key”表示参数的取值序列,值“Value”是一个存储了参数取值序列对应索引的一个数组;存储取值序列时,如果其中的取值序列不满足取值次序约束一致性,则其对应的索引不能出现在“Value”中;
每一条测试数据的组合适应值为覆盖未被覆盖的取值组合的个数,序列适应值为当前测试数据与之前的ts-1条测试数据一起覆盖的未被覆盖的取值序列的个数;一条测试数据的适应值是组合适应值和序列适应值两者之和;
(2)生成候选解集
为M个新的染色体中每一个基因xij进行初始化,初始值从第j个参数的取值区间[0,gj-1]中随机选择;
(3)选择
从M个染色体中选出适应值大的M/2个染色体作为自然选择的结果;
(4)交叉
将选择出的M/2个染色体平均分为两组;每组对应位置的染色体之间进行交叉,对于任一对需要交叉的染色体对,其中每个对应位置的基因按照交叉概率Pc进行交叉;
(5)变异
对于交叉之后的染色体,其中第j基因从[0,gj-1]中随机变异一个新的值,并按照变异概率Pm进行选择;
(6)判断是否满足最大覆盖
如果在进化过程中的适应值为则提前跳出进化过程;
(7)搜索策略
在染色体完成进化过程之后,如果其中的最优的染色体的适应值为0,使用搜索策略进行后续的寻优过程;如果最优个体不满足最大覆盖,则判断是否达到最大迭代次数,如果没有达到返回步骤(3),如果达到最大迭代次数也使用搜索策略进行后续的寻优过程;
搜索策略将生成一条测试数据并放入联合覆盖数组中,该条测试数据中每个参数对应的取值,与该取值前面或后面的测试数据中对应参数的取值构成的取值路径中,能够覆盖未被覆盖的取值序列;根据每个参数的取值情况的不同,搜索策略将具体分为如下两个过程:
在第一个过程中,搜索策略对联合覆盖数组中的最后一条测试数据到倒数第ts-1条测试数据进行检查,检查从倒数第r,1≤r≤ts-1,条测试数据到倒数第一条测试数据中,是否存在未被覆盖的取值序列的一段,如果存在,则将这一段所在未被覆盖的取值序列的下一个值放到新生成的测试数据中对应的位置;如果经过第一个过程,新的测试数据中有的参数已经选取了取值,则对没有选取取值的参数随机赋一个满足约束一致性的值;如果在新的测试数据中全部参数都没有选取取值,则进行第二个过程;
在第二个过程中,将联合覆盖数组中最后一条测试数据中的每个参数的取值作为一个树的根节点,该节点的子节点为该值可以转移到的取值;在树不断壮大的过程中,直到某一层子节点是未被覆盖的取值序列的起始值时停止该过程;在根节点到最后一层子节点的路径上的第二个节点,将作为新生成的测试数据中对应参数的取值;一旦某个参数已经选取了取值,则结束该过程并对没有选取取值的参数随机赋一个满足约束一致性的值;
(8)判断是否满足覆盖要求
当不存在次序约束时,联合覆盖数组两条测试数据之间将没有任何约束,在搜索时间下覆盖全部的参数取值组合和取值序列,结束生成测试数据。
进一步地,当存在次序约束时,需要在步骤1.2所述生成测试数据过程的初始化中对存在次序约束进行初始化,并在步骤(8)中按照当存在次序约束时的情况下判断是否满足覆盖要求结束生成测试数据,具体过程包括以下步骤:
初始化:次序约束也采用“Map”结构,“Map”的键“Key”表示参数的取值序列,值“Value”是一个存储了参数取值序列对应索引的一个数组;存储约束次序时,非次序约束的索引不能出现在“Value”中;
判断是否满足覆盖要求对结束条件:当染色体的适应值都为0时,对剩余的取值组合将进行忽略;结束生成测试数据。
进一步地,步骤1.1所述对遗传算法本身的参数进行初始化的过程中,染色体M=1000,进化代数为N=20。
进一步地,步骤(2)生成候选解集的过程中,在每个基因随机初始化后,从中随机选取一个未被覆盖的目标取值组合放入基因中,使基因的初始适应值至少为1。
进一步地,步骤(4)所述的Pc=0.5。
进一步地,步骤(5)所述Pm=0.5。
进一步地,所述测试数据的覆盖准则构建过程如下:
设A是一个n×k的矩阵,矩阵中第i列元素都取自[0,vi-1],vi第i个参数Pi的取值数量,本领域中一般将vi表示为取值个数,具体的取值为用0至vi-1表示;参数Pi为实际被测系统的物理参数,例如汽车测试系统的中的速度、位移等;矩阵的每一行对应一条测试数据,如果A满足下面两个条件:
①每个可能的tc维交互都被矩阵中的某一行所对应的测试数据所覆盖,即对任意tc维交互 至少存在一行r,使得/>其中j=1,2,...,tc;A[r,ij]表示A中第r行、第ij列的元素为参数值aij
②任意列i(1≤i≤k)中的任意ts个取值(包括相同取值),都被矩阵中任意ts个相邻行所覆盖,即存在相邻的ts行/>使得/>其中j=1,2,...,ts
则称A是一个联合覆盖数组,记为UCA(n;tc,ts,v1,v2,...,vk,C),称tc为联合覆盖数组的组合力度,ts为联合覆盖数组的序列力度,C是CCTL描述的约束集。
一种基于分类树的测试数据自动生成系统,所述系统用于执行所述的一种基于分类树的测试数据自动生成方法。
有益效果:
本发明支持高覆盖率的联合覆盖准则的测试数据的自动生成,该准则目前支持常见的组合约束和次序约束。大大地提高了测试数据生成的效率,同时覆盖准则为高覆盖率测试提供了必要的保证。将本发明用于某型号导弹综控机的现场测试过程中,能够实现对被测系统高覆盖率、快速的系统级测试。
附图说明
图1为基于分类树的测试表的示意图;
图2为联合覆盖数组生成流程图。
具体实施方式
本发明提出一种基于分类树的测试数据自动生成方法,分类树由黑盒测试的等价类划分法而得,如图1所示,分类树中每个参数的取值对应测试数据表中的一列,一条测试数据对应测试数据表中的一行,在一条测试数据中每个参数最多可以选取一个取值。测试数据表左侧的序号用于标注每条测试用例的执行的顺序。基于分类树的测试数据设计系统提供了形式化的用户图形界面,便于测试人员手动设计测试数据。该系统提供了基于钟控计算树逻辑(Clocked Computation Tree Logic)的约束描述方法,供用户描述复杂的组合和时序约束。同时,该系统提供组合和序列联合覆盖准则的自动测试数据生成功能,该功能完美的支持无约束的情况,以及仅存在常用的组合约束和次序约束的情况。
具体实施方式一:
本实施方式所述的一种基于分类树的测试数据自动生成方法,包括以下步骤:
S1、利用带有分类树的测试数据表对待测试的数据进行表示;
S2、构建测试数据的约束描述和覆盖准则:
S2.1、构建测试数据的约束描述,具体过程如下:
基于线性时序逻辑(Linear Temporal Logic,LTL)公式定义如下:
式中:φ——LTL公式;AP——原子表达式;∧、∨、→和/>——经典逻辑算子;X——“下一刻”(next)算子;F——“最终”(finally)算子;G——“总是”(always)算子;U——“直到”(until)算子。
计算树逻辑(Computation Tree Logic,CTL)在LTL的基础上增加了两个路径量词“A”和“E”,“A”表示“对全部路径”(All),“E”表示“存在路径”(Exist)。将路径量词和逻辑算子进行组合可以对模型的路径进行描述。将测试数据看作是一条路径,通过路径量词对测试数据进行限定,可以描述参数取值的次序约束,然而当次序约束中涉及具体的步骤时,CTL则无法描述约束。
CCTL在CTL的基础上为时态算子增加了作用域,指出了时态算子的作用区间,为次序约束的准确描述奠定了基础。下CCTL的公式规则如下。且m≤n,其公式定义如下:
EX[n]φ|EF[m,n]φ|EG[m,n]φ|E(φU[m,n]φ)|
AX[n]φ|AF[m,n]φ|AG[m,n]φ|A(φU[m,n]φ)
当CCTL公式用于描述次序约束时,路径表示测试数据集,如使用Γ表示测试数据集,表示测试数据集Γ满足φ。CCTL公式用于描述测试数据集应该满足的约束,其中的每一组测试数据都应该满足“A”和“E”描述的约束,因此量词“A”表示的“对全部路径”和量词“E”表示的“存在路径”,本质上都表示“存在”的含义,具体含义为:测试数据集满足“存在”的某某约束。由此就不需要“A”和“E”都用于描述约束,本发明选择路径量词“E”统一描述约束。
为了描述次序约束,重新对时态算子和其作用域进行了定义,时态算子的作用域作用到测试数据集将表示测试执行的步骤。
设测试数据集为Γ={T1,T2,...,Tk},φ和ψ是CCTL公式,T1,表示以测试数据T1开始的测试数据集Γ满足公式φ,简记为/>通常也可以省略T1
当EX[n]表示的约束成立时,后面的CCTL公式以当前第n条测试数据为第一条测试数据,当出现EX时,以下一条测试数据为第一条测试数据。设且m≤n。
①对于X算子,其基本形式为:
含义是存在测试数据集Γ={T1,T2,...,Tk},其中第n条测试数据Tn满足φ,即
②对于G算子,其基本形式为:
含义是存在测试数据集Γ={T1,T2,...,Tk},有/>
③对于U算子,其基本形式为:
表示存在测试数据集Γ={T1,T2,...,Tk},有/>且/>
④对于F算子,其基本形式为:
表示存在测试数据集Γ={T1,T2,...,Tk},有/>
通过将上述四个基本的描述形式与逻辑算子“→”相结合就可以对次序约束进行描述。“→”前后连接两个公式,当前面的公式满足时“→”后面的公式也需要满足。
S2.2、构建测试数据的覆盖准则,具体过程如下:
联合覆盖数组(Unite Covering Array,UCA):设A是一个n×k的矩阵,矩阵中第i列元素都取自[0,vi-1],vi第i个参数Pi的取值个数,本领域中一般将vi表示为取值数量,具体的取值为用0至vi-1表示;参数Pi为实际被测系统的物理参数,例如汽车测试系统的中的速度、位移等;矩阵的每一行对应一条测试数据,如果A满足下面两个条件:
①每个可能的tc维交互都被矩阵中的某一行所对应的测试数据所覆盖,即对任意tc维交互至少存在一行r,使得/>其中j=1,2,...,tc;A[r,ij]表示A中第r行、第ij列的元素为参数值/>
②任意列i(1≤i≤k)中的任意ts个取值(包括相同取值),都被矩阵中任意ts个相邻行所覆盖,即存在相邻的ts行/>使得/>其中j=1,2,...,ts
则称A是一个联合覆盖数组,记为UCA(n;tc,ts,v1,v2,...,vk,C),称tc为联合覆盖数组的组合力度,ts为联合覆盖数组的序列力度,C是CCTL描述的约束集。
S3、基于构建测试数据的约束描述和覆盖准则生成测试数据:
如图2所示,采用遗传算法生成联合覆盖数组,具体过程如下:
(1)参数初始化
参数初始化包括两个部分,一个遗传算法本身参数的初始化;另一个是生成测试数据过程中用的参数。
遗传算法本身的参数按照目前主流的初始值进行选取,染色体M=1000,进化代数为N=20。
组合约束作为满足性解释器的初始参数,需要在这一步进行初始化,进而满足性解释器才能在测试数据的生成过程中判断是否满足了组合约束条件。采用“Map”数据结构存储组合约束,“Map”的键“Key”表示参数的组合,如表1中的第一行所示,值“Value”是一个存储了参数约束取值组合对应索引的数组,如表1中的第一列所示。存储约束时,非约束的索引不能出现。
表1组合约束与索引对照表
目标取值组合同样使用“Map”数据结构进行存储,如果其中的取值组合不满足约束一致性则其对应的索引也不能出现。目标取值组合“Map”中的每一个参数组合“Key”对应的“Value”数组中的每一个索引都需要进行约束一致性验证,以决定是否是目标取值组合,通过约束一致性验则是目标取值组合。利用整数集表示任意t个参数的全部取值组合,已知每个取值对应参数的取值个数集/>任意一个取值组合对应的索引index的求解过程为:
(1.1)令
(1.2)令j从2取到t,循环执行
(1.3)index即为取值组合对应的索引。
其中,gj为每个取值对应参数的取值个数;在联合覆盖数组准则中以vi表示,而在实际的确定参数数值的过程中以gj表示,实际二者含义一致;
取值序列表采用与取值组合表类似的结构;当存在次序约束时,次序约束也采用与取值组合表类似的结构。如表2所示。仍采用“Map”结构,“Map”的键“Key”表示参数的取值序列,值“Value”是一个存储了参数取值序列对应索引的一个数组,对应的索引index的求解过程与对目标取值组合对应的索引index的求解过程相同。存储约束次序时,非次序约束的索引不能出现在“Value”中,存储取值序列时,如果其中的取值序列不满足取值次序约束一致性,则其对应的索引不能出现在“Value”中。每一条测试数据的组合适应值为覆盖未被覆盖的取值组合的个数,序列适应值为当前测试数据与之前的ts-1条测试数据一起覆盖的未被覆盖的取值序列的个数。一条测试数据的适应值是组合适应值和序列适应值两者之和。
表2次序约束与索引对照表
(2)生成候选解集
为M个新的染色体中每一个基因xij进行初始化,初始值从第j个参数的取值区间[0,gj-1]中随机选择。为了防止随机初始化的盲目性,在每个基因随机初始化后,从中随机选取一个未被覆盖的目标取值组合放入基因中,使基因的初始适应值至少为1,加速寻优过程。
(3)选择
从M个染色体中选出适应值大的M/2个染色体作为自然选择的结果。
(4)交叉
将选择出的M/2个染色体平均分为两组。每组对应位置的染色体之间进行交叉,对于任一对需要交叉的染色体对,其中每个对应位置的基因按照交叉概率Pc=0.5进行交叉。
(5)变异
对于交叉之后的染色体,其中第j基因从[0,gj-1]中随机变异一个新的值,并按照变异概率Pm=0.5进行选择。
(6)判断是否满足最大覆盖
如果在进化过程中的适应值为也就是一条测试数据最多能覆盖/>个取值组合和,则可以提前跳出进化过程。/>表示/>
(7)搜索策略
在染色体完成进化过程之后,如果其中的最优的染色体的适应值为0,此时最优个体覆盖为0,说明经过一番进化更新没有找到可行解。这时可以认为目标几乎被完全覆盖,未被覆盖的目标只剩下很小一部分。为了减少算法后续搜索的盲目性,提出使用搜索策略指导后续的寻优过程。如果最优个体不满足最大覆盖,则判断是否达到最大迭代次数,如果没有达到返回步骤(3),如果达到最大迭代次数也使用搜索策略指导后续的寻优过程。
搜索策略将生成一条测试数据并放入联合覆盖数组中,该条测试数据中每个参数对应的取值,与该取值前面或后面的测试数据中对应参数的取值构成的取值路径中,能够覆盖未被覆盖的取值序列。根据每个参数的取值情况的不同,搜索策略将具体分为如下两个过程:
在第一个过程中,搜索策略对联合覆盖数组中的最后一条测试数据到倒数第ts-1条测试数据进行检查,检查从倒数第r(1≤r≤ts-1)条测试数据到倒数第一条测试数据中,是否存在未被覆盖的取值序列的一段,如果存在,则将这一段所在未被覆盖的取值序列的下一个值放到新生成的测试数据中对应的位置。如果经过第一个过程,新的测试数据中有的参数已经选取了取值,则对没有选取取值的参数随机赋一个满足约束一致性的值。如果在新的测试数据中全部参数都没有选取取值,则进行第二个过程。
在第二个过程中,将联合覆盖数组中最后一条测试数据中的每个参数的取值作为一个树的根节点,该节点的子节点为该值可以转移到的取值。在树不断壮大的过程中,直到某一层子节点是未被覆盖的取值序列的起始值时停止该过程。在根节点到最后一层子节点的路径上的第二个节点,将作为新生成的测试数据中对应参数的取值。一旦某个参数已经选取了取值,则结束该过程并对没有选取取值的参数随机赋一个满足约束一致性的值。
(8)判断是否满足覆盖要求
根据是否存在次序约束,生成方法有两个结束条件:
当不存在次序约束时,联合覆盖数组两条测试数据之间将没有任何约束,可以在有限的搜索时间下覆盖全部的参数取值组合和取值序列。
当存在次序约束时,联合覆盖数组的任意两条测试数据间可能存在取值次序约束,限制了后续测试数据中取值的选取,搜索策略只有助于取值序列的覆盖,对取值组合而言,由于取值次序约束的存在,很难使取值组合中的每一个值在同一条测试数据中出现。因此,当染色体的适应值都为0时,即认为大部分的取值组合已经被覆盖,对剩余的取值组合将进行忽略。这样设定方法的结束条件可能会遗漏掉一些取值组合,但是可以节省一定的时间,而且由于取值次序约束的存在,并不一定能够保证理论上所有的取值组合一定会出现。
具体实施方式二:
本实施方式所述的一种基于分类树的测试数据自动生成系统,所述系统用于执行一种基于分类树的测试数据自动生成方法。
本实施方式所述的系统为测试数据自动生成提供了一种工具,该工具为测试人员提供了界面化测试数据设计功能,支持用户编辑复杂的约束;支持高覆盖率的联合覆盖准则的测试数据的自动生成,该准则目前支持常见的组合约束和次序约束。该系统大大地提高了测试数据生成的效率,同时提供的高覆盖率的覆盖准则为高覆盖率测试提供了必要的保证。
目前,该系统已经应用于某型号导弹综控机的现场测试过程中,能够实现对被测系统高覆盖率、快速的系统级测试。
本发明还可有其它多种实施例,在不背离本发明精神及其实质的情况下,本领域技术人员当可根据本发明作出各种相应的改变和变形,但这些相应的改变和变形都应属于本发明所附的权利要求的保护范围。

Claims (8)

1.一种基于分类树的测试数据自动生成方法,其特征在于,包括以下步骤:
利用带有分类树的测试数据表对待测试的数据进行表示;基于测试数据的约束描述和覆盖准则,采用遗传算法生成联合覆盖数组,包括以下步骤:
(1)参数初始化
参数初始化包括两个部分:
1.1、对遗传算法本身的参数进行初始化;
1.2、生成测试数据过程的初始化:
采用“Map”数据结构存储组合约束,组合约束对应“Map”的键“Key”表示参数的组合,组合约束对应“Map”的值“Value”是一个存储了参数约束取值组合对应索引的数组;存储约束时,非约束的索引不能出现;
目标取值组合使用“Map”数据结构进行存储,目标取值组合“Map”中的每一个参数组合“Key”对应的“Value”数组中的每一个索引都需要进行约束一致性验证,通过约束一致性验则是目标取值组合;
利用整数集表示任意t个参数的全部取值组合,已知每个取值对应参数的取值个数集/>任意一个取值组合/>对应的索引index的求解过程为:
(1.1)令
(1.2)令j'从2取到t,循环执行
(1.3)index即为取值组合对应的索引;
其中,为每个取值对应参数的取值个数;
取值序列表采用“Map”结构,取值序列对应“Map”的键“Key”表示参数的取值序列,取值序列对应“Map”的值“Value”是一个存储了参数取值序列对应索引的一个数组;存储取值序列时,如果其中的取值序列不满足取值次序约束一致性,则其对应的索引不能出现在“Value”中;
每一条测试数据的组合适应值为覆盖未被覆盖的取值组合的个数,序列适应值为当前测试数据与当前测试数据之前的ts-1条测试数据一起覆盖的未被覆盖的取值序列的个数;一条测试数据的适应值是组合适应值和序列适应值两者之和;ts为联合覆盖数组的序列力度;
(2)生成候选解集
为M个新的染色体中每一个基因进行初始化,初始值从第ij'个参数的取值区间中随机选择;
(3)选择
从M个染色体中选出适应值大的M/2个染色体作为自然选择的结果;
(4)交叉
将选择出的M/2个染色体平均分为两组;每组对应位置的染色体之间进行交叉,对于任一对需要交叉的染色体对,其中每个对应位置的基因按照交叉概率Pc进行交叉;
(5)变异
对于交叉之后的染色体,其中第ij'基因从中随机变异一个新的值,并按照变异概率Pm进行选择;
(6)判断是否满足最大覆盖
如果在进化过程中的适应值为则提前跳出进化过程;k为联合覆盖数组的列数;tc为联合覆盖数组的组合力度;
(7)搜索策略
在染色体完成进化过程之后,如果其中的最优的染色体的适应值为0,使用搜索策略进行后续的寻优过程;如果最优个体不满足最大覆盖,则判断是否达到最大迭代次数,如果没有达到返回步骤(3),如果达到最大迭代次数也使用搜索策略进行后续的寻优过程;
搜索策略将生成一条测试数据并放入联合覆盖数组中,该条测试数据中每个参数对应的取值,与该取值前面或后面的测试数据中对应参数的取值构成的取值路径中,能够覆盖未被覆盖的取值序列;根据每个参数的取值情况的不同,搜索策略将具体分为如下两个过程:
在第一个过程中,搜索策略对联合覆盖数组中的最后一条测试数据到倒数第ts-1条测试数据进行检查,检查从倒数第r,1≤r≤ts-1,条测试数据到倒数第一条测试数据中,是否存在未被覆盖的取值序列的一段,如果存在,则将这一段所在未被覆盖的取值序列的下一个值放到新生成的测试数据中对应的位置;如果经过第一个过程,新的测试数据中有的参数已经选取了取值,则对没有选取取值的参数随机赋一个满足约束一致性的值;如果在新的测试数据中全部参数都没有选取取值,则进行第二个过程;
在第二个过程中,将联合覆盖数组中最后一条测试数据中的每个参数的取值作为一个树的根节点,该根节点的子节点为该值能够转移到的取值;在树不断壮大的过程中,直到某一层子节点是未被覆盖的取值序列的起始值时停止该过程;在根节点到最后一层子节点的路径上的第二个节点,将作为新生成的测试数据中对应参数的取值;一旦某个参数已经选取了取值,则结束该过程并对没有选取取值的参数随机赋一个满足约束一致性的值;
(8)判断是否满足覆盖要求
当不存在次序约束时,联合覆盖数组两条测试数据之间将没有任何约束,在搜索时间下覆盖全部的参数取值组合和取值序列,结束生成测试数据。
2.根据权利要求1所述的一种基于分类树的测试数据自动生成方法,其特征在于,当存在次序约束时,需要在步骤1.2所述生成测试数据过程的初始化中对存在次序约束进行初始化,并在步骤(8)中按照当存在次序约束时的情况下判断是否满足覆盖要求结束生成测试数据,具体过程包括以下步骤:
初始化:次序约束也采用“Map”结构,次序约束对应“Map”的键“Key”表示参数的取值序列,次序约束对应“Map”的值“Value”是一个存储了参数取值序列对应索引的一个数组;存储约束次序时,非次序约束的索引不能出现在“Value”中;
判断是否满足覆盖要求对结束条件:当染色体的适应值都为0时,对剩余的取值组合将进行忽略;结束生成测试数据。
3.根据权利要求1所述的一种基于分类树的测试数据自动生成方法,其特征在于,步骤1.1所述对遗传算法本身的参数进行初始化的过程中,染色体M=1000,进化代数为N=20。
4.根据权利要求1所述的一种基于分类树的测试数据自动生成方法,其特征在于,步骤(2)生成候选解集的过程中,在每个基因随机初始化后,从中随机选取一个未被覆盖的目标取值组合放入基因中,使基因的初始适应值至少为1。
5.根据权利要求4所述的一种基于分类树的测试数据自动生成方法,其特征在于,步骤(4)所述的Pc=0.5。
6.根据权利要求5所述的一种基于分类树的测试数据自动生成方法,其特征在于,步骤(5)所述Pm=0.5。
7.根据权利要求1至6之一所述的一种基于分类树的测试数据自动生成方法,其特征在于,所述测试数据的覆盖准则构建过程如下:
设A是一个n×k的矩阵,矩阵中第i列元素都取自[0,vi-1],vi第i个参数Pi的取值数量;参数Pi为实际被测系统的物理参数;矩阵的每一行对应一条测试数据,如果A满足下面两个条件:
①每个tc维交互都被矩阵中的某一行所对应的测试数据所覆盖,即对任意tc维交互至少存在一行r,使得/>其中A[r,ij]表示A中第r行、第ij列的元素为参数值/>
②任意列i中的任意ts个取值,1≤i≤k,都被矩阵中任意ts个相邻行所覆盖,即存在相邻的ts行/>使得/>其中j=1,2,...,ts
则称A是一个联合覆盖数组,记为UCA(n;tc,ts,v1,v2,...,vk,C),称tc为联合覆盖数组的组合力度,ts为联合覆盖数组的序列力度,C是CCTL描述的约束集。
8.一种基于分类树的测试数据自动生成系统,其特征在于,所述系统用于执行权利要求1至7之一所述的一种基于分类树的测试数据自动生成方法。
CN202011641866.2A 2020-12-31 2020-12-31 一种基于分类树的测试数据自动生成方法及系统 Active CN112699039B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202011641866.2A CN112699039B (zh) 2020-12-31 2020-12-31 一种基于分类树的测试数据自动生成方法及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202011641866.2A CN112699039B (zh) 2020-12-31 2020-12-31 一种基于分类树的测试数据自动生成方法及系统

Publications (2)

Publication Number Publication Date
CN112699039A CN112699039A (zh) 2021-04-23
CN112699039B true CN112699039B (zh) 2024-04-16

Family

ID=75514147

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202011641866.2A Active CN112699039B (zh) 2020-12-31 2020-12-31 一种基于分类树的测试数据自动生成方法及系统

Country Status (1)

Country Link
CN (1) CN112699039B (zh)

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103812729A (zh) * 2014-02-19 2014-05-21 北京理工大学 一种网络协议模糊测试方法和装置
CN104765690A (zh) * 2015-04-22 2015-07-08 哈尔滨工业大学 基于模糊遗传算法的嵌入式软件测试数据生成方法
CN106095692A (zh) * 2016-08-12 2016-11-09 哈尔滨工业大学 嵌入式软件的单参数事件序列测试数据生成方法
US20190087313A1 (en) * 2018-04-19 2019-03-21 Beihang University Construction method of test case constraint control technology based on epigenetics

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103812729A (zh) * 2014-02-19 2014-05-21 北京理工大学 一种网络协议模糊测试方法和装置
CN104765690A (zh) * 2015-04-22 2015-07-08 哈尔滨工业大学 基于模糊遗传算法的嵌入式软件测试数据生成方法
CN106095692A (zh) * 2016-08-12 2016-11-09 哈尔滨工业大学 嵌入式软件的单参数事件序列测试数据生成方法
US20190087313A1 (en) * 2018-04-19 2019-03-21 Beihang University Construction method of test case constraint control technology based on epigenetics

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
2维约束覆盖数组最小规模下限的提升;盛云龙;魏长安;姜守达;付尧;赵伟志;;哈尔滨工业大学学报;20200510(05);全文 *
基于自适应分组的大规模路径覆盖测试数据进化生成;巩敦卫;张婉秋;;控制与决策;20110715(07);全文 *

Also Published As

Publication number Publication date
CN112699039A (zh) 2021-04-23

Similar Documents

Publication Publication Date Title
CN110399730B (zh) 智能合约漏洞的检查方法、系统及介质
Wu et al. A discrete particle swarm optimization for covering array generation
Goloboff et al. TNT, a free program for phylogenetic analysis
Bouckaert et al. WEKA manual for version 3-6-2
CN103049163B (zh) 用户界面智能显示控制方法和装置
CN109840206A (zh) 数据测试方法、装置、终端及存储介质
D'Emidio et al. Characterizing the computational power of mobile robots on graphs and implications for the Euclidean plane
CN105045715B (zh) 基于编程模式和模式匹配的漏洞聚类方法
CN110287088B (zh) 一种基于动态ui模型的自动化测试方法
CN108959067A (zh) 搜索引擎的测试方法、装置及计算机可读存储介质
CN116048958B (zh) 医疗机器人控制软件测试数据的生成方法、注入方法
US20100235143A1 (en) Method for the generation of analytical redundancy relations for system diagnostics
My et al. Survey on mutation-based test data generation
CN112699039B (zh) 一种基于分类树的测试数据自动生成方法及系统
Zhu et al. Improved evolutionary generation of test data for multiple paths in search-based software testing
CN109960487A (zh) 一种抽取对象的方法和装置
Doungsa-Ard et al. GA-based automatic test data generation for UML state diagrams with parallel paths
CN111898134B (zh) 基于LSTM和BiLSTM的智能合约漏洞检测方法和装置
US10019482B2 (en) Context based access path selection
Yuan et al. Towards dynamic adaptive automated test generation for graphical user interfaces
JP2023123636A (ja) ハイパーパラメータチューニング方法、装置及びプログラム
CN114297063B (zh) 针对源代码的自动化形式化建模与验证的方法与系统
CN107992526B (zh) 主播推荐方法、存储设备及计算机设备
Zhou et al. Deeptle: Learning code-level features to predict code performance before it runs
CN112948357B (zh) 一种面向多模数据库OrientDB的调优系统及其构建方法

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant