Using Evolutionary Computation to Improve Mutation Testing
主要讲变异测试中使用遗传算法。
Motivation:遗传算法可以减少变异体子集而不会丢失重要信息。分析了突变测试的最新进展,这有助于降低与此技术相关的成本,并提出应用它们来解决进化突变测试(EMT)中的当前缺陷.
将重点放在突变测试中提出的方法应用于进化突变测试,这是一种基于遗传算法选择减少的突变体集的技术,并且整合以下方法:
1.基于质量度量的选择性变异。
我们可以选择丢弃一部分突变操作符(基于操作符的选择性突变)或优先选择最有价值的操作符(基于秩的突变体选择)的突变体。
进化变异测试的提出:
Dom´ınguez-Jim´enez, J.J., Estero-Botaro, A., Garc´ıa-Dom´ınguez, A., Medina-Bulo, I.: Evolutionary mutation testing. Inf. Softw. Technol. 53(10), 1108–1123 (2011). http://dx.doi.org/10.1016/j.infsof.2011.03.008
潜在等效变异体:测试套件未检测到的变异体
难以杀死的变异体:仅通过特异性测试案例杀死的变异体,不会杀死其他变异体
EMT可以找到强突变体。
EMT降低变异测试成本的两个途径:
- EMT不是从所有变异算子生成突变体,而是仅根据质量度量在排名后从最佳值运算符生成突变体。
- 不是以相同的概率产生突变体,而是以基于秩的方式选择突变体:从最佳值算子中选择突变体的概率更高。 该标准应用于在每一代遗传算法中随机产生的突变体子集。
应用于C ++中的类级别的变异算子时,基于突变的选择产生比基于变异算子的选择更好的结果。
EMT的优点:
通过删除分类底部的变异算子,EMT的效率得到提高,因为它将避免遗传算法产生低质量的突变体。遗传算法可以更快地找到可以导致测试套件增强的那些突变体。 这些突变体可以标记为抗性突变体。
非等价变异体存活的原因是:1.测试套件不覆盖突变体。2.测试套件覆盖突变体但是却不能揭示其突变。
而第二点可以通过基于质量度量的突变体生成方式来改进。
2.多目标进化突变测试
在遗传算法的适应度函数方面应该考虑:
- 最大化覆盖范围的影响:EMT不能区分等价变异体和抗性变异体,这样可以选择具有最高概率的非等价变异体。
- 最大化代码的覆盖范围:最好在整个程序的代码中传播突变。
- 最大化变异算子集中的散射
3.TCE (Trivial Compiler Equivalence)
TCE可以自动的检测一些等价变异体。显示出能够在C编码的程序中平均减少30%的等效突变体集.
TCE结合使用编译器gcc和实用程序diff:gcc用于编译代码并生成优化的可执行文件,而diff允许比较这些可执行文件以搜索程序的不同版本之间的等价。
该机制可以检测两种类型的变异体:
- 等价突变体的一个子集:原始程序的二元文件与突变体之间没有差异时,突变体被识别为等价。
- 重复突变体的子集:当从突变体衍生的二元文件等于从另一个突变体衍生的二元文件时,突变体被识别为重复的。
TCE中最昂贵的任务就是编译时间。
将EMT和TCE结合使用:
- 在执行EMT之前应用TCE,在这种情况下,编译所有突变体以创建可执行文件,TCE将它们与原始程序的可执行文件进行比较。然后标记由TCE检测为等价的那些突变体以避免它们可以在EMT的执行期间使用。
- 在执行EMT期间应用TCE。 在这种情况下,使用TCE分析在每一代中选择的突变体。 那些被认定为等价的突变体通过分配给它们的适应值来惩罚。
注意:
TCE仅适用于C程序。
在等价突变体和抗性突变体稍微不同的前提下,一些等价的突变体可能可以指导遗传算法选择新一代的抗性突变体。 因此,去除等价的突变体可能会影响对潜在等价突变体的搜索。
future:
尝试找到一种方法避免执行所有的测试用例来计算适应度函数,特别是在执行时间较长的时候。
CUT:Automatic Unit Testing in the Cloud
ISSTA’17-DEMOS, July 2017, Santa Barbara, CA, USA
Alessio Gambi, Sebastian Kappler, Johannes Lampel, and Andreas Zeller
通过分布式环境并行运行单元测试。
本文提出了一种云单元测试。一种在分布式执行环境中自动执行单元测试的工具。CUT为虚拟机或者容器分配适当的计算资源,并安排对它们执行测试,开发人员不需要更改现有的单元测试代码,并且可以轻松控制测试执行的资源分配和测试调度。执行期间,CUT监视器发布有关正在运行的测试的事件,这些事件启用了流分析。
网址:https://www.st.cs.uni-saarland.de/testing/cut/
在本文中,我们通过利用云等分布式执行环境的强大功能来解决加速测试执行的问题。
CUT的优势:
完全自动化和透明度,CUT采用面向切面编程(AOP)来隐藏访问云的低级机制,并且将测试执行分布在开发人员的远程资源上。包括在多个单一测试方法级别自动并行化测试执行的能力。
高效的资源分配和灵活性。大多数基于云的测试解决方案。开发人员无法轻松控制测试运行的位置和每个测试的资源数量。CUT开发人员可以决定单元测试是在本地还是远程,以及需要多少资源。CUT允许测试执行共享计算资源,从而提高测试的成本和效率。
测试依赖性,当前用于并行化测试的解决方案假设完全依赖于单元测试。但是,测试并不总是独立的,这导致了非确定性的测试执行和误报。CUT可以采取考虑到测试依赖性信息以实现确定性执行。
步骤:
set up:
config
test runners
准备好虚拟机后,根据集群策略将测试集中到独立的执行单元。根据部署策略将集群部署到本地或远程的测试运行器。根据调度策略命令测试执行。
这些策略都由开发者定义。
Execution:
每个测试运行器从其队列中查看要执行的下一个测试(对象)的引用。然后,自定义类加载器尝试延迟加载正确执行单元测试所需的类和数据。如果测试运行器已经可以使用它们,则执行继续。否则,自定义类加载器从类中提取类的字节码和数据。同时,测试运行器缓存类和数据,使得这些可以在后续测试执行中重用,可能最小化总体执行开销。
Monitoring and Reporting:
所有CUT组件都连接到共享事件序列以发布和接收监听事件。
云管理器发布事件,如虚拟机的启动或关闭。
测试运行器发布有关单元测试生命周期的事件:测试开始,完成和失败。
分析和报告组件将所有事件存储为pository以进行进一步数据分析。
porter组件面向开发人员并提供两种类型的报告:1.alive-report它捕获有关开发人员单元测试状态和上下文的事件流。2.测试执行的最终摘要,其中包括基本统计信息和有关失败测试的详细信息,即堆栈跟踪。
消息中间件采用Apache ActiveMQ
技术实现:
采用Java实现。测试开源工具Junit。采用maven自动化构建。云的中间件选用 JCloud-Scale 。