基于搜索测试数据生成的多目标方法 笔记

Pareto解集:一般情况下多目标优化问题中的多个目标函数之间是无法比较并且相互之间经常是冲突的,一个目标函数的改进往往以牺牲另外一个目标函数的值为代价的.因此可以看出多目标优化问题往往包含多个解,并且各个解之间无法比较其优劣性,这些解统称为Pareto解集。Pareto解集内的解没有优劣之分。

分支覆盖:目的是能找到遍历指定分支的测试用例。

测试集是分支充分的当且仅当程序控制流图的每个可达分支b存在一个能遍历b的测试用例。像生成这样的分支充分测试集的问题已经被前人列为搜索集问题。

进行测试用例生成时,将测试准则(如某些覆盖准则)转换为一个目标函数(objectiveFunction),从而将测试生成的问题转换为一个搜索优化问题。

基于搜索的测试生成技术是近年来新兴的软件测试技术,通过将测试用例生成转化为一个搜索过程,已取得重大研究进展并在软件生产实践中成功实用。

软件测试的本质是针对要测试的内容确定一组测试用例。

在自动化测试用例生成中,爬山法经常用于为达到某分支条件而进行的局部搜索。

进化算法由于具有强的全局搜索能力和较好的鲁棒性。

进化测试的方法:

面向覆盖方法(Coverage一OrientedAPproaches)主要基于一种对给予最大程序覆盖的用例适应度奖励的方法。

MarkHarman(A Multi–Objective Approach To Search–Based Test DataGeneration)等人首次提出基于搜索的多目标测试用例生成技术。Harman 第一次将测试用例生成问题转化为多目标优化问题,他使用分支覆盖和内存消耗作
为其两个不同优化目标。在算法选择上,Harman使用Deb的NSGAll和一个轻量级遗传算法(weightedGA),实验中以随机方法作为Benchmark,使用5个不同程序进行实验。实验证明基于多目标优化的方法很适合测试用例生成技术,同时他也指出在某些情况下,一个易于实现的只得到一个解的weightedGA方法要优于NSGAll。

最常见的进化算法是遗传算法。

进化测试的主要思想在于将测试用例生成的问题转化为一个进化搜索问题。进化测试时,将一串独立的编码作为一个个体,若干个个体组成一个种群,针对个体编码的解码即作为一个程序输入(用例),并使用该输入调用实际程序运行,而目标函数用来计算个体的适应度,适应度用以表示个体接近测试用例间的程度,测试过程依据其值对每个候选个体进行评价。在种群的进化过程中,选择、交叉、变异等进化算子得以应用于个体,采用适者生存的原则,直至找到最优个体或达到最大种群数,最后输出结果。

结构性测试广泛的用于工业实践和大多数的软件开发标准,传统结构性测试可采用的标准有语句覆盖、分支覆盖和条件覆盖等。将进化算法用于结构性测试就是在一定的测试覆盖标准下,使用进化搜索技术生成测试用例。

进化测试在结构化测试中得到了广泛关注,十多年来研究者们致力于为达到某种覆盖而通过进化搜索得到测试用例。比如在使用分支覆盖准则时,在程序控制流程图中的一个可达分支b,进化测试必须找到一个测试用例并执行使得b得以穿越或遍历。在寻找测试用例的过程中,人们将该问题转化为一个搜索问题,适应度用以衡量当前解与目标间的距离,借助一些启发式搜索技术,搜索过程得以引导并逐步趋近于测试目标,从而生成需要的测试用例,相应的分支得以执行"值得一提的是,作为一种最基本的覆盖标准,分支覆盖得到了很广泛的关注和使用,比如英国计算机标准组织强烈要求软件项目进行实施,在航空电子工业中甚至强制要求所有应用程序必须以分支覆盖准则进行充分测试。

2007年Harman[93]等人提出的基于多目标的进化测试不失为一个好方法,他将用例生成、错误发现及测试过程中其他度量结合起来,将其转换为一个多目标优化问题,这样一来进化测试的效力得以充分挖掘,并为进化测试的发展指明了方向。

对于多目标测试用例生成来说,每代种群中包含多个个体,每个个体代表一个用例集。因为对测试人员来说,最终都要选择某一个或某几个用例集来对程序进行测试,所以测试用例生成中个体多样性无非就是要保障最大化某种覆盖准则的要求,尽可能的使用一个或有限个用例集满足测试要求。

你可能感兴趣的:(基于搜索测试数据生成的多目标方法 笔记)