开放科学(资源服务)标志码(OSID):
回归测试是指测试人员对演化后的新版本程序重新进行测试,确认修改部分没有影响未修改部分的功能[1]。测试用例集扩增强调利用原测试数据信息和程序演化信息辅助生成新的测试数据,以期提高生成效率并获得更具针对性的测试用例[2]。
测试数据扩增概念由HARDER等[3]提出,之后国内外研究人员对其进行大量研究并取得一定的研究成果。吴川等[4]提出基于分析路径相关性来建立回归测试数据生成模型,虽然目标路径的覆盖率较高,但对于不同的被测程序,需要根据程序的特征设置不同的控制参数。YOO等[5]将测试数据分为失效和未失效两类,且仅修改程序中的简单运算符。XU等[6]研究表明使用已有测试数据可以提高测试数据集扩增效率。QI等[7]利用符号执行技术和状态传递树CEPT[8]确保测试数据可以覆盖修改后程序的变化节点,JIANG等[9]通过分析软件信息图扩增测试数据,但QI和JIANG等的研究均未利用原测试数据集。巩敦卫等[10]根据与目标路径的相似度选取初始种群,采用遗传算法生成测试数据,虽然合理地利用了原测试用例,但是并未将程序的演化信息与交叉算子相结合。殷鹏川等[11]利用原测试用例跳过重叠初始子路径,对后续目标子路径进行concolic测试,但该方法受限于约数求解器。王曙燕等[12]利用路径相似度识别新增路径并选取初始种群,采用自适应粒子群算法生成测试用例,但该方法不适用于大规模软件测试。吴川等[13]基于路径与测试数据之间的关系,决定需要扩增的测试数据,但该方法未利用原测试用例。XU等[14]研究表明已有测试用例的使用方式对回归测试的效率有较大的影响。王曙燕等[15]从方法级别和语句级别提取覆盖目标,将原测试用例和正交种群作为初始种群,虽然利用了原测试数据,但并没有对其进行选择,数据冗余性较大。对于上述研究存在的问题,需要一种与程序演化信息密切结合、能充分利用原测试用例且适用于较多程序的测试用例扩增算法,以在降低回归测试成本的同时提高扩增效率。
基于符号执行的软件测试方法受限于本身的高复杂度,难以适用于大规模软件测试,同时由于影响回归测试效果的主要因素是测试用例生成算法,而元启发式算法能有效提高测试用例扩增效率[16-17]。天牛须搜索(Beetle Antennae Search,BAS)算法是一种新型的元启发式算法[18-19],具有参数少且鲁棒性强等优点,自提出以来受到了学术界的广泛应用并取得了一系列的成果,但在测试用例扩增应用中鲜有公开的文献。本文在文献[15]研究的基础上,提出基于天牛须搜索算法的软件测试数据扩增方法MBAS。结合软件演化信息,基于原测试用例集的覆盖信息选取部分测试用例作为初始的进化种群,根据分支距离和分支嵌套深度设计适应度函数,采用改进的天牛须搜索算法对有序目标方法集进行测试数据的扩增,以期提高原测试用例的利用率和程序扩增的效率。
1 有序目标方法集获取利用已有的测试数据执行新旧程序,根据程序覆盖与执行信息得到需测试的目标方法集合。获取程序的方法调用图并将其用邻接矩阵存储,计算方法执行概率和权值,得到方法包含错误的影响度,获取优先覆盖的目标方法。
1.1 程序覆盖与执行信息获取一个程序包括m个方法
$ \boldsymbol{A}=\left[\begin{array}{ccc}{t}_{11}{u}_{11}& \cdots & {t}_{1n}{u}_{1n}\\ ⋮& {t}_{ij}{u}_{ij}& ⋮\\ {t}_{m1}{u}_{m1}& \cdots & {t}_{mn}{u}_{mn}\end{array}\right] $ |
在矩阵A中,测试数据为
测试用例在新旧版本程序中的方法覆盖与执行情况表示为
获取程序的方法调用图,方法调用图是一个有向图,其中每个节点都附加一个权值。建立方法调用图的邻接矩阵,若存在调用关系,则矩阵元素为1,否则为0。对矩阵进行遍历,统计每个方法可调用的方法个数。
1.2.1 目标方法包含错误的概率通过目标方法在新旧版本程序上的执行概率得到其包含错误的概率。假定方法集相互独立,初始方法
$ P\left({f}_{a}\right)=\left\{\begin{array}{l}\frac{P\left({f}_{i}\right)}{{w}_{i}}, a\ne 1\mathrm{且}P\left({f}_{a}\right)=0\\ 1.00, a=1\\ P\left({f}_{a}\right)+\frac{P\left({f}_{i}\right)}{{w}_{i}}, a\ne 1\mathrm{且}P\left({f}_{a}\right)\ne 0\end{array}\right. $ |
若被调用方法的执行概率不为0时,则叠加概率值,直至计算至最后一个节点。计算新旧程序中目标方法
$ P″\left({c}_{k}\right)=\left|P\right({c}_{k})-P\text{'}({c}_{k}\left)\right| $ |
将方法调用图中所有非叶子节点的权值
$ N\left({f}_{i}\right)=\left\{\begin{array}{l}1, {f}_{k}\mathrm{为}\mathrm{叶}\mathrm{子}\mathrm{节}\mathrm{点}\\ \sum\limits _{i=a}^{b}N\left({f}_{i}\right), \mathrm{其}\mathrm{他}\end{array}\right. $ |
计算新程序中目标方法
$ S\left({c}_{k}\right)=P"\left({c}_{k}\right)\cdot N\left({c}_{k}\right) $ |
将
基于天牛须搜索算法的软件测试数据扩增方法可分为预处理和测试用例扩增两个模块,如图 1所示。
![]() |
Download:
|
图 1 MBAS模型 Fig. 1 MBAS model |
预处理模块主要包括程序静态分析和获取目标方法集,抽取方法调用图,使用原测试用例执行新旧程序,得到程序执行信息,获得目标方法集并对目标方法进行排序。测试用例扩增模块首先根据方法覆盖信息从原测试用例集中选取部分用例作为初始种群,再通过改进的天牛须搜索算法的位置更新公式引导天牛向最优解进化,最终生成覆盖目标路径的测试数据。
2.1 初始种群选择将原测试用例集在新程序中执行,得到程序执行信息矩阵,对于目标方法
使用代码分析工具Soot得到
$ {G}_{p}=\frac{{D}_{p}}{\sum\limits _{p=1}^{q}{D}_{p}} $ |
其中:
根据分支距离函数和分支嵌套深度设计适应度函数:
$ F\left(x\right)=\frac{1}{\epsilon +\sum\limits _{p=1}^{q}{G}_{p}\cdot {(1-1.001)}^{-{H}_{p}}} $ |
其中:
在D维解空间中,天牛位置
$ \left\{\begin{array}{c}{x}_{\mathrm{l}}=x+l\cdot d\\ {x}_{\mathrm{r}}=x-l\cdot d\end{array}\right. $ |
$ d = \left\lceil {\mathit{\boldsymbol{r}} \times \frac{2}{{{\mathop{\rm norm}\nolimits} (\mathit{\boldsymbol{r}})}}} \right\rceil $ |
其中:
当前位置天牛根据规则移动到下一个位置:
$ x\text{'}=x+s\cdot d\cdot \mathrm{S}\mathrm{i}\mathrm{g}\mathrm{n}\left(F\right({x}_{\mathrm{l}})-F({x}_{\mathrm{r}}\left)\right) $ |
其中:
在本文中,使用Metropolis准则更新天牛的下一步位置,若新位置
$ s = \left\{ {\begin{array}{*{20}{l}} {1 + s - \left\lfloor {s \times \frac{{{F_{{\rm{ave}}}} - F}}{{\frac{{{F_{\max }} - {F_{\min }}}}{2}}}} \right\rfloor , F \le {F_{{\rm{ave}}}}}\\ {s, F > {F_{{\rm{ave}}}}} \end{array}} \right. $ |
其中:
若达到最大迭代次数或测试数据覆盖目标路径,则输出测试数据,选取
基于天牛须搜索的测试数据扩增算法的具体步骤如下:
输入 旧版本程序P的测试用例集T,新版本程序P′
输出 覆盖P′的测试用例集T′
步骤1 抽取方法调用图,使用原测试用例集运行新旧程序,获得程序的执行信息,得到需覆盖的目标方法集。
步骤2 对目标方法集进行排序,逐个选取目标路径,进行分支函数的插桩。
步骤3 根据程序执行信息选取部分测试用例。
步骤4 判断是否满足终止条件(测试用例覆盖目标路径或达到最大迭代次数),若满足,则转步骤9。
步骤5 计算测试用例的适应值,确定全局最大适应值、最小适应值和假平均适应值。
步骤6 利用位置更新方程预测天牛的位置。
步骤7 根据Metropolis准则更新天牛下一步位置。
步骤8 更新步长,转步骤4。
步骤9 算法结束,输出测试数据集。
3 实验与结果分析 3.1 实验设置为验证MBAS方法的数据扩增效果,选用西门子工业程序集中的Schedule和Tcas、三角形判定程序Triangle以及基准程序NextDay作为实验中的测试程序,这些程序被广泛应用于验证不同测试方法的有效性[21]。被测程序的基本信息如表 1所示。
![]() |
下载CSV 表 1 被测程序的基本信息 Table 1 Basic information of the programs under test |
在实验中应用Eclipse IDE for Eclipse Committers(Mars.2)编程实现天牛须算法和测试程序。针对不同程序运行算法30次,取实验结果的均值进行比较。实验对比方法为基于遗传算法(Genetic Algorithm,GA)的测试数据扩增方法(下文简称为GA方法)和基于粒子群优化(Particle Swarm Optimization,PSO)算法的测试数据扩增方法(下文简称为PSO方法),具体参数设置如表 2所示。
![]() |
下载CSV 表 2 对比方法参数设置 Table 2 Parameters setting of the comparison methods |
实验选择GA和PSO方法与本文MBAS方法进行比较,在相同的环境下记录每种方法的迭代次数和运行时间,并计算实验数据的均值和标准差,实验结果如表 3和表 4所示。
![]() |
下载CSV 表 3 3种方法扩增测试数据的迭代次数 Table 3 The number of iteration of three methods to augment test data |
![]() |
下载CSV 表 4 3种方法扩增测试数据的运行时间 Table 4 The running time of three methods to augment test data |
以程序NextDay为例,在表 3中,GA方法需迭代39.0次,PSO方法需迭代27.1次,MBAS方法仅需迭代17.8次即可生成覆盖目标路径的测试数据。在表 4中,GA方法的运行时间为1.033 s,PSO方法的运行时间为0.481 s,而MBAS方法的运行时间仅为0.261 s。在迭代次数和运行时间上MBAS方法明显优于其他方法。
对实验结果中的迭代次数进行计算:
$ v\left(A\right|B)=\frac{e\left(B\right)-e\left(A\right)}{e\left(B\right)} $ |
其中:
![]() |
Download:
|
图 2 MBAS方法相对GA和PSO方法的扩增效率提升结果 Fig. 2 Improvement results of augmentation efficiency for MBAS method compared to GA and PSO method |
在图 2中,MBAS方法的扩增效率均高于GA和PSO方法。对于输入实参个数少的被测程序Triangle和NextDay,提升的平均扩增效率分别为48.11%和44.33%,而对于Schedule和Tcas,提升的平均扩增效率仅为28.48%和28.42%,即测试数据处于低维空间时扩增效率提升的更明显。对于测试数据扩增效率,MBAS方法比GA方法约平均提升了49.91%,比PSO方法约平均提升了24.76%。
根据表 3和表 4中的标准差,对于被测程序,MBAS方法迭代次数的平均标准差为4.15,均小于GA方法的平均标准差25.62和PSO方法的平均标准差7.85;MBAS方法运行时间的平均标准差为0.163,均小于GA方法的平均标准差0.511和PSO方法的平均标准差0.197,即MBAS方法具有更好的稳定性。
通过测试数据的迭代次数和目标路径覆盖率来评价不同回归测试数据扩增方法的能力,以程序Triangle为例,3种方法的目标路径覆盖率如图 3所示。
![]() |
Download:
|
图 3 3种方法的目标路径覆盖率对比结果 Fig. 3 Comparison results of target path coverage of three methods |
由图 3可知,MBAS方法的折线位置位于GA和PSO方法的上方,当迭代次数相同时,MBAS方法对目标路径的覆盖率最大;当目标路径覆盖率相同时,以100%为例,MBAS方法所需的迭代次数最少,优先完成路径覆盖,即MBAS方法在迭代次数和目标路径覆盖率方面均具有一定的性能优势。
通过上述分析可知,对于被测程序,MBAS方法可以有效利用原测试集,快速演化生成覆盖目标路径的测试集。
4 结束语本文提出一种基于天牛须搜索的软件测试数据扩增方法MBAS,采用目标方法覆盖信息分析需要测试的方法,通过计算目标方法包含错误的影响度,对包含错误影响度大的目标方法进行优先分析生成测试数据集,并利用原测试数据集的目标方法覆盖信息来衡量测试数据的优劣,最终使用天牛须搜索算法演化测试用例使其覆盖目标路径。通过对多个程序进行测试,并将该方法与基于GA和PSO的测试数据扩增方法进行比较,实验结果表明,MBAS方法在测试数据的扩增效率和稳定性上均具有明显的性能优势。但由于天牛须搜索算法未能较好解决高维空间中解的收敛速度较慢的问题,因此后续将对此做进一步改进,提升MBAS方法在高维空间中的扩增效率。
[1] |
YOO S, HARMAN M. Regression testing minimization, selection and prioritization: a survey[J]. Software Testing, Verification and Reliability, 2012, 22(2): 67-120. DOI:10.1002/stv.430 |
[2] |
ZHANG Z Y, CHEN Z Y, XU B W, et al. Research progress on test case evolution[J]. Journal of Software, 2013, 24(4): 663-674. (in Chinese) 张智轶, 陈振宇, 徐宝文, 等. 测试用例演化研究进展[J]. 软件学报, 2013, 24(4): 663-674. |
[3] |
HARDER M, MELLEN J, ERNST M D. Improving test suites via operational abstraction[C]//Proceedings of the 25th International Conference on Software Engineering. Washington D.C., USA: IEEE Press, 2003: 60-71.
|
[4] |
WU C, GONG D W. Evolutionary generation of test data for regression testing based on path correlation[J]. Chinese Journal of Computers, 2015, 38(11): 2247-2261. (in Chinese) 吴川, 巩敦卫. 基于路径相关性的回归测试数据进化生成[J]. 计算机学报, 2015, 38(11): 2247-2261. |
[5] |
YOO S, HARMAN M. Test data regeneration: generating new test data from existing test data[J]. Software Testing, Verification and Reliability, 2012, 22(3): 171-201. DOI:10.1002/stvr.435 |
[6] |
XU Z H, COHEN M B, ROTHERMEL G. Factors affecting the use of genetic algorithms in test suite augmentation[C]//Proceedings of the 12th Annual Conference on Genetic and Evolutionary Computation. New York, USA: ACM Press, 2010: 1365-1372.
|
[7] |
QI D W, ROYCHOUDHURY A, LIANG Z K. Test generation to expose changes in evolving programs[C]//Proceedings of IEEE/ACM International Conference on Automated Software Engineering. New York: ACM Press, 2010: 397-406.
|
[8] |
PEARL J. Probabilistic reasoning in intelligent systems: networks of plausible inference[J]. Computer Science Artificial Intelligence, 1988, 70(2): 1022-1027. |
[9] |
JIANG B, TSE T H, GRIESKAMP W, et al. Regression testing process improvement for specification evolution of real-world protocol software[C]//Proceedings of the 10th International Conference on Quality Software. Washington D.C., USA: IEEE Press, 2010: 62-71.
|
[10] |
GONG D W, REN L N. Evolutionary generation of regression test data[J]. Chinese Journal of Computers, 2014, 37(3): 489-499. (in Chinese) 巩敦卫, 任丽娜. 回归测试数据进化生成[J]. 计算机学报, 2014, 37(3): 489-499. |
[11] |
YIN P C, BEN K R. Path-directed regression test suite augmentation[J]. Computer Engineering and Science, 2014, 36(11): 2159-2163. (in Chinese) 殷鹏川, 贲可荣. 基于路径引导的回归测试用例集扩增方法[J]. 计算机工程与科学, 2014, 36(11): 2159-2163. DOI:10.3969/j.issn.1007-130X.2014.11.018 |
[12] |
WANG S Y, WEN C Y, SUN J Z. Test data augmentation method based on adaptive particle swarm optimization algorithm[J]. Journal of Computer Applications, 2016, 36(9): 2492-2496. (in Chinese) 王曙燕, 温春琰, 孙家泽. 基于自适应粒子群优化算法的测试数据扩增方法[J]. 计算机应用, 2016, 36(9): 2492-2496. |
[13] |
WU C, GONG D W, YAO X J. Selection of paths for regression testing based on branch coverage[J]. Journal of Software, 2016, 27(4): 839-854. (in Chinese) 吴川, 巩敦卫, 姚香娟. 基于分支覆盖的回归测试路径选择[J]. 软件学报, 2016, 27(4): 839-854. |
[14] |
XU Z, KIM Y, KIM M, et al. Directed test suite augmentation: an empirical investigation[J]. Software Testing, Verification and Reliability, 2015, 25(2): 77-114. DOI:10.1002/stvr.1562 |
[15] |
WANG S Y, GAO L, SUN J Z. Search-based hierarchical regression test suite augmentation method[J]. Application Research of Computers, 2019, 36(7): 2075-2080. (in Chinese) 王曙燕, 高露, 孙家泽. 基于搜索的分层回归测试数据集扩增方法[J]. 计算机应用研究, 2019, 36(7): 2075-2080. |
[16] |
XU Z H, KIM Y H, KIM M Z. Directed test suite augmentation: techniques and tradeoffs[C]//Proceedings of the 18th ACM SIGSOFT International Symposium on the Foundations of Software Engineering. New York, USA: ACM Press, 2010: 257-266.
|
[17] |
PHIL M. Search-based software test data generation: a survey[J]. Software Testing, Verification and Reliability, 2004, 14(2): 105-156. DOI:10.1002/stvr.294 |
[18] |
JIANG X Y, LI S. Beetle Antennae Search Without Parameter Tuning(BAS-WPT) for multi-objective optimization[J]. Filomat, 2020, 34(15): 5113-5119. DOI:10.2298/FIL2015113J |
[19] |
WANG J, CHEN H. BSAS: beetle swarm antennae search algorithm for optimization problems[EB/OL]. [2020-06-14]. https://arxiv.org/abs/1807.10470.
|
[20] |
KOREL B. Automated software test data generation[J]. IEEE Transactions on Software Engineering, 1990, 16(8): 870-879. DOI:10.1109/32.57624 |
[21] |
DO H, ELBAUM S, ROTHERMEL G. Supporting controlled experimentation with testing techniques: an infrastructure and its potential impact[J]. Empirical Software Engineering, 2005, 10(4): 405-435. DOI:10.1007/s10664-005-3861-2 |