自动化测试 研究问题提纲_自动化测试技术应用效果实证研究

58afa4c8e357ca28f2fba0bc023d64e3.png

论文:G. Fraser, M. Staats, P. McMinn, A. Arcuri, and F. Padberg, “Does Automated Unit Test Generation Really Help Software Testers? A Controlled Empirical Study,” ACM Transactions on Software Engineering and Methodology (TOSEM), vol. 24, iss. 4, p. 23, 2015.

简介:

最近几年,自动测试生成研究收获颇丰,已经出现了多种自动化测试工具。这些自动化测试工具能够根据源码生成相应的测试代码,并达到较高的代码结构覆盖度,从而达到帮助测试人员构建能够检测故障的测试代码的目的。虽然这种假设持续了数十年,但迄今为止还没有确凿证据能够证实自动化测试的有效性。工业界对于自动化测试的应用相当有限,这表明自动化测试的效果有待商榷,自动化测试工具的实际价值可能不如预期。为了研究这个问题,我们进行了两项对照实验,比较了总共97名开发人员在手动编写测试和在自动单元测试生成工具EVOSUITE的帮助下编写测试。我们发现,一方面,自动化测试工具可以明显改善常用的质量指标,例如代码覆盖率。但是,另一方面,开发人员实际发现的错误数量没有明显的改善。实验的结果不仅对如何评估自动化测试生成工具产生了一些疑问,同时指出了在自动化测试生成工具大规模应用之前必要的改进和未来工作。

关键词:单元测试,自动化测试,分支覆盖,软件工程

简介:

关于“自动化测试技术是否真正帮助到软件测试人员”这个话题,最近受到了很多关注,本文从自动化测试代码生成的角度进行了研究。当使用自动化测试代码生成技术时,测试人员不需要手动编写整个测试代码,而是可以自动生成一组测试用例,并且只需要检查测试输入的输出与预期输出相匹配。尽管对于测试人员而言,自动化测试能明显降低工作量,但几乎没有证据表明它对实际软件测试有效。手动测试生成在工业中仍然占主导地位。

为了确定自动测试生成是否真的有助于实际软件测试,我们之前进行两次实验。第一次实验涉及49个开发人员,测试对象包括3个Java项目;第二次实验包括48个开发人员,测试对象扩展为4个Java项目。在每项研究中,开发人员被给予一个或两个包含故障的Java项目,并被要求进行手动测试或在自动化测试工具EVOSUITE的帮助下进行测试。根据代码结构覆盖率,错误查找率,变异杀死率和错误测试生成率来测量开发人员测试的表现。在两项研究中,总共使用了145种开发人员和Java项目的组合。

实验评估:

此次研究的目的是研究与传统的手动测试相比,测试人员使用自动测试生成工具时如何影响测试过程。我们的研究是围绕一个测试场景设计的,其中Java项目已经开发完成并且需要构建测试来发现代码的错误,并且稍后用于回归测试。因此,我们围绕以下研究问题(RQ)设计了实验:

RQ1:自动化测试能否帮助提升代码结构覆盖率?

RQ2:自动化测试能否检测出代码中更多的错误?

RQ3:测试人员能否发现自动化测试生成测试代码中的错误?

RQ4:自动化测试能否提高回归测试检错的能力(变异杀死能力)?

实验方法:

在实验开始前,我们为测试人员提供了JUnit注释语法的复习,以及可用的不同断言类型及其各种参数列表,还有Eclipse和Evosuite的使用教程。之后,让测试人员进行了短暂的热身练习来熟悉Eclipse、Junit和Evosuite插件,确保每个人都充分了解所涉及的工具和技术。

在实验中,测试人员在限定时间内,确定测试用例尽可能多地覆盖代码,发现错误。在实验过程中,即不允许测试人员与他人交流,或咨询其他来源以避免在实验结果中导致误差。

在实验过程中,将不同的测试方法和不同的Java项目进行组合实验,分配给一定数量的测试人员,确保产生足够的统计数据,以显示测试方法之间的影响。 此外,在研究过程中创建的测试用例总数非常高(超过1000),足以用于分析检查测试套件特性和故障检测有效性之间的相关性。

评估结果:

RQ1:在适合自动化测试生成的场景中,自动生成的测试代码比手动测试代码有更高的结构覆盖率。

RQ2:使用自动化测试工具并不能帮助检测到项目中的更多故障。

RQ3:自动化测试工具生成的测试代码,对测试人员寻找测试代码中的错误产生了负面影响。

RQ4:相对于手工测试代码而言,自动化测试工具生成的测试代码并不能保证拥有更高的变异杀死率,即在回归测试中,自动化测试生成的测试代码表现没有明显优势。

建议:

两项实验的结果表明,虽然相比于手动测试,使用自动化测试生成工具可以持续改进代码结构覆盖率,但这并未反映在测试人员检测当前或未来回归故障的能力上。这些结果强调了改进自动化测试生成工具的需求,这些工具不仅要能够实现更高的结构覆盖率,而且需要在测试人员实际使用时更容易发现代码中的故障。为了提高自动化测试工具的效果,我们提出以下建议:

  1. 即使自动化测试工具快速地生成了测试代码,测试人员仍需要花费大量时间来理解和尝试修复测试代码。因此,自动化测试工具需要努力创建更易理解的测试用例;
  2. 实验表明,测试代码的纠错能力和代码结构覆盖率并没有必然联系,因此,自动化测试工具不应该再以高覆盖率为追求;
  3. 测试的过程是难以完全自动化的,我们应该选择合适的方式,尝试把自动化测试技术和人工测试技术更好地结合起来,提高测试效率。

总结:

在此次工作中,我们进行了两项实验,以检验自动测试生成背后的核心假设:通过生成高覆盖率测试数据,我们可以帮助测试人员构建能够检测故障的测试代码。实验表明,这种假设似乎并不成立,实现了高覆盖率并不一定能提高测试软件的能力。

这一结果可被视为对软件测试研究界的呼吁,我们应该重新审视我的研究方向,将更多的精力投入到生成更友好的测试用例;选择更合适的测试断言; 寻找除覆盖之外更合适的评价指标和自动化测试方法这些方面。

除了专注于改善测试生成技术的未来研究之外,我们还需要进行进一步的实证研究,以更好地理解使用自动化测试生成的效果和问题,例如探索代码熟悉程度对测试的影响;被测代码复杂程度对测试的影响;自动化测试代码的维护难度等问题。

致谢

此文由南京大学软件学院2016级硕士赵源翻译转述。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值