一种支持约束处理的逐参数扩展优化方法
文献发布时间:2023-06-19 18:29:06
技术领域
本发明属于测试领域,具体涉及一种支持约束处理的逐参数扩展优化方法。
背景技术
实际工程中约束广泛存在,大多数系统所含约束的数量较多。约束按照表现形式可分为禁止约束、必须约束、数值约束、屏蔽约束,禁止约束按照作用效果又可分为非强制性约束和强制性约束。考虑到以下两个原因:①四种约束之间可以相互转换,禁止约束是最常见的一种约束形式,即某些参数的某些取值不能够同时出现,称其为禁止约束。②非强制性约束并不影响测试用例的检错能力,强制性约束的存在会影响到测试用例的检错能力,因此本发明基于强制性禁止约束。
对于参数间存在约束关系的待测系统,组合覆盖指标通常为:满足所有二维有效组合覆盖,工程上简称为基于约束的两两组合测试用例生成问题,或者两两组合有效测试用例生成问题,要求生成尽可能少的测试用例完成二维有效组合覆盖测试。
针对这类问题,近几年相关算法陆续被提出(例如CTWC、PSST_PC等),究其本质发现只是约束处理方法在不断地发展与成熟,组合测试算法与约束处理方法两者间的结合并没有突破性进展。也就是说,现有算法可以生成有效测试用例,但是它并没有深入分析约束集,更没有挖掘约束集的信息进一步优化算法,导致测试用例优化能力整体表现不佳,这直接影响到测试效率与测试成本。
对于市面上已经存在的支持约束处理的组合测试工具(例如PICT、ACTS、Jenny、pro-test等),其测试用例优化能力同样不理想。特别是对于执行代价较大的测试问题,即所谓的I类典型工程需求,执行一条测试用例将耗损大量资源,此时要求能更加精准地列出满足指标要求的有效测试用例。
发明内容
(一)要解决的技术问题
本发明要解决的技术问题是如何提供一种支持约束处理的逐参数扩展优化方法,以解决实际工程中基于约束的两两组合测试用例生成问题,解决如何生成尽可能少的测试用例来完成二维有效组合覆盖测试的问题。
(二)技术方案
为了解决上述技术问题,本发明提出一种支持约束处理的逐参数扩展优化方法,该方法包括如下步骤:
S1、计算全部最简禁止约束并更新CSset;
S2、初始化Mode为1;
S3、判断Mode是否为2或者为4,若是,则跳到S4,若否,则跳到S5;
S4、将所有参数的参数值按照和禁止约束集的相关度非递增排序;
S5、判断各参数的取值个数是否相等,若相等,则将各参数按照其和禁止约束集的相关度非递增排序;若不等,则将各参数按照其取值个数非递增排序;
S6、初始化测试用例集Ts
S7、初始化uncover为所有参数的所有取值的两两组合;
S8、更新uncover:删除包含任意一个二值约束的未覆盖配对;更新Ts
S9、从第三个参数开始进行水平扩展,每次扩展两个参数,当所有参数扩展完成后,跳到S13,否则跳到S10;假设当前扩展参数为p
S10、判断Mode是否为3或者为4,若是,则跳到S11,若否,则跳到S12;
S11、将Ts
S12、遍历Ts
S13、判断uncover是否为空集,若是,则跳到S15,若否,则跳到S14进行垂直扩展;
S14、采用改进后的AETG算法进行垂直扩展,更新Ts
S15、精简Ts
S16、判断Mode是否为4,若是,则跳到S18,若否,则跳到S17;
S17、Mode++,跳到S3;
S18、从Ts1、Ts2、Ts3、Ts4中选择一个规模最小的结果即为最终结果。
(三)有益效果
本发明提出一种支持约束处理的逐参数扩展优化方法,本发明一种支持约束处理的逐参数扩展优化方法具有如下特点:
1、不仅支持二值约束处理,而且支持多值约束处理;
2、支持隐含约束自动处理机制,无需人工计算隐含约束,大大减少测试人员的工作量,避免引入人为错误;
3、首次深入挖掘约束集,利用约束信息进一步优化组合测试方法,为之后优化约束组合测试算法提供一个新思路;
4、对于两两组合有效测试用例生成问题,算法具有很强的测试用例优化能力,和市面上已有工具相比,通常能生成最小测试用例集,尤其是对于参数个数或者参数取值个数较多的待测系统,其测试用例优化能力的优势得到了充分体现;
5、有效解决了实际工程中约束组合测试问题,具有良好的工程应用价值,大大提高了测试效率节省了测试成本。
附图说明
图1为生成全部最简禁止约束算法的流程图;
图2为改进后AETG算法的流程图;
图3为精简测试用例集算法的流程图;
图4为本发明支持约束处理的逐参数扩展优化方法的流程图。
具体实施方式
为使本发明的目的、内容和优点更加清楚,下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。
本发明的目的在于提供一种支持约束处理的逐参数扩展优化方法,对于实际工程中基于约束的两两组合测试用例生成问题,解决如何生成尽可能少的测试用例来完成二维有效组合覆盖测试的问题。
在介绍本发明一种支持约束处理的逐参数扩展优化方法之前,明确两个基本定义。
定义1(含禁止约束的待测系统)
称
定义2(和禁止约束集的相关度)
假设SUT有n个参数,参数集P={p
本发明一种支持约束处理的逐参数扩展优化方法,包括如下步骤:
S1、根据流程图1,计算全部最简禁止约束并更新CSset(流程图1);其中,最简禁止约束指的是:假设u∈CSset,如果
S2、初始化Mode为1;
S3、判断Mode是否为2或者为4,若是,则跳到S4,若否,则跳到S5;
S4、将所有参数的参数值按照和禁止约束集的相关度非递增排序;
S5、判断各参数的取值个数是否相等,若相等,则将各参数按照其和禁止约束集的相关度非递增排序;若不等,则将各参数按照其取值个数非递增排序;
S6、初始化测试用例集Ts
S7、初始化uncover为所有参数的所有取值的两两组合;
S8、更新uncover:删除包含任意一个二值约束的未覆盖配对;更新Ts
S9、从第三个参数开始进行水平扩展,每次扩展两个参数,当所有参数扩展完成后,跳到S13,否则跳到S10;不妨假设当前扩展参数为p
S10、判断Mode是否为3或者为4,若是,则跳到S11,若否,则跳到S12;
S11、将Ts
S12、遍历Ts
S13、判断uncover是否为空集,若是,则跳到S15,若否,则跳到S14进行垂直扩展;
S14、采用改进后的AETG算法进行垂直扩展,更新Ts
S15、精简Ts
S16、判断Mode是否为4,若是,则跳到S18,若否,则跳到S17;
S17、Mode++,跳到S3;
S18、从Ts1、Ts2、Ts3、Ts4中选择一个规模最小的结果即为最终结果。
在本发明的某一个实施例中,所述计算全部最简禁止约束并更新CSset的过程如下:
S1-1、化简CSset;
S1-2、计算约束参数集Pc;
S1-3、判断Pc是否为空(不妨假设|Pc|=m);如果是,转到步骤S1-9,如果否,转到步骤S1-4;
S1-4、初始化new为空;
S1-5、选择第i个约束参数Pi,计算Pi的隐含禁止约束集CSset
S1-6、判断CSset
New=new∪CSset
CSset=CSset∪CSset
化简CSset,并进入步骤S1-7;
S1-7、判断i>m是否成立,如果否,则转到步骤S1-5;如果是,则转到步骤S1-8;
S1-8、判断New是否为空,如果否,则i=1,转到步骤S1-2;如果是,则执行步骤S1-9;
S1-9、返回CSset,结束流程。
在本发明的某一个实施例中,所述采用改进后的AETG算法进行垂直扩展,更新Ts
S14-1、初始化i=N;N可选择为50;
S14-2、判断i>0是否成立,如果是,则转到S14-3,否则,转到S14-5;
S14-3、将参数按照和未覆盖集的相关度非递增排序;
S14-4、采用向前向上匹配法依次确定每个参数的取值:即选择覆盖最多未覆盖配对的参数值,如果满足条件的参数值不止一个,优先选择在未覆盖集中出现次数最多的参数值;保存用例t
S14-5、从S14-4生成的用例集中选择最优用例t
S14-6、判断uncover是否为空,如果否,则转回S14-1;如果是,则转到S14-7;
S14-7、返回Ts
在本发明的某一个实施例中,所述精简Ts
S15-1、根据参数域和最新禁止约束集,计算所有有效配对并记录于allpairs中;
S15-2、初始化数组times用于记录有效配对在Ts
S15-3、计算并标出Ts
S15-4、遍历Ts
S15-5、判断Ts
实施例1:
本发明一种支持约束处理的逐参数扩展优化方法的思想简述为:在支持约束处理的逐参数扩展算法IPOWithCS的基础上,充分研究约束集,提出参数和禁止约束集的相关度等概念,结合两两组合测试的特点和约束集的信息,分析影响算法性能的6个因素,不同因素对算法产生的影响不同,从中选择影响显著性较弱的2个因素(即同一参数不同取值的排序和待扩展测试用例的排序),根据这两个优化点设计4个优化策略,分别用Mode标记,依次求解不同策略,从中找到一个最优解近似代替问题的最终解,适应性调整IPOWithCS算法,由此提出一种新的支持约束处理的逐参数扩展优化方法。
下面以一具体实施例进行说明本发明支持约束处理的逐参数扩展优化方法。假设某待测系统为:SUT={5;3
S1.根据流程图1,计算全部最简禁止约束并更新CSset(流程图1);若某参数的所有取值都包含在禁止约束集中,定义这一参数为约束参数;
如:分析5个参数后得知约束参数P
S2.初始化Mode为1;
S3.判断Mode是否为2或者为4,若是,则跳到S4,若否,则跳到S5;
S4.将所有参数的参数值按照和禁止约束集的相关度非递增排序;
如:以参数A为例,A总共有三个取值,分别是A1、A2、A3,结合定义2分析A1和禁止约束集的相关度,包含A1的约束总共有0个,故A1和禁止约束集的相关度为0;同理计算出A2、A3和禁止约束集的相关度依次为1、4,重排序A的三个参数取值依次为A3、A2、A1。同样的方法将其它参数的取值均按照和禁止约束集的相关度非递增排序。
S5.判断各参数的取值个数是否相等,若相等,则将各参数按照其和禁止约束集的相关度非递增排序;若不等,则将各参数按照其取值个数非递增排序;
如:由于SUT各参数的取值个数不完全相等,5个参数的取值个数依次为3、3、3、2、2,将参数按照取值个数非递增排序后的结果为ABCDE。
S6.初始化测试用例集Ts
S7.初始化uncover为所有参数的所有取值的两两组合;
S8.更新uncover:删除包含任意一个二值约束的未覆盖配对;更新TS
S9.从第三个参数开始进行水平扩展,每次扩展两个参数,当所有参数扩展完成后,跳到S13,否则跳到S10;不妨假设当前扩展参数为p
S10.判断Mode是否为3或者为4,若是,则跳到S11,若否,则跳到S12;
S11.将Ts
如:假设当前测试用例集Ts
S12.遍历Ts
如:以t
S13.判断uncover是否为空集,若是,则跳到S15,若否,则跳到S14进行垂直扩展;
S14.采用改进后的AETG算法进行垂直扩展,更新Ts
S15.精简Ts
S16.判断Mode是否为4,若是,则跳到S18,若否,则跳到S17;
S17.Mode++,跳到S3;
S18.从Ts1、Ts2、Ts3、Ts4中选择一个规模最小的结果即为最终结果。
如:|Ts1|=93、|Ts2|=92、|Ts3|=93、|Ts4|=94,那么Ts2即为满足约束条件的最小规模测试用例集。
实施例2:
本发明一种支持约束处理的逐参数扩展优化方法应用于另一具体实施例。假设待测系统有5个参数,各参数的取值集合分别是:
·目标类型={A类目标,B类目标,C类目标}
·任务状态={值班,训练}
·飞行航路状态={I型航路,II型航路,III型航路,IV型航路}
·群目标类型={非群目标,群目标}
·任务类型={单机,组网}
其中,III型航路上不能装订B类目标。系统测试时要求设计尽可能少的测试用例来达到二维有效组合覆盖的指标要求,最终的计算结果如下:
Test_1=(A类目标,训练,I型航路,群目标,组网)
Test_2=(B类目标,值班,I型航路,非群目标,单机)
Test_3=(C类目标,训练,I型航路,非群目标,组网)
Test_4=(A类目标,值班,II型航路,群目标,单机)
Test_5=(B类目标,训练,II型航路,非群目标,组网)
Test_6=(C类目标,值班,II型航路,群目标,单机)
Test_7=(A类目标,训练,III型航路,非群目标,单机)
Test_8=(C类目标,值班,III型航路,群目标,组网)
Test_9=(A类目标,训练,IV型航路,非群目标,单机)
Test_10=(B类目标,值班,IV型航路,群目标,组网)
Test_11=(C类目标,训练,IV型航路,群目标,单机)
由目标类型和飞行航路状态这两个参数构成的有效组合对共有11个,因此二维组合测试用例集的规模至少是11,说明上述结果就是最优解,本发明具备一定的工程适用性与有效性。
本发明一种支持约束处理的逐参数扩展优化方法具有如下特点:
1.不仅支持二值约束处理,而且支持多值约束处理;
2.支持隐含约束自动处理机制,无需人工计算隐含约束,大大减少测试人员的工作量,避免引入人为错误;
3.首次深入挖掘约束集,利用约束信息进一步优化组合测试方法,为之后优化约束组合测试算法提供一个新思路;
4.对于两两组合有效测试用例生成问题,本发明的方法具有很强的测试用例优化能力,和市面上已有工具相比,通常能生成最小测试用例集,尤其是对于参数个数或者参数取值个数较多的待测系统,其测试用例优化能力的优势得到了充分体现;
5.有效解决了实际工程中约束组合测试问题,具有良好的工程应用价值,大大提高了测试效率节省了测试成本。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明技术原理的前提下,还可以做出若干改进和变形,这些改进和变形也应视为本发明的保护范围。
- 一种REFER消息扩展参数的支持方法
- 一种REFER消息扩展参数的支持方法