首页 / 专利库 / 软件 / 软件回归测试 / 基于蚁群算法进行测试用例优先级排序的回归测试方法

基于蚁群算法进行测试用例优先级排序的回归测试方法

阅读:504发布:2020-05-17

专利汇可以提供基于蚁群算法进行测试用例优先级排序的回归测试方法专利检索,专利查询,专利分析的服务。并且本 发明 公开了一种基于蚁群 算法 进行测试 用例 优先级排序的回归测试方法,包括步骤:(1)把被测程序的测试套转化为图G,计算并实例化所有人工蚂蚁;(2)人工蚂蚁开始周游图G以构造问题的解,在每一次蚂蚁状态转移之前,人工蚂蚁计算所有候选 节点 的启发式信息,并挑选出下一个将要转移的目标节点;(3)当所有人工蚂蚁都完成构造解的工作之后,通过全局 信息素 更新规则将用以更新图G中所有边的信息素含量;(4)达到结束条件时得到排序后的测试套,否则返回步骤(2);(5)将排序后的测试套作为测试用例依次对 软件 进行回归测试。本发明运用蚁群算法搜索最优的测试用例执行顺序,从而最大化被测程序中语句的 覆盖 速率,提高回归测试的效率。,下面是基于蚁群算法进行测试用例优先级排序的回归测试方法专利的具体信息内容。

1.一种基于蚁群算法进行测试用例优先级排序的回归测试方法,其特征在于,包括步骤:
(1)把一个包含n个测试用例、对应包含m条语句的被测程序的测试套转化为图G,计算第一条历史最优解 并把其适应度作为图G的信息素起始浓度τ0,实例化所有人工蚂蚁;
(2)人工蚂蚁开始周游图G以构造问题的解,在每一次蚂蚁状态转移之前,人工蚂蚁计算所有候选节点的启发式信息,并根据伪随机比例规则挑选出下一个将要转移的目标节点;在完成一次转移之后,局部信息素更新规则将作用于发生转移的边以降低其信息素含量;之后,蚂蚁判断是否覆盖所有语句,若否,则继续转移;若是,则停止周游,转至步骤(3);
(3)当所有人工蚂蚁都完成构造解的工作之后,基于排序的局部搜索方法应用于微调所有生成的解;这之后,所有解的适应度将被算出,并从中选出迭代最优解用以与历史最优解比较,并更新全局最优路径树;最后,通过全局信息素更新规则将用以更新图G中所有边的信息素含量;
(4)如果算法达到结束条件则终止,得到排序后的测试套,否则返回步骤(2);
(5)将排序后的测试套作为测试用例依次对软件进行回归测试的检测,确保软件新功能和原有功能的正确性。
2.根据权利要求1所述的基于蚁群算法进行测试用例优先级排序的回归测试方法,其特征在于,步骤(1)中,所述把一个包含n个测试用例、对应包含m条语句的被测程序的测试套转化为图G具体包括:
将一个包含n个测试用例、对应包含m条语句的被测程序的测试套将被转化为图G={V,E},其中,V={v-1,v1,v2,...,vn}是图G的节点集,其包含n个实节点v1,v2,...,vn,分别对应n个测试用例,以及一个虚节点v-1作为所有人工蚂蚁的搜索起点,E={Ev,Er}是图G的边集,其中Ev={e(-1,1),e(-1,2),...,e(-1,n)}包含所有从虚节点指向实节点的边,Er包含所有实节点之间的实边;图G中的每个实节点vi(i=1,2,...,n)有其对应的覆盖语句表j为vi的总覆盖语句数,sik,(1≤k≤j)是vi覆盖的
第k条语句在被测程序中的行号。
3.根据权利要求1所述的基于蚁群算法进行测试用例优先级排序的回归测试方法,其特征在于,步骤(1)中,所述计算第一条历史最优解 并把其适应度作为图G的信息素起始浓度τ0,实例化所有人工蚂蚁具体包括:
1)对所有不属于构造解的测试用例计算其额外语句覆盖数;
2)从所有额外语句覆盖数大于0的测试用例中随机选择一个用例,加入构造解的末尾;
3)计算构造解的总覆盖语句数,若小于被测程序总语句数,则返回步骤1),否则结束计算,得到第一条历史最优解
4)根据所述一条历史最优解 计算G的信息素起始浓度
4.根据权利要求1所述的基于蚁群算法进行测试用例优先级排序的回归测试方法,其特征在于,步骤(2)中,所述人工蚂蚁计算所有候选节点的启发式信息时,
每一只人工蚂蚁k都设置其自身的覆盖语句集 以记录其在周游的过程中已经覆盖
的被测程序语句,并不断根据加入到构造解中的新测试用例对其进行更新,更新方式如下所示:
其中, 表示被加入到构造解中的新测试用例vs,\计算的是 与 的差集;
基于人工蚂蚁的自身覆盖语句集 额外语句覆盖的启发式函数计算如下:
其中,S是被测程序的所有语句集,||·||计算输入集合中的元素个数,ηk(s)用于衡量的是蚂蚁k转移到节点s的代价,ηk(s)的大小决定蚂蚁k是否值得转移到节点;
根据上述启发式规则,图G中任意一条边e(r,s)的代价度量(即距离)可通过下式计算:
其中,边e(r,s)的距离δk(r,s)并不是一个固定的值,而是根据所爬行蚂蚁的不同而不同。
5.根据权利要求1所述的基于蚁群算法进行测试用例优先级排序的回归测试方法,其特征在于,步骤(2)中,所述根据伪随机比例规则挑选出下一个将要转移的目标节点定义如下:
其中,r是蚂蚁当前所在的节点,τ(r,t)是节点r到t的路径上的信息素含量,β是一个控制信息素与启发式信息的相对重要性的参数;q是一个均匀分布的随机数,取值范围为[0,
1],q0是一个在0到1上的参数,起到阈值作用;当q小于或等于q0的时候,s等于取得最大[τ(r,t)][ηk(t)]β值的那个节点,否则s等于一个随机数S,所述随机数S由下式中概率分布生成的随机数:
式中,Jk(r)表示与r相连的所有未访问节点的集合,相连有较大的信息素含量与启发式信息的β次方乘积的节点将有更大的几率被选中。
6.根据权利要求1所述的基于蚁群算法进行测试用例优先级排序的回归测试方法,其特征在于,步骤(2)中,所述局部信息素更新规则通过在蚂蚁每一次发生转移的时候,蒸发转移对应的那一条边上的信息素含量,避免了后续蚂蚁遵循相同的爬行轨迹,达到发散搜索,避免陷入局部最优解的目的,所述局部信息素更新规则定义如下:
τ(r,s)←(1-ρ)τ(r,s)+ρτ0
其中,ρ∈[0,1],是控制信息素衰减速率的参数,τ0是图G的信息素起始浓度。
7.根据权利要求1所述的基于蚁群算法进行测试用例优先级排序的回归测试方法,其特征在于,步骤(3)中,所述全局信息素更新规则通过蒸发图G中所有边上的信息素,同时释放新的信息素到与历史最优解相对应的路径上,使得历史最优解所标记的路径信息素含量越来越高,从而达到算法收敛的目的,所述所述全局信息素更新规则定义为:
其中,α∈[0,1]是一个控制信息素衰减速率的参数,r是ΓH中的一个内部节点,s是r的其中一个子节点,APSCh是历史最优解的适应度,γr是从r开始的所有分支中的叶子节点总数。
8.根据权利要求1所述的基于蚁群算法进行测试用例优先级排序的回归测试方法,其特征在于,步骤(3)中,所述从中选出迭代最优解用以与历史最优解比较,并更新全局最优路径树具体包括:
将所有等效的当前迭代最优解构成一个集合{TI},并与所有等效的历史最优解T构成的解集{TH}比较,所述{TH}以树状结构表示,称为历史最优路径树ΓH,树的根节点是图G节点v-1,从v-1到每一个叶子结点的一条完整分支表示一个等效历史最优解T;
若APSC({TI})>APSC({TH}),则原有的历史最优解集{TH}将被清空,{TI}将会赋值给{TH}:
{TH}←{TI}(7);
若APSC({TH})<APSC({TI}),则原有的{TH}维持不变;
若 则{TH}吸收了{TI}中的所
有非严格等效解T′I:
{TH}←{TI}U{TH}(8);
若 原有的{TH}维持不变。
9.根据权利要求8所述的基于蚁群算法进行测试用例优先级排序的回归测试方法,其特征在于,若 {TI}中的非严格等效
解将会被加入到ΓH中,具体包括步骤:
(1)初始化计数器i=1;
(2)判断非严格等效解T′I的第i个元素是否已在历史最优路径树ΓH的第i层中,若是,则i=i+1后回到步骤(2);若否,则跳至步骤(3);
(3)把非严格等效解T′I中从第i+1个元素到最后一个元素的片段作为ΓH的新分支,接入到ΓH的第i层中节点号等于T′I中第i个元素的节点下方。
10.根据权利要求1所述的基于蚁群算法进行测试用例优先级排序的回归测试方法,其特征在于,步骤(3)中,所述基于排序的局部搜索方法具体包括步骤:
(1)初始化计数器i=1和集合 计算解T′的长度L;
(2)初始化计数器j=L;
(3)若 则跳至步骤(4),否则j=j-1,回到步骤(3);
(4)令 然后交换ti与tj-1
位置
(5)j=j-1,若j≤i,则跳至步骤(6),否则回到步骤(3);
(6)i=i+1,若i>L-1,则结束算法,否则跳至步骤(2)
其中,T′为给定的一个基于覆盖的测试用例优先级排序问题的解,同时假定T′是全局最优解,则有 如果pri(ti)>pri(tj),则 其中,pri
(ti)计算的是ti的优先级,即ti在T′中的位置, 表示ti的额外语句覆盖集,||·||计算输入集合中的元素个数。

说明书全文

基于蚁群算法进行测试用例优先级排序的回归测试方法

技术领域

[0001] 本发明涉及软件测试和智能计算两大领域,主要涉及一种基于蚁群算法进行测试用例优先级排序的回归测试方法。

背景技术

[0002] 回归测试是软件工程领域中的一种特殊的软件测试方法。该测试是指每当程序员修改软件源代码后,都重新进行测试以确保原先已写好且良好运作的代码没有引入新的程序错误,同时在本次修改中新添加的代码能够正确执行。回归测试作为软件生命周期的一个组成部分,贯穿于软件开发的各个阶段,软件每一个新版本的发布都需要事先经过多次回归测试的检查,以确保软件新功能和原有功能的正确性。
[0003] 回归测试的成本往往非常之高。这是由于在每一次回归测试中,软件测试工程师都会针对新代码添加新的测试用例,同时为确保前期代码的正确性,所有测试用例都会被保存起来,以便在未来的回归测试中重复使用。这就导致了软件测试池和测试套规模的不断膨胀。
[0004] 选择合适、正确的策略降低回归测试的开销是有必要的,其中一种技术是测试用例优先级排序技术。该技术通过优化测试套中的测试用例执行顺序以优化回归测试的时间安排。具体而言,回归测试优先级排序依照某种标准给每一个测试用例评定优先级,再依照这种优先级为所有测试用例作降序排序。如此一来,优先级高的测试用例将会被更早地执行,回归测试的测试目标也将被更早地满足。由于更早地获得了重要的测试结果和测试反馈,程序员得以更早地开展后续的调试和开发工作。此外,假如回归测试活动意外终止了,测试用例排序优先级排序技术可以保证此前所进行的部分测试拥有最高收益。
[0005] 回归测试有诸多可能的测试目标,其中最重要的目标之一是尽可能早地覆盖程序中的所有语句(可执行代码行),即最大化测试用例集的语句覆盖率。针对该目标,目前主要的技术分为确定性方法和随机搜索方法两类。确定性方法以基于贪心策略的技术为代表,其特点是算法流程简单,复杂度低;随机搜索算法主要有遗传算法、蚁群算法、粒子群算法等,特点是拥有较强的全局搜索能;由于基于覆盖率的测试用例优先级排序问题本质上是一个NP难问题,贪心策略只能找到局部最优解,而无法找到全局最优解或近似最优解;而随机搜索算法则有一定的跳出局部最优解的能力。
[0006] 蚁群算法是一种强大的演化计算方法。该算法最早由Dorigo于1992年提出。发表至今已成功应用于诸多组合优化问题;蚁群算法的优点是能利用领域知识进行搜索,从而快速找到高质量的解。在蚁群算法框架的设计中,两个关键的问题是如何设计一个有效的启发式函数和一个合适的信息素更新策略;前者利用问题相关的局部信息辅助人工蚂蚁搜索,后者利用蚁群的历史搜索经验辅助人工蚂蚁搜索。然而,现有的基于蚁群算法和覆盖率的测试用例优先级排序技术只着眼于设计精巧的信息素更新策略,却忽视了定义一个符合问题的启发式函数的重要性。这使得这些方法在解决上述问题时不够高效。针对上述问题,本发明提出了一种基于额外覆盖的蚁群系统算法框架,同时发明了一种全新的局部搜索方法以进一步辅助人工蚁群的搜索。本发明能找到更好的最大化语句覆盖速率解,进一步提高了测试用例优先级排序技术的效率。

发明内容

[0007] 针对上述问题,本发明提出了一种基于蚁群算法进行测试用例优先级排序的回归测试方法。本发明能找到更好的最大化语句覆盖速率解,进一步提高了回归测试用例优先级排序技术的效率,解决了软件工程领域的回归测试中的时间开销问题,提高了软件测试活动的效率。
[0008] 本文将蚁群系统算法用于基于覆盖的测试用例优先级排序优化问题中,提高了回归测试的效率,解决了对测试策略进行优化的技术问题。该蚁群系统算法采用基于额外覆盖的启发式规则和基于排序的局部搜索方法。
[0009] 本发明采用如下技术方案实现:
[0010] 一种基于蚁群算法进行测试用例优先级排序的回归测试方法,包括步骤:
[0011] (1)把一个包含n个测试用例、对应包含m条语句的被测程序的测试套转化为图G,计算第一条历史最优解 并把其适应度作为图G的信息素起始浓度τ0,实例化所有人工蚂蚁;
[0012] (2)人工蚂蚁开始周游图G以构造问题的解,在每一次蚂蚁状态转移之前,人工蚂蚁计算所有候选节点的启发式信息,并根据伪随机比例规则挑选出下一个将要转移的目标节点;在完成一次转移之后,局部信息素更新规则将作用于发生转移的边以降低其信息素含量;之后,蚂蚁判断是否覆盖所有语句,若否,则继续转移;若是,则停止周游,转至步骤(3);
[0013] (3)当所有人工蚂蚁都完成构造解的工作之后,基于排序的局部搜索方法应用于微调所有生成的解;这之后,所有解的适应度将被算出,并从中选出迭代最优解用以与历史最优解比较,并更新全局最优路径树;最后,通过全局信息素更新规则将用以更新图G中所有边的信息素含量;
[0014] (4)如果算法达到结束条件则终止,得到排序后的测试套,否则返回步骤(2);
[0015] (5)将排序后的测试套作为测试用例依次对软件进行回归测试的检测,确保软件新功能和原有功能的正确性。
[0016] 进一步地,步骤(1)中,所述把一个包含n个测试用例、对应包含m条语句的被测程序的测试套转化为图G具体包括:
[0017] 将一个包含n个测试用例、对应包含m条语句的被测程序的测试套将被转化为图G={V,E},其中,V={v-1,v1,v2,...,vn}是图G的节点集,其包含n个实节点v1,v2,...,vn,分别对应n个测试用例,以及一个虚节点v-1作为所有人工蚂蚁的搜索起点,E={Ev,Er}是图G的边集,其中Ev={e(-1,1),e(-1,2),...,e(-1,n)}包含所有从虚节点指向实节点的边,Er包含所有实节点之间的实边;图G中的每个实节点vi(i=1,2,...,n)有其对应的覆盖语句表j为vi的总覆盖语句数,sik,(1≤k≤j)是vi覆盖的第k条语句在被测程序中的行号。
[0018] 进一步地,步骤(1)中,所述计算第一条历史最优解 并把其适应度作为图G的信息素起始浓度τ0,实例化所有人工蚂蚁具体包括:
[0019] 1)对所有不属于构造解的测试用例计算其额外语句覆盖数;
[0020] 2)从所有额外语句覆盖数大于0的测试用例中随机选择一个用例,加入构造解的末尾;
[0021] 3)计算构造解的总覆盖语句数,若小于被测程序总语句数,则返回步骤1),否则结束计算,得到第一条历史最优解
[0022] 4)根据所述一条历史最优解 计算G的信息素起始浓度
[0023] 进一步地,步骤(2)中,所述人工蚂蚁计算所有候选节点的启发式信息时,[0024] 每一只人工蚂蚁k都设置其自身的覆盖语句集 以记录其在周游的过程中已经覆盖的被测程序语句,并不断根据加入到构造解中的新测试用例对其进行更新,更新方式如下所示:
[0025]
[0026] 其中, 表示被加入到构造解中的新测试用例vs,\计算的是 与 的差集;
[0027] 基于人工蚂蚁的自身覆盖语句集 额外语句覆盖的启发式函数计算如下:
[0028]
[0029] 其中,S是被测程序的所有语句集,||·||计算输入集合中的元素个数,ηk(s)用于衡量的是蚂蚁k转移到节点s的代价,ηk(s)的大小决定蚂蚁k是否值得转移到节点;
[0030] 根据上述启发式规则,图G中任意一条边e(r,s)的代价度量(即距离)可通过下式计算:
[0031]
[0032] 其中,边e(r,s)的距离δk(r,s)并不是一个固定的值,而是根据所爬行蚂蚁的不同而不同。
[0033] 进一步地,步骤(2)中,所述根据伪随机比例规则挑选出下一个将要转移的目标节点定义如下:
[0034]
[0035] 其中,r是蚂蚁当前所在的节点,τ(r,t)是节点r到t的路径上的信息素含量,β是一个控制信息素与启发式信息的相对重要性的参数;q是一个均匀分布的随机数,取值范围为[0,1],q0是一个在0到1上的参数,起到阈值作用;当q小于或等于q0的时候,s等于取得最大β[τ(r,t)][ηk(t)]值的那个节点,否则s等于一个随机数S,所述随机数S由下式中概率分布生成的随机数:
[0036]
[0037] 式中,为Jk(r)表示与r相连的所有未访问节点的集合。拥有较大的信息素含量与启发式信息的β次方乘积的节点将有更大的几率被选中。
[0038] 进一步地,步骤(2)中,所述局部信息素更新规则通过在蚂蚁每一次发生转移的时候,蒸发转移对应的那一条边上的信息素含量,避免了后续蚂蚁遵循相同的爬行轨迹,达到发散搜索,避免陷入局部最优解的目的,所述局部信息素更新规则定义如下:
[0039] τ(r,s)←(1-ρ)τ(r,s)+ρτ0
[0040] 其中,ρ∈[0,1],是控制信息素衰减速率的参数,τ0是图G的信息素起始浓度。
[0041] 进一步地,步骤(3)中,所述全局信息素更新规则通过蒸发图G中所有边上的信息素,同时释放新的信息素到与历史最优解相对应的路径上,使得历史最优解所标记的路径信息素含量越来越高,从而达到算法收敛的目的,所述所述全局信息素更新规则定义为:
[0042]
[0043] 其中,α∈[0,1]是一个控制信息素衰减速率的参数,r是ΓH中的一个内部节点,s是r的其中一个子节点,APSCh是历史最优解的适应度,γr是从r开始的所有分支中的叶子节点总数。
[0044] 进一步地,步骤(3)中,所述从中选出迭代最优解用以与历史最优解比较,并更新全局最优路径树具体包括:
[0045] 将所有等效的当前迭代最优解构成一个集合{TI},并与所有等效的历史最优解T构成的解集{TH}比较,所述{TH}以树状结构表示,称为历史最优路径树ΓH,树的根节点是图G节点v-1,从v-1到每一个叶子结点的一条完整分支表示一个等效历史最优解T;
[0046] 若APSC({TI})>APSC({TH}),则原有的历史最优解集{TH}将被清空,{TI}将会赋值给{TH}:
[0047] {TH}←{TI}   (7);
[0048] 若APSC({TH})<APSC({TI}),则原有的{TH}维持不变;
[0049] 若APSC({TI})=APSC({TH}), 则{TH}吸收了{TI}中的所有非严格等效解T′I:
[0050] {TH}←{TI}U{TH}   (8);
[0051] 若APSC({TI})>APSC({TH}), T′I∈{TH},原有的{TH}维持不变。
[0052] 进一步地,若APSC({TI})=APSC({TH}), {TI}中的非严格等效解将会被加入到ΓH中,具体包括步骤:
[0053] (1)初始化计数器i=1;
[0054] (2)判断非严格等效解T′I的第i个元素是否已在历史最优路径树ΓH的第i层中,若是,则i=i+1后回到步骤(2);若否,则跳至步骤(3);
[0055] (3)把非严格等效解T′I中从第i+1个元素到最后一个元素的片段作为ΓH的新分支,接入到ΓH的第i层中节点号等于T′I中第i个元素的节点下方。
[0056] 进一步地,步骤(3)中,所述基于排序的局部搜索方法具体包括步骤:
[0057] (1)初始化计数器i=1和集合 计算解T′的长度L;
[0058] (2)初始化计数器j=L;
[0059] (3)若 则跳至步骤(4),否则j=j-1,回到步骤(3);
[0060] (4)令 然后交换ti与tj-1的位置
[0061] (5)j=j-1,若j≤i,则跳至步骤(6),否则回到步骤(3);
[0062] (6)i=i+1,若i>L-1,则结束算法,否则跳至步骤(2)
[0063] 其中,T′为给定的一个基于覆盖的测试用例优先级排序问题的解,同时假定T′是全局最优解,则有 tj∈T′,i≠j,如果pri(ti)>pri(tj),则 其中,pri(ti)计算的是ti的优先级,即ti在T′中的位置, 表示ti的额外语句覆盖集,||·||计算输入集合中的元素个数。
[0064] 相比现有技术,本发明的蚁群系统算法是一种基于信息素的智能算法,在搜索过程中,能够同时利用问题相关知识和历史经验信息进行优化,因而具有较强的全局搜索能力;为了进一步提高算法的全局搜索能力和效率,本发明在蚁群系统算法中引入一种基于额外语句覆盖的启发式函数和基于排序的局部搜索方法,有效提高了算法的求解效率和求解性能,进一步提高了对软件的回归测试效率。附图说明
[0065] 图1为本发明实施例的基于蚁群算法进行测试用例优先级排序的流程图

具体实施方式

[0066] 下面结合附图对本发明的方法作进一步的描述。
[0067] 考虑一个具有m行语句的被测程序P,一个包含n个测试用例的测试套T={t1,t2,...,tn},关于T的所有置换的集合PT,从T的置换映射到实数值的适应度函数f,测试用例优先级排序问题可被定义为:找到一个置换T′∈PT,使得 T″≠T′,都满足f(T′)≥f(T″)。
[0068] 本发明的目标是最大化测试套的语句覆盖速率,即通过调整测试套中测试用例的执行顺序,使得测试套尽早覆盖被测程序中的所有可执行代码行。针对该目标,我们使用语句覆盖平均百分比作为本发明的适应度函数,以评估构造解的好坏程度。APSC的计算公式如下所示:
[0069]
[0070] 其中TSi为语句i在T′中被第一次覆盖的时刻(比如,TS2=5表示语句2被T′中的第五个测试用例首次覆盖)。APSC值的取值范围为(0,1),APSC值越大,表示测试套覆盖源程序中语句的速率越快。
[0071] 最大化语句覆盖速率的测试用例优先级排序问题可转化为如下优化问题:最大化受限于 其中ti表示排序后的测试套中的第i个测试用例,Φ(ti)表示执行测试用例ti后获得的额外语句覆盖数。
[0072] 测试用例的总语句覆盖数是测试该用例时被测程序所执行的语句总数,额外语句覆盖数则是指上述语句中,在测试该测试用例时首次被执行的语句数目,即在该用例之前测试的所有测试用例都未执行过的语句。因此,测试用例的总语句覆盖数只与测试用例本身有关,额外语句覆盖数则同时与总语句覆盖数以及该测试用例在排序好的测试套中所处的位置有关。
[0073] 图1给出了本发明算法优化测试用例优先级排序问题的流程图。下面就流程图的内容分步描述整个算法的具体实施方式:
[0074] 如图1所示,一种基于蚁群算法进行测试用例优先级排序的回归测试方法,包括步骤:
[0075] (1)把一个包含n个测试用例、对应包含m条语句的被测程序的测试套转化为图G,计算第一条历史最优解 并把其适应度作为图G的信息素起始浓度τ0,实例化所有人工蚂蚁;
[0076] (2)人工蚂蚁开始周游图G以构造问题的解,在每一次蚂蚁状态转移之前,人工蚂蚁计算所有候选节点的启发式信息,并根据伪随机比例规则挑选出下一个将要转移的目标节点;在完成一次转移之后,局部信息素更新规则将作用于发生转移的边以降低其信息素含量;之后,蚂蚁判断是否覆盖所有语句,若否,则继续转移;若是,则停止周游,转至步骤(3);
[0077] (3)当所有人工蚂蚁都完成构造解的工作之后,基于排序的局部搜索方法应用于微调所有生成的解;这之后,所有解的适应度将被算出,并从中选出迭代最优解用以与历史最优解比较,并更新全局最优路径树;最后,通过全局信息素更新规则将用以更新图G中所有边的信息素含量;
[0078] (4)如果算法达到结束条件则终止,得到排序后的测试套,否则返回步骤(2);
[0079] (5)将排序后的测试套作为测试用例依次对软件进行回归测试的检测,确保软件新功能和原有功能的正确性。
[0080] 下面将对本发明的基于蚁群算法进行测试用例优先级排序的回归测试方法做进一步的详细展开说明。
[0081] 1、初始化。
[0082] 在本发明中,一个包含n个测试用例、对应包含m条语句的被测程序的测试套将被转化为图G={V,E}。V={v-1,v1,v2,...,vn}是图G的节点集,其中包含n个实节点v1,v2,...,vn,分别对应n个测试用例,以及一个虚节点v-1作为所有人工蚂蚁的搜索起点。E={Ev,Er}是图G的边集,其中Ev={e(-1,1),e(-1,2),...,e(-1,n)}包含所有从虚节点指向实节点的边,Er包含所有实节点之间的实边。
[0083] 此外,图G中的每个实节点vi(i=1,2,...,n)有其对应的覆盖语句表j为vi的总覆盖语句数,sik,(1≤k≤j)是vi覆盖的
第k条语句在被测程序中的行号。在一个构造解过程中,G中任意节点最多只能被每一只蚂蚁分别访问一次。蚂蚁在其周游中访问G中节点的顺序即为测试用例优先级排序问题的一个可行解。由于测试用例优先级排序技术不舍弃测试用例,理论上只有当蚂蚁遍历完一遍G中所有节点以后,构造解的过程才算完成。然而,在大多数情况下,人工蚂蚁在遍历所有节点之前即可覆盖被测程序中的所有语句,而在此之后的余下节点的顺序对最终解的质量没有影响。因此,出于节省计算资源的考虑,在本发明中,人工蚂蚁在覆盖被测程序所有语句(即实现完全覆盖率)之后即可停止周游,余下的未被访问节点将按照节点号升序加入到构造解后方。
[0084] 第一个历史最优解 决定了图G的信息素起始浓度τ0以及局部信息素更新规则中的信息素增量。 通过以下步骤构造:
[0085] (1)对所有不属于构造解的测试用例计算其额外语句覆盖数。
[0086] (2)从所有额外语句覆盖数大于0的测试用例中随机选择一个用例,加入构造解的末尾。
[0087] (3)计算构造解的总覆盖语句数,若小于被测程序总语句数,则回到步骤(1),否则结束。
[0088] G的信息素起始浓度
[0089] 2、基于额外覆盖的启发式函数
[0090] 在本发明中,每一只人工蚂蚁k都有其自身的覆盖语句集 以记录其在周游的过程中已经覆盖的被测程序语句,并不断根据加入到构造解中的新测试用例对其进行更新,更新方式如下所示:
[0091]
[0092] 其中, 表示被加入到构造解中的新测试用例vs,\计算的是 与 的差集。
[0093] 一个与问题相关的启发式函数衡量了每一个被加入到解中的候选测试用例的优劣程度。恰当地定义启发式函数在蚁群系统算法中非常重要,因为这涉及到在构造解过程中的每一个局部最优解的选择方式。基于人工蚂蚁的自身覆盖语句集 额外语句覆盖的启发式函数计算如下:
[0094]
[0095] 其中,S是被测程序的所有语句集,||·||计算输入集合中的元素个数。ηk(s)衡量的是蚂蚁k转移到节点s的代价。加入s的覆盖语句集 包含许多蚂蚁k尚未覆盖的语句,则启发式函数η的值较大,蚂蚁k会认为s是一个非常值得转移的节点。相反,假如ηk(s)的值很小,这表明s的覆盖语句集 和的大部分语句都已经被k覆盖过了,则k会认为不太值得转移到s。根据上述启发式规则,图G中任意一条边e(r,s)的代价度量(即距离)可通过下式计算:
[0096]
[0097] 边e(r,s)的距离δk(r,s)并不是一个固定的值,而是根据所爬行蚂蚁的不同而不同。在本发明中,所有人工蚂蚁都基于自身覆盖语句集 的情况,从自己的视看待图G的结构。这使得同一张图G在不同的两只蚂蚁眼中可能拥有不同的边集以及每一条边的距离;如果蚂蚁k的覆盖语句集 中有许多与节点s的覆盖语句集 重合的元素,k会认为节点s的距离很遥远;而如果蚂蚁k+1的覆盖语句集 与 的重复元素很少,k+1会认为s离得很近。
[0098] 在蚁群系统算法中,人工蚂蚁通过伪随机比例规则挑选下一个要访问的节点定义如下:
[0099]
[0100] 其中,r是蚂蚁当前所在的节点,τ(r,t)是节点r到t的路径上的信息素含量,β是一个控制信息素与启发式信息的相对重要性的参数;q是一个均匀分布的随机数,取值范围为[0,1],q0是一个在0到1上的参数,起到阈值作用。当q小于或等于q0的时候,s等于取得最大[τ(r,t)][ηk(t)]β值的那个节点,否则s等于一个服从下式中概率分布生成的随机数:
[0101]
[0102] 在式(6)中,拥有较大的信息素含量与启发式信息的β次方乘积的节点将有更大的几率被选中。通过式(5)和式(6)的综合运用,蚂蚁既能在大多数时候保持在历史最优解所指示的路径上行走,又能以一定的概率探索那些未知的,有可能构成更优解的节点。
[0103] 3、信息素与历史最优路径树
[0104] 在本发明中,所有拥有相同适应度的解被称为等效解,而两个拥有完全一致的测试用例顺序的解被称为互为严格等效解。在每次迭代的过程中,当所有人工蚂蚁都构造好了各自的解后,所有等效的当前迭代最优解将构成一个集合{TI},并与所有等效的历史最优解构成的解集{TH}比较,此时有四种可能的情况发生:
[0105] (1)APSC({TI})>APSC({TH});
[0106] (2)APSC({TH})<APSC({TI});
[0107] (3)APSC({TI})=APSC({TH}),
[0108] (4)APSC({TI})>APSC({TH}), T′I∈{TH}。
[0109] 在情况(1)中,原有的历史最优解集{TH}将被清空,{TI}将会赋值给{TH},如式(7)所示;在情况(3)中,{TH}吸收了{TI}中的所有非严格等效解,如式(8)所示;对于情况(2)和(4),原有的{TH}维持不变。
[0110] {TH}←{TI}   (7)
[0111] {TH}←{TI}U{TH}   (8)
[0112] 在本发明中,{TH}以树状结构表示,称为历史最优路径树ΓH。树的根节点是图G节点v-1,从v-1到每一个叶子结点的一条完整分支表示一个等效历史最优解T。对于情况(3),{TI}中的非严格等效解将会被加入到ΓH中,具体方式如下:
[0113] (1)初始化计数器i=1。
[0114] (2)判断非严格等效解T′I的第i个元素是否已在历史最优路径树ΓH的第i层中,若是,则i=i+1后回到步骤(2);若否,则跳至步骤(3)。
[0115] (3)把T′I中从第i+1个元素到最后一个元素的片段作为ΓH的新分支,接入到ΓH的第i层中节点号等于T′I中第i个元素的节点下方。
[0116] 在蚁群算法中,信息素更新规则决定了环境中信息素随时间变化而消散或增强的方式。通过信息素的消散和增强,人工蚁群能在多次迭代之后收敛到一个足够好的近似最优解中。蚁群系统算法运用了两种信息素更新方式,分别为全局信息素更新规则和局部信息素更新规则。全局信息素更新规则的作用是通过蒸发图G中所有边上的信息素,同时释放新的信息素到与历史最优解相对应的路径上,使得历史最优解所标记的路径信息素含量越来越高,从而达到算法收敛的目的;局部信息素更新规则通过在蚂蚁每一次发生转移的时候,蒸发转移对应的那一条边上的信息素含量,避免了后续蚂蚁遵循相同的爬行轨迹,达到发散算法搜索,避免陷入局部最优解的目的。
[0117] 在本发明中,全局信息素更新规则定义为:
[0118]
[0119] 其中,α∈[0,1]是一个控制信息素衰减速率的参数,r是ΓH中的一个内部节点,s是r的其中一个子节点,APSCh是历史最优解的适应度,γr是从r开始的所有分支中的叶子节点总数。由于一条同样的边e(r,s)有可能多次出现在ΓH中的不同地方,因此同一条边可能在一次全局信息素更新过程中被多次更新。
[0120] 局部信息素更新规则定义如下:
[0121] τ(r,s)←(1-ρ)τ(r,s)+ρτ0#(10)
[0122] 其中,ρ与α类似,也是控制信息素衰减速率的参数。τ0是图G的信息素起始浓度。
[0123] 4、局部搜索
[0124] 本发明证明在基于覆盖的测试用例优先级排序问题中,全局最优解必须满足以下定理:给定一个基于覆盖的测试用例优先级排序问题的解T′,同时假定T′是全局最优解,则有 如果pri(ti)>pri(tj),那么 其中,pri(ti)计算的是ti的优先级,即ti在T′中的位置, 定示ti的额外语句覆盖集,||·||计算输入集合中的元素个数。
[0125] 该定理是基于覆盖的测试用例优先级排序问题最优解的充分条件。基于该定理,本发明设计了一种基于排序的局部搜索方法,具体步骤如下:
[0126] (1)初始化计数器i=1和集合 计算解T′的长度L。
[0127] (2)初始化计数器j=L。
[0128] (3)若 则跳至步骤(4),否则j=j-1,回到步骤(3)。
[0129] (4)令 然后交换ti与tj-1的位置。
[0130] (5)j=j-1。若j≤i,则跳至步骤(6),否则回到步骤(3)。
[0131] (6)i=i+1。若i>L-1,则结束算法,否则跳至步骤(2)。
[0132] 在最坏情况下,本局部搜索方法的时间复杂度为O(mL2),其中m是被测程序的语句总行数。然而,在实际应用中,由于基于额外覆盖的启发式规则的作用,蚂蚁构造的可行解中的大多数相邻测试用例ti和tj都满足 这使得步骤(4)的一系列集合运算和最终的交换操作鲜有发生,于是局部搜索的消耗时间便降低了。尽管如此,实验证明该基于排序的局部搜索方法能显著提高蚁群算法的搜索效率,缩短算法的收敛时间。这是因为本搜索算法提供了一种微调的机制,使得一些原先适应度不够高,但能通过调整一部分测试用例位置的方式提高适应度的解得以被发现,从而间接地增强了整个蚁群的搜索能力。该局部搜索方法的算法本质是运用经典的冒泡排序技术,同时将三种集合运算插入到每一次交换操作中。
[0133] 本发明的参数设置为:蚂蚁数量N=16,β=2,q0=0.9,α=ρ=2。最终结果显示,本发明在多次实验中均未陷入局部最优化,其平均优化效果要优于传统的额外贪心算法、遗传算法与一种最近提出的蚁群算法变种。这说明采用本发明求解回归测试用例优先级排序问题是十分有效的。
[0134] 本发明所提出的方法引入了基于额外覆盖的启发式函数和基于排序的局部搜索方法,显著增强了搜索性能,提高了搜索及回归测试的效率,以三个广泛应用于回归测试研究的小型程序作为基准问题,同时以一个欧洲宇航局开发的大型程序作为实际问题,本发明进行的实证研究证明了所提出方法是十分有效的。
[0135] 以上所述,仅为本发明的具体实施方式。但本发明保护范围并不局限于此。任何熟悉本技术领域的技术人员在本发明披露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈