基于GUI层变异算子的Web应用回归测试用例自动修复研究文献综述

 2023-08-11 09:08
  1. 文献综述(或调研报告):

Choudhary等人在2011年提出了一种基于差异性测试的针对回归测试的测试脚本自动化修复方法,并据此实现了修复工具WATER[1]。WATER比较测试用例在web应用的两个连续版本上的行为差异,据此给出修复建议。具体来说,它先在前一个版本上运行测试用例,保存每一条指令对应DOM节点的属性,然后在后一个版本上运行,分析测试工具给出的错误日志,将错误归类到预先定义的类别,并据此提出修复建议。WATER的错误分类没有经过实验论证,粒度较粗且不一定合理,且依赖于特定的测试工具。

Hammoudi等人在WATER的基础上开发了WATERFALL[20],该算法细化了WATER的粒度,为web应用连续两个主要更新中的小版本修复失效脚本,直到新版本中测试用例能够通过。

Alshahwan等人在2008年提出了一项在回归测试中修复session数据的方法[2]。此方法白盒检测web应用程序更改后的结构,然后应用一系列技术将检测到的更改映射到修复操作。Session被解析为一串点-边对,节点代表页面,边代表从一个页面跳转到另一个页面的链接。修复分为两种,单独URL修复和序列修复,序列修复又分为边删除、节点删除和默认这三种情形。

Oliveira等人在2015年提出GUI层变异算子的定义和分析[3]。变异算子通常被用于评估新测试工具和测试套件的质量。它在被测试的系统中埋下变种,根据测试用例是否能发现变种来评估质量。传统变异算子被用在方法级左右的低层级,并不适用于GUI层级。本论文提出了GUI层变异算子的定义,并与传统变异算子在GUI层的效果进行了对比。

Leotta等人在2015年提出了一种基于多定位器增强测试用例健壮性的方法[4]。本方法根据多种算法或规则,针对每个元素生成多个Locator,并根据算法或规则的权重投票返回最合适的Locator。当旧版本的定位无法在新版本中定位到元素时,可以选取原先未被选中的定位器重新定位。他还另外发表了两种改进XPATH生成算法[13][14],用以提高测试用例的健壮性。

Daniel等人在2009年开发了修复单元测试的ReAssert算法[5]。该算法使用从失效测试用例中获得的实际值替换预期值。他们后来还使用符号执行来操控控制流,处理包含对定义了预期值的变量进行操作的实例。Huang S等人开发了一个自动修复GUI测试套件的遗传算法[12],该算法迭代能提升测试套件覆盖率的测试用例的同时,规避不可行序列。

GUI测试与web应用测试不属于同一领域,但由于其事件驱动机制,它面临的问题与web应用的十分相似。与网页应用不同的是,GUI通常不提供元素层次,所以这种信息要被主动提取。Memon等人开发了一种生成GUI图的方法,以此寻找不可用的测试用例并修复它们[6]。Grechanik等人则提出一项寻找GUI不同版本模型间差异的技术[7]。测试脚本将被静态分析来评估差异的影响,然后提供能够避免GUI应用可能出现的运行失败的建议。Zhang S等人开发了修复桌面应用中失效的GUI工作流的工具FLOWFIXER[10]。Gao Z等人也开发了基于模型的无法使用的GUI测试脚本修复算法SITAR[11]

Leotta等人在2014年探讨过web应用的DOM和可视化测试套件的发展形势和维护成本[15]。而Stocco等人则探索了页面对象(page object)的自动化生成[16][17][18][19],页面对象将测试用例失效的原因限定到了单独的一个类,在某种程度上预防了失效发生。

缺少测试预言时,探测测试用例是否失败时关键问题。Dobolyi等人开发了一种能在回归测试中探测错误的技术,使用了一个起源于其它相似web应用的精确比较器[8]。他们测试的结果表明,此精确比较器比基于当前生产中使用的比较器的diff工具要好很多。Roest等人则在AJAX的web应用上使用了类似的方法,即使用一个管线式的预言比较器来忽略回归测试中不相关的不同点[9]

将这些测试用例的自动化修复方法进行分类,可以分为两种:一种是在生成测试用例时,改进生成定位的方法,提高测试用例的健壮性,减少其在页面改变时受到的影响;第二种是,收集测试用例在新旧版本中运行的节点信息和错误日志,修复定位错误或其他错误。

剩余内容已隐藏,您需要先支付 10元 才能查看该篇文章全部内容!立即支付

以上是毕业论文文献综述,课题毕业论文、任务书、外文翻译、程序设计、图纸设计等资料可联系客服协助查找。