CN103279415B - 基于组合测试的嵌入式软件测试方法 - Google Patents
基于组合测试的嵌入式软件测试方法 Download PDFInfo
- Publication number
- CN103279415B CN103279415B CN201310201401.9A CN201310201401A CN103279415B CN 103279415 B CN103279415 B CN 103279415B CN 201310201401 A CN201310201401 A CN 201310201401A CN 103279415 B CN103279415 B CN 103279415B
- Authority
- CN
- China
- Prior art keywords
- data
- test
- mutual
- test data
- software
- 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
Links
Landscapes
- Debugging And Monitoring (AREA)
Abstract
基于组合测试的嵌入式软件测试方法,属于软件测试领域,本发明为了解决目前嵌入式软件测试中存在的测试覆盖率低,测试效率差的问题。该方法为:首先根据待测软件的接口类型、数据帧格式、数据元素类型、数据元素长度和数据元素的信号范围编辑数据通讯协议;再根据待测软件SUT的需求规格说明及相应文档,构建虚拟模型;采用基于替换扰动的组合测试数据生成算法生成组合测试数据,采用二维扩展的方式进行测试数据集的构造并生成组合测试数据集A;最后将步骤三已生成的测试数据分别注入到步骤二所构建的虚拟模型和实际被测软件中,并将得到的测试结果进行对比,将引发二者结果不同的测试数据进行分析,进而得到测试结论。本发明用于测试软件。
Description
技术领域
本发明涉及一种软件测试方法,属于软件测试领域。
背景技术
软件测试是当前软件工程研究的热点所在,其中包括测试用例的自动生成、执行及测试结果的动态分析。与其他形式的软件相比,嵌入式软件具有实时性、专用性及硬件依赖性等特点,使得对嵌入式软件的功能测试显得尤为重要。其输入输出都是通过硬件接口实现,使得自动化测试技术能够有效的应用到嵌入式软件测试中,自动生成测试用例,通过硬件进口进行输入,同样将输出结果通过硬件接口读出,进行分析,以达到快速、有效测试的目的。
但是,目前对于嵌入式软件的测试还存在很多不足,普遍采用的嵌入式软件测试工具大多数都是基于软件程序结构的,主要依靠代码审查,程序插桩,分支覆盖测试等方法实现,而对于嵌入式软件的功能测试,所采用的测试大多是通过等价类划分、边界值分析等方法根据测试人员的经验生成若干测试用例,通过硬件接口进行输入,测试流程相对简单,同时缺乏有效的测试结果判定方法,测试所生成的大量数据需要测试人员逐一进行对比分析,判断是否正确。这种巨大的工作量很难人工完成,因此设计的测试用例数量被大幅度缩减,最终导致测试不完全。
组合测试是一种科学有效的软件测试方法。该方法能够快速有效地检测软件***中各个因素之间的相互作用对***产生的影响。假定待测***T有k个输入参数,每个参数有不同的输入域Di,|Di|=vi,(k≥i≥1),即每个输入参数有vi个互异的取值,完全测试这个***需要个测试用例。组合测试所研究的内容即为从中寻找一个合理有效的子集作为测试数据集,以达到对海量测试数据进行优化约减的目的。
发明内容
本发明目的是为了解决目前嵌入式软件测试中存在的测试覆盖率低,测试效率差的问题,提供了一种基于组合测试的嵌入式软件测试方法。
本发明所述基于组合测试的嵌入式软件测试方法,该方法的实现步骤为:
步骤一、待测软件software under test,简称SUT,根据该待测软件的接口类型、数据帧格式、数据元素类型、数据元素长度和数据元素的信号范围信息定义数据通讯协议;其中,数据元素的信号范围作为待测软件SUT的测试用例生成的依据;
步骤二、根据待测软件SUT的需求规格说明及相应文档,构建虚拟模型;
步骤三、根据步骤一中所述的数据通讯协议中数据元素的信号范围,采用基于替换扰动的组合测试数据生成算法生成组合测试数据,采用二维扩展的方式进行测试数据集的构造并生成组合测试数据集A;
步骤四、将步骤三已生成的组合测试数据分别注入到步骤二所构建的虚拟模型和实际被测软件中,并将得到的测试结果进行对比,将引发二者结果不同的测试数据进行分析,进而得到测试结论。
步骤一中根据被测设备接口类型、数据帧格式、数据元素类型、数据元素长度和数据元素的信号范围编辑数据通讯协议的具体方法为:
首先,根据GJB5439-2005总线协议制定数据通讯协议的整体结构;该数据通讯协议的整体结构是采用数据块、数据元素和数据位三级数据结构对数据接口进行的统一描述的;所述数据块包括:规范号、信号名称、版本、类型、源、目标、符合标准、传输类型、中断、***方式、字数、允许重写、更新周期、允许最大延迟、数据元素数组、帧头数组、帧尾数组、设备子地址和备注;其中,规范号、信号名称、版本、类型、源、目标、符合标准、传输类型、中断、***方式、允许重写和备注的数据类型为字符型,字数、更新周期、允许最大延迟和设备子地址的数据类型为整型,数据元素数组、帧头数组和帧尾数组的数据类型为自定义类型;所述数据元素包括:规范号、信号名称、源、分布、符合标准、信号格式、更新速率、单位、信号范围、分辨率、精度、比例尺、信号长度、符号位标识、处理方式、位定义数组、二进制数据、物理数据和备注;其中,规范号、信号名称、源、分布、符合标准、信号格式、单位、信号范围、符号位标识、处理方式和备注的数据类型为字符型,更新速率和信号长度的数据类型为整型,分辨率、精度、比例尺和物理数据的数据类型为双精度型,位定义数组为自定义类型;
所述数据位包括元素规范号、元素位、位组合值、位组合值说明和标志,且上述的数据类型均为字符型;
其中,所述数据元素是数据块的组成部分,数据位是数据元素的组成部分;
每一个数据元素代表被测软件SUT的一个输入参数,每一个数据块包含相应的数据元素及帧头帧尾,根据数据块协议所规定的顺序排列各个数据元素的取值,并加上相应的帧头帧尾,由此所生成的一帧数据即为被测***的一条测试数据T,且所述每个数据元素的取值与被测软件SUT的相应输入参数的取值是一一对应的。
本发明的优点:本发明将组合测试方法引入到嵌入式软件测试中,有效的减少了测试用例的数量;同时采用模型比较的方法,能够快速准确的得到软件的测试结果,有效的提高了嵌入式软件的测试效率。
附图说明
图1是本发明的方法流程图;
图2是本发明具体实施方式四中的步骤三二的组合测试数据生成算法流程图。
具体实施方式
具体实施方式一:下面结合图1说明本实施方式,本实施方式所述基于组合测试的嵌入式软件测试方法,该方法的实现步骤为:
步骤一、待测软件software under test,简称SUT,根据该待测软件的接口类型、数据帧格式、数据元素类型、数据元素长度和数据元素的信号范围信息定义数据通讯协议;其中,数据元素的信号范围作为待测软件SUT的测试用例生成的依据;
步骤二、根据待测软件SUT的需求规格说明及相应文档,构建虚拟模型;
步骤三、根据步骤一中所述的数据通讯协议中数据元素的信号范围,采用基于替换扰动的组合测试数据生成算法生成组合测试数据,采用二维扩展的方式进行测试数据集的构造并生成组合测试数据集A;
步骤四、将步骤三已生成的测试数据分别注入到步骤二所构建的虚拟模型和实际被测软件中,并将得到的测试结果进行对比,将引发二者结果不同的测试数据进行分析,进而得到测试结论。
具体实施方式二:下面结合图1说明本实施方式,本实施方式对实施方式一作进一步说明,本实施方式所述的步骤一中根据被测设备接口类型、数据帧格式、数据元素类型、数据元素长度和数据元素的信号范围编辑数据通讯协议的具体方法为:
首先,根据GJB5439-2005总线协议制定数据通讯协议的整体结构;该数据通讯协议的整体结构是采用数据块、数据元素和数据位三级数据结构对数据接口进行的统一描述的;所述数据块包括:规范号、信号名称、版本、类型、源、目标、符合标准、传输类型、中断、***方式、字数、允许重写、更新周期、允许最大延迟、数据元素数组、帧头数组、帧尾数组、设备子地址和备注;其中,规范号、信号名称、版本、类型、源、目标、符合标准、传输类型、中断、***方式、允许重写和备注的数据类型为字符型,字数、更新周期、允许最大延迟和设备子地址的数据类型为整型,数据元素数组、帧头数组和帧尾数组的数据类型为自定义类型;所述数据元素包括:规范号、信号名称、源、分布、符合标准、信号格式、更新速率、单位、信号范围、分辨率、精度、比例尺、信号长度、符号位标识、处理方式、位定义数组、二进制数据、物理数据和备注;其中,规范号、信号名称、源、分布、符合标准、信号格式、单位、信号范围、符号位标识、处理方式和备注的数据类型为字符型,更新速率和信号长度的数据类型为整型,分辨率、精度、比例尺和物理数据的数据类型为双精度型,位定义数组为自定义类型;
所述数据位包括元素规范号、元素位、位组合值、位组合值说明和标志,且上述的数据类型均为字符型;
其中,所述数据元素是数据块的组成部分,数据位是数据元素的组成部分;
每一个数据元素代表被测软件SUT的一个输入参数,每一个数据块包含相应的数据元素及帧头帧尾,根据数据块协议所规定的顺序排列各个数据元素的取值,并加上相应的帧头帧尾,由此所生成的一帧数据即为被测***的一条测试数据T,且所述每个数据元素的取值与被测软件SUT的相应输入参数的取值是一一对应的。
具体实施方式三:下面结合图1说明本实施方式,本实施方式对实施方式一作进一步说明,本实施方式所述的步骤二中虚拟模型的构建过程为:
根据软件的需求规格说明,采用Matlab软件构建的虚拟模型,具体构建过程如下:
首先,建立基本模型:利用matlab提供的simulink模型开发环境建立模型文件,并设定输入输出参数,虚拟模型的构造过程将被测软件SUT按照功能抽象成一个I/O模型F:Y→U;其中,F为被测软件SUT所抽象成的虚拟模型;Y是输入变量所有可能取值所构成的向量空间,U是输出变量构成的向量空间,利用等价类划分对函数F进行划分为:
其中,i为正整数;Y=∪Yi,且j为正整数;将该函数F作为被测软件SUT的虚拟模型;
然后,设定模型的输入输出接口:设待测软件共有k个输入参数和s个输出参数;其中,k,s均为正整数;即建立模型的输入输出接口:Y={y1,y2…,yk},U={u1,u2…,us},并设定各输入参数的取值范围V={v1,v2…,vk},对于任意一个输入参数的因素yj(1≤j≤k)均有vj个可能的取值;
设定函数行为:将函数F:Y→U表示为若干各更加简单的函数f1,f2,…,fs,用于描述每个输出参数和相应输入参数之间的关系,即:
最后进行模型编译:基本模型函数F:Y→U建立完成后即编译形成matlab执行文件,同时,根据测试***的需要,自动生成面向目标的代码,以生成实际测试过程中所需要的虚拟软件模型。
具体实施方式四:下面结合图1和2说明本实施方式,本实施方式对实施方式一或实施方式三作进一步说明,本实施方式所述的步骤三中所述采用基于替换扰动的组合测试数据生成算法生成组合测试数据,然后利用二维扩展策略,并结合贪心算法的思想生成组合测试数据集的方法为:
步骤三一、采用基于替换扰动的组合测试数据生成算法生成组合测试数据:
对k个参数的待测***SUT,设该k个参数分别有v1,v2,…,vk个可能取值,即,对于任意参数i(1≤i≤k)有vi个可能的取值,用0,1,…,vi-1来表示,用记号[0,vi-1]表示集合{0,1,…,vi-1};同时,设各个参数之间取值均相互独立;
同时定义如下内容:
定义交互I、交互集Ht和顶点设集合 其中参数ij互不相同,当时,则称这个集合I为一个t维交互I,称集合EI={i1,i2,…,it}为交互I对应的参数集,集合 为当前***的全部t维交互集;一维交互也称为顶点,简记为
定义测试数据T:设k维向量T=(T1,T2,…,Tk),其中,Ti∈[0,vi-1](i=1,2,…,k),则称这个k维向量为参数i取值为Ti的测试数据T;
若一条测试数据T的第ij个取值为即则称这条测试数据覆盖了t维交互定义测试数据T所覆盖的全部t维交互所组成的集合为HT,t;
定义覆盖数组MCA(n;t,(v1,v2,…,vk)):设A是一个n×k矩阵,矩阵中第i列元素都取自[0,vi-1],其中,1≤i≤k,矩阵A的每一行对应一条测试数据T,且满足每个t维交互都被矩阵A中的某一行所对应的测试数据T所覆盖,对于任意的t维交互 至少存在一行r,使得 则称矩阵A是一个t维覆盖数组,记为MCA(n;t,(v1,v2,…,vk)),t为覆盖数组的强度,使得MCA(n;t,(v1,v2,…,vk))存在的最小整数n称为覆盖数;
定义适应值计算函数:设当前已有的测试数据集合为A,未被A覆盖的全部t维交互所组成的集合为Q,即对于测试数据T,其适应值计算函数定义为:
f(T)=|{HT,t∩Q}|;
定义顶点未完成度:对顶点其顶点未完成度定义为未被A覆盖的全部t维交互中顶点出现的次数,即:
定义交互未完成度:对于未被当前已有测试数据集A覆盖的t维交互其交互未完成度W(I)为该交互所包含的全部顶点的未完成度之和,即:
由上式可知,交互未完成度用于描述某一t维交互中各顶点的未覆盖程度,未完成度越高,所增加的新测试数据时,选择该交互的优先级也就越高;
步骤三二、采用二维扩展的方式进行测试数据集A的构造,构造测试数据集A的过程如下:
步骤Ⅰ、对待测软件SUT的全部参数按照其值域的大小降序排列,然后生成前v1×v2×…×vt个测试数据并确定每个数据的前t个参数的取值,以完成对前t个参数的全部覆盖;
步骤Ⅱ、对于每条测试数据,根据步骤三一所述的顶点未完成度确定其他(k-t)个参数的取值:对于每个参数均选择顶点未完成度最大的取值作为当前值,生成一条完整的待选测试数据u;
步骤Ⅲ、依次选择未完成交互集Q中各t维交互对u中相应位置数据予以替换扰动:选择Q中交互未完成度最高的t维交互,替换待选测试数据u中相应参数的取值,生成新的测试数据u′,计算该新的测试数据u′的适应值,若f(u′)>f(u),则用u′取代u,然后选择此时Q中的下一条交互未完成度最高的t维交互并进行重复替代过程;
若f(u′)≤f(u),则不作任何动作,继续选择Q中的下一条交互未完成度最高的t维交互,若此时的生成新的测试数据u1′,计算该新的测试数据u1′的适应值,若f(u1′)>f(u1),重复替代过程,直至遍历Q中全部交互,完成二维扩展的水平扩展阶段,将生成全部v1×v2×…×vt条测试数据,并将其输出至测试数据集A;
步骤Ⅳ、判断当前测试数据集A是否已完成对全部t维交互的覆盖,若否,则执行步骤Ⅴ;若是,则执行步骤Ⅵ;
步骤Ⅴ、继续进行垂直扩展,增加新的测试数据u,利用顶点未完成度确定全部k个输入参数的取值,对于每个参数均选择顶点未完成度最大的取值作为当前值,生成当前待选测试数据u,然后执行步骤Ⅲ;
步骤Ⅵ、若当前测试数据集已完成对全部t维交互的覆盖,则结束算法,生成的测试数据集A即为覆盖数组,记为MCA(n;t,(v1,v2,…,vk))。
具体实施方式五:下面结合图1说明本实施方式,本实施方式对实施方式一作进一步说明,本实施方式所述步骤四、将步骤三已生成的测试数据分别注入到步骤二所构建的虚拟模型和实际被测软件中,并将得到的测试结果进行对比,将引发二者结果不同的测试数据进行分析,进而得到测试结论的具体方法为:
若对于一条测试数据T,分别注入到步骤二所述的构建的虚拟模型中和实际被测软件中,将二者所得到的测试结果进行对比,若二者的执行结果相同,则认为测试用例执行正确,记为T→True(SUT);
否则认为该测试用例引发了软件故障,记为T→False(SUT);
定义错误交互,极小错误交互:若存在交互I,对于任意测试数据T,必满足T→False(SUT),则称交互I为该待测***的一个错误交互;
若对于一个错误交互,任意真子集均不是错误交互,则称其为***的一个极小错误交互;
***的全部极小错误交互所组成的集合称为极小错误交互集,记为Π,其中,若Π中每个错误交互均有t个元素,则该集合为t维极小错误交互集,记为Πt;若Π中每个错误交互所包含元素数均不大于t个,则该错误交互集记为
采用基于可能错误交互集(Set of possible Fauty Intersection SPFI)的组合测试错误定位算法的主要步骤如下:
步骤A、初始化测试过程:初始化SPFI=Ht,利用已生成的t维覆盖数组MCA(n;t,(v1,v2,…,vk))对该待测软件SUT进行测试;
步骤B、生成SPFI:对于其中每一条测试数据T,若T→True(SUT),则否则将T加入集合M中,其中,集合M为引发错误的测试用例组成的集合,其初始值为空;当MCA(n;t,(v1,v2,…,vk))中全部测试用例执行完毕后,若则必有
步骤C、故障用例分析:依次选择集合M中的每条测试用例,遍历其覆盖的全部t维交互,并对每个交互重新生成新的测试用例进行测试,以定位其中的错误交互并将该交互从SPFI中删除,移入中;对于已确定的正确交互,则直接从SPFI中删除;重复该过程,直至
步骤D、重新生成测试数据集A:若则完成错误定位过程;否则生成能够覆盖SPFI中全部交互的测试用例集M′,并且满足将M′赋值给M,重复步骤C;针对SPFI中的剩余交互,生成新的测试用例集进行重新测试,直至完成全部测试用例的定位过程,所生成的错误交互集即为最终测试结论。
Claims (4)
1.基于组合测试的嵌入式软件测试方法,该方法的实现步骤为:
步骤一、待测软件software under test,简称SUT,根据该待测软件的接口类型、数据帧格式、数据元素类型、数据元素长度和数据元素的信号范围信息定义数据通讯协议;其中,数据元素的信号范围作为待测软件SUT的测试用例生成的依据;
步骤二、根据待测软件SUT的需求规格说明及相应文档,构建虚拟模型;
步骤三、根据步骤一中所述的数据通讯协议中数据元素的信号范围,采用基于替换扰动的组合测试数据生成算法生成组合测试数据,采用二维扩展的方式进行测试数据集的构造并生成组合测试数据集A;
步骤四、将步骤三已生成的组合测试数据分别注入到步骤二所构建的虚拟模型和实际被测软件中,并将得到的测试结果进行对比,将引发二者结果不同的测试数据进行分析,进而得到测试结论;
其特征在于,所述步骤一中根据被测设备接口类型、数据帧格式、数据元素类型、数据元素长度和数据元素的信号范围编辑数据通讯协议的具体方法为:
首先,根据GJB5439-2005总线协议制定数据通讯协议的整体结构;该数据通讯协议的整体结构是采用数据块、数据元素和数据位三级数据结构对数据接口进行的统一描述的;所述数据块包括:规范号、信号名称、版本、类型、源、目标、符合标准、传输类型、中断、***方式、字数、允许重写、更新周期、允许最大延迟、数据元素数组、帧头数组、帧尾数组、设备子地址和备注;其中,规范号、信号名称、版本、类型、源、目标、符合标准、传输类型、中断、***方式、允许重写和备注的数据类型为字符型,字数、更新周期、允许最大延迟和设备子地址的数据类型为整型,数据元素数组、帧头数组和帧尾数组的数据类型为自定义类型;所述数据元素包括:规范号、信号名称、源、分布、符合标准、信号格式、更新速率、单位、信号范围、分辨率、精度、比例尺、信号长度、符号位标识、处理方式、位定义数组、二进制数据、物理数据和备注;其中,规范号、信号名称、源、分布、符合标准、信号格式、单位、信号范围、符号位标识、处理方式和备注的数据类型为字符型,更新速率和信号长度的数据类型为整型,分辨率、精度、比例尺和物理数据的数据类型为双精度型,位定义数组为自定义类型;
所述数据位包括元素规范号、元素位、位组合值、位组合值说明和标志,且上述的数据类型均为字符型;
其中,所述数据元素是数据块的组成部分,数据位是数据元素的组成部分;
每一个数据元素代表被测软件SUT的一个输入参数,每一个数据块包含相应的数据元素及帧头帧尾,根据数据块协议所规定的顺序排列各个数据元素的取值,并加上相应的帧头帧尾,由此所生成的一帧数据即为被测***的一条测试数据T,且所述每个数据元素的取值与被测软件SUT的相应输入参数的取值是一一对应的。
2.根据权利要求1所述基于组合测试的嵌入式软件测试方法,其特征在于,所述步骤二中虚拟模型的构建过程为:
根据软件的需求规格说明,采用Matlab软件构建的虚拟模型,具体构建过程如下:
首先,建立基本模型:利用matlab提供的simulink模型开发环境建立模型文件,并设定输入输出参数,虚拟模型的构造过程将被测软件SUT按照功能抽象成一个I/O模型F:Y→U;其中,F为被测软件SUT所抽象成的虚拟模型;Y是输入变量所有可能取值所构成的向量空间,U是输出变量构成的向量空间,利用等价类划分对函数F进行划分为:
其中,i为正整数;Y=∪Yi,且j为正整数;将该函数F作为被测软件SUT的虚拟模型;
然后,设定模型的输入输出接口:设待测软件共有k个输入参数和s个输出参数;其中,k,s均为正整数;即建立模型的输入输出接口:Y={y1,y2…,yk},U={u1,u2…,us},并设定各输入参数的取值范围V={v1,v2…,vk},对于任意一个输入参数的因素yj,1≤j≤k,均有vj个可能的取值;
设定函数行为:将函数F:Y→U表示为若干个更加简单的函数f1,f2,…,fs,用于描述每个输出参数和相应输入参数之间的关系,即:
最后进行模型编译:基本模型函数F:Y→U建立完成后即编译形成matlab执行文件,同时,根据测试***的需要,自动生成面向目标的代码,以生成实际测试过程中所需要的虚拟软件模型。
3.根据权利要求2所述基于组合测试的嵌入式软件测试方法,其特征在于,所述步骤三中所述采用基于替换扰动的组合测试数据生成算法生成组合测试数据,采用二维扩展的方式进行测试数据集的构造并生成组合测试数据集A的方法为:
步骤三一、采用基于替换扰动的组合测试数据生成算法生成组合测试数据:对k个参数的待测***SUT,设该k个参数分别有v1,v2,…,vk个可能取值,即,对于任意参数i,1≤i≤k,有vi个可能的取值,用0,1,…,vi-1来表示,用记号[0,vi-1]表示集合{0,1,…,vi-1};同时,设各个参数之间取值均相互独立;
同时定义如下内容:
定义交互I、交互集Ht和顶点设集合其中参数ij互不相同,当j=1,2,…,t时,则称这个集合I为一个t维交互I,称集合EI={i1,i2,…,it}为交互I对应的参数集,集合为当前***的全部t维交互集;一维交互也称为顶点,简记为
定义测试数据T:设k维向量T=(T1,T2,…,Tk),其中,Ti∈[0,vi-1],i=1,2,…,k,则称这个k维向量为参数i取值为Ti的测试数据T;
若一条测试数据T的第ij个取值为j=1,2,…,t,即则称这条测试数据覆盖了t维交互定义测试数据T所覆盖的全部t维交互所组成的集合为HT,t;
定义覆盖数组MCA(n;t,(v1,v2,…,vk)):设A是一个n×k矩阵,矩阵中第i列元素都取自[0,vi-1],其中,1≤i≤k,矩阵A的每一行对应一条测试数据T,且满足每个t维交互都被矩阵A中的某一行所对应的测试数据T所覆盖,对于任意的t维交互至少存在一行r,使得j=1,2,…,t,则称矩阵A是一个t维覆盖数组,记为MCA(n;t,(v1,v2,…,vk)),t为覆盖数组的强度,使得MCA(n;t,(v1,v2,…,vk))存在的最小整数n称为覆盖数;
定义适应值计算函数:设当前已有的测试数据集合为A,未被A覆盖的全部t维交互所组成的集合为Q,即Q={I|I∈Ht,且对于测试数据T,其适应值计算函数定义为:
f(T)=|{HT,t∩Q}|;
定义顶点未完成度:对顶点其顶点未完成度定义为未被A覆盖的全部t维交互中顶点出现的次数,即:
定义交互未完成度:对于未被当前已有测试数据集A覆盖的t维交互其交互未完成度W(I)为该交互所包含的全部顶点的未完成度之和,即:
由上式可知,交互未完成度用于描述某一t维交互中各顶点的未覆盖程度,未完成度越高,所增加的新测试数据时,选择该交互的优先级也就越高;
步骤三二、采用二维扩展的方式进行测试数据集A的构造,构造测试数据集A的过程如下:
步骤Ⅰ、对待测软件SUT的全部参数按照其值域的大小降序排列,然后生成前v1×v2×…×vt个测试数据并确定每个数据的前t个参数的取值,以完成对前t个参数的全部覆盖;
步骤Ⅱ、对于每条测试数据,根据步骤三一所述的顶点未完成度确定其他(k-t)个参数的取值:对于每个参数均选择顶点未完成度最大的取值作为当前值,生成一条完整的待选测试数据u;
步骤Ⅲ、依次选择未完成交互集Q中各t维交互对u中相应位置数据予以替换扰动:选择Q中交互未完成度最高的t维交互,替换待选测试数据u中相应参数的取值,生成新的测试数据u′,计算该新的测试数据u′的适应值,若f(u′)>f(u),则用u′取代u,然后选择此时Q中的下一条交互未完成度最高的t维交互并进行重复替代过程;
若f(u′)≤f(u),则不作任何动作,继续选择Q中的下一条交互未完成度最高的t维交互,若此时的生成新的测试数据u′,计算该新的测试数据u′的适应值,若f(u′)>f(u),重复替代过程,直至遍历Q中全部交互,完成二维扩展的水平扩展阶段,将生成全部v1×v2×…×vt条测试数据,并将其输出至测试数据集A;
步骤Ⅳ、判断当前测试数据集A是否已完成对全部t维交互的覆盖,若否,则执行步骤Ⅴ;若是,则执行步骤Ⅲ;
步骤Ⅴ、继续进行垂直扩展,增加新的测试数据u,利用顶点未完成度确定全部k个输入参数的取值,对于每个参数均选择顶点未完成度最大的取值作为当前值,生成当前待选测试数据u,然后执行步骤Ⅳ;
步骤Ⅵ、若当前测试数据集已完成对全部t维交互的覆盖,则结束算法,生成的测试数据集A即为覆盖数组,记为MCA(n;t,(v1,v2,…,vk))。
4.根据权利要求3所述基于组合测试的嵌入式软件测试方法,其特征在于,所述步骤四、将步骤三已生成的测试数据分别注入到步骤二所构建的虚拟模型和实际被测软件中,并将得到的测试结果进行对比,将引发二者结果不同的测试数据进行分析,进而得到测试结论的具体方法为:
若对于一条测试数据T,分别注入到步骤二所述的构建的虚拟模型中和实际被测软件中,将二者所得到的测试结果进行对比,若二者的执行结果相同,则认为测试用例执行正确,记为T→True(SUT);
否则认为该测试用例引发了软件故障,记为T→False(SUT);
定义错误交互,极小错误交互:若存在交互I,对于任意测试数据T,必满足T→False(SUT),则称交互I为该待测***的一个错误交互;
若对于一个错误交互,任意真子集均不是错误交互,则称其为***的一个极小错误交互;
***的全部极小错误交互所组成的集合称为极小错误交互集,记为Π,其中,若Π中每个错误交互均有t个元素,则该集合为t维极小错误交互集,记为Πt;若Π中每个错误交互所包含元素数均不大于t个,则该错误交互集记为
采用基于可能错误交互集Set of possible Faulty Intersection,即SPFI的组合测试错误定位算法的步骤如下:
步骤A、初始化测试过程:初始化SPFI=Ht,利用已生成的t维覆盖数组MCA(n;t,(v1,v2,…,vk))对该待测软件SUT进行测试;
步骤B、生成SPFI:对于其中每一条测试数据T,若T→True(SUT),则否则将T加入集合M中,其中,集合M为引发错误的测试用例组成的集合,其初始值为空;当MCA(n;t,(v1,v2,…,vk))中全部测试用例执行完毕后,若则必有
步骤C、故障用例分析:依次选择集合M中的每条测试用例,遍历其覆盖的全部t维交互,并对每个交互重新生成新的测试用例进行测试,以定位其中的错误交互并将该交互从SPFI中删除,移入中;对于已确定的正确交互,则直接从SPFI中删除;重复该过程,直至
步骤D、重新生成测试数据集A:若则完成错误定位过程;否则生成能够覆盖SPFI中全部交互的测试用例集M′,并且满足将M′赋值给M,重复步骤C;针对SPFI中的剩余交互,生成新的测试用例集进行重新测试,直至完成全部测试用例的定位过程,所生成的错误交互集即为最终测试结论。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310201401.9A CN103279415B (zh) | 2013-05-27 | 2013-05-27 | 基于组合测试的嵌入式软件测试方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310201401.9A CN103279415B (zh) | 2013-05-27 | 2013-05-27 | 基于组合测试的嵌入式软件测试方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103279415A CN103279415A (zh) | 2013-09-04 |
CN103279415B true CN103279415B (zh) | 2016-08-10 |
Family
ID=49061944
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310201401.9A Active CN103279415B (zh) | 2013-05-27 | 2013-05-27 | 基于组合测试的嵌入式软件测试方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103279415B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108038054A (zh) * | 2017-12-01 | 2018-05-15 | 大唐微电子技术有限公司 | 一种自动化测试方法及装置、计算机可读存储介质 |
Families Citing this family (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103544109B (zh) * | 2013-11-15 | 2016-08-17 | 大连交通大学 | 一种组合测试用例生成方法 |
CN103970654B (zh) * | 2014-04-30 | 2017-01-25 | 北京航空航天大学 | 一种软件可靠性虚拟测试方法 |
CN105224447B (zh) * | 2014-06-11 | 2017-11-14 | 联创汽车电子有限公司 | 发动机控制器软件诊断模块测试方法及测试*** |
CN104050086B (zh) * | 2014-07-01 | 2017-12-05 | 南京邮电大学 | 基于组合测试的错误定位方法 |
CN105468514B (zh) * | 2015-01-29 | 2019-04-16 | 深圳Tcl数字技术有限公司 | 基于数据组合的测试方法及装置 |
CN104765690B (zh) * | 2015-04-22 | 2017-10-27 | 哈尔滨工业大学 | 基于模糊遗传算法的嵌入式软件测试数据生成方法 |
CN106844193B (zh) * | 2016-12-17 | 2019-10-11 | 福建瑞之付微电子有限公司 | 一种嵌入式模块交叉测试的***化设计方法 |
CN108009082B (zh) * | 2017-11-22 | 2021-05-25 | 中国航空工业集团公司西安飞机设计研究所 | 一种基于飞行管理的组合测试用例生成方法 |
CN108132876B (zh) * | 2017-12-07 | 2021-03-19 | 中国航发控制***研究所 | 一种基于注入方式的嵌入式软件目标码单元测试方法 |
CN109254909B (zh) * | 2018-08-06 | 2021-11-23 | 四川蜀天梦图数据科技有限公司 | 一种测试用大图生成方法和*** |
CN109408378B (zh) * | 2018-09-30 | 2022-05-24 | 福建星瑞格软件有限公司 | 一种在大数据量下快速定位sql解析错误的测试方法及*** |
CN109254925B (zh) * | 2018-12-10 | 2021-10-26 | 北京中创为南京量子通信技术有限公司 | 测试数据帧生成方法及装置、软件测试方法及装置 |
CN111176991B (zh) * | 2019-12-23 | 2023-07-14 | 北京轩宇信息技术有限公司 | 一种嵌入式软件接口用例自动化生成方法 |
CN111159034B (zh) * | 2019-12-25 | 2024-01-02 | 中国人民解放军63920部队 | 软件的测试方法及装置 |
CN111382078B (zh) * | 2020-03-13 | 2023-04-28 | 龙婷 | 故障诊断模拟方法、装置、电子设备及存储介质 |
CN114064486B (zh) * | 2021-11-18 | 2023-07-18 | 北京京航计算通讯研究所 | 一种接口自动化测试方法 |
CN116302902A (zh) * | 2021-12-08 | 2023-06-23 | 中兴通讯股份有限公司 | 测试用例的生成方法、装置、电子设备和存储介质 |
CN117171056B (zh) * | 2023-11-02 | 2024-01-09 | 绿城科技产业服务集团有限公司 | 基于自动化接口的测试方法及装置 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101488028A (zh) * | 2009-02-24 | 2009-07-22 | 陈振华 | 一种测试can总线汽车仪表的***和方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6928393B2 (en) * | 2003-06-18 | 2005-08-09 | Microsoft Corporation | Method and system for supporting negative testing in combinatorial test case generators |
-
2013
- 2013-05-27 CN CN201310201401.9A patent/CN103279415B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101488028A (zh) * | 2009-02-24 | 2009-07-22 | 陈振华 | 一种测试can总线汽车仪表的***和方法 |
Non-Patent Citations (1)
Title |
---|
组合测试用例生成方法的研究与应用;李玉;《中国优秀硕士学位论文全文数据库》;20120715;第13-15、30-33页 * |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108038054A (zh) * | 2017-12-01 | 2018-05-15 | 大唐微电子技术有限公司 | 一种自动化测试方法及装置、计算机可读存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN103279415A (zh) | 2013-09-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103279415B (zh) | 基于组合测试的嵌入式软件测试方法 | |
CN103294594B (zh) | 一种基于测试的静态分析误报消除方法 | |
CN102385550B (zh) | 一种针对软件缺陷的检测方法 | |
JP2003345850A (ja) | フィルタリング型アプローチを使用する組合せ回路の検証方法 | |
CN103559122A (zh) | 基于程序行为切片的测试案例约减方法 | |
CN105868116A (zh) | 基于语义变异算子的测试用例生成和优化方法 | |
CN102169846A (zh) | 一种在集成电路晶圆测试过程中实现多维变量密码并行写入的方法 | |
CN105279196B (zh) | 测试脚本的生成方法和装置 | |
CN104615949B (zh) | 基于电源隔离的提高硬件木马检测分辨率的电路设计方法及对硬件木马的检测方法 | |
CN103218297B (zh) | 测试数据的筛选方法及装置 | |
CN104635144A (zh) | 一种不依赖基准曲线的硬件木马检测方法 | |
Zetterlund et al. | Framework for value of information analysis in rock mass characterization for grouting purposes | |
CN104536877A (zh) | 一种基于混合策略的测试数据生成方法 | |
CN104750608B (zh) | 一种程序中基于动态符号执行的自动错误定位方法 | |
CN103970654B (zh) | 一种软件可靠性虚拟测试方法 | |
CN103885341B (zh) | 基于汽车性能模拟器的性能分析***和方法 | |
CN102841963B (zh) | 元胞自动机模型尺度敏感性的探测方法 | |
CN104216703A (zh) | 嵌入式软件***程序的开发方法 | |
CN1319150C (zh) | 一种寄存器传输级可观测性覆盖分析与激励生成方法 | |
Nalla et al. | The art of semi-formal bug hunting | |
CN111581306B (zh) | 一种行车轨迹模拟方法及装置 | |
Simon et al. | Mode shape expansion for lively pedestrian bridges through kriging | |
CN104166744A (zh) | 验证视频算法寄存器传输级实现的方法和*** | |
CN101930398A (zh) | 基于Fuzzing技术的变异多维输入的软件脆弱性分析方法 | |
CN109388876A (zh) | 一种地下水溶质运移数值模拟并行加速方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |