当前位置: 首页 > 科技观察

Android的自动测试输入生成-我们完成了吗-

时间:2023-03-11 22:10:04 科技观察

Android的自动测试输入生成:我们到了吗?在第30届IEEE/ACM国际自动化软件工程会议(ASE2015),2015年。摘要:与所有软件一样,移动应用程序(Apps)必须经过全面测试,以确保它们的行为和行为符合开发人员的预期。因此,近年来无论是研究人员还是从业人员都开始研究移动应用程序的自动化测试方法。特别是,由于Android的开源特性及其巨大的市场份额,已经有大量关于生成Android应用程序测试输入(通常是GUI事件,如点击、滑动和输入)的工具的研究。目前,有许多这样的工具,它们具有不同的生成测试输入的方式、测试策略和不同的特定启发式方法。为了更好地了解这些现有方法的优缺点,并了解如何改进这些工具,我们对Android的主要现有测试输入生成工具进行了全面比较。我们根据四个指标评估这些工具的有效性:易用性、多平台兼容性、代码覆盖率和检测故障的能力。我们的结果清楚地展示了Android应用程序输入生成的最先进技术,并确定了未来的研究方向,如果研究得当,可能会导致更有效和高效的Android测试工具。简介:现有的自动化测试输入生成技术有很多,它们有不同的输入生成方法、测试策略和特定的启发式方法。然而,尚不清楚这些不同方法的优缺点是什么,它们的总体效果如何,以及是否需要改进以及如何改进。为了回答这些问题,我们对现有的Android测试输入生成技术进行了比较研究。1本研究有两个目标。第一个目标是评估这些技术(和相应的工具),比较它们,并评估它们可能更适合哪些测试环境(例如,应用程序类型)。我们的第二个目标是更好地理解Android测试输入生成中涉及的一般权衡(tradeoffs),并确定可以改进或定义新技术的现有技术。工具介绍:Android测试输入生成工具根据其不同的测试策略可以分为以下3类:随机测试策略:基于随机测试策略的输入生成器的优点是可以高效的生成事件,这使得它们特别适合用于压力测试。它们的主要缺点是随机策略很难产生特定的输入。此外,这些工具不知道应用程序的多少行为已经被覆盖,因此可能会生成冗余事件。***,他们没有测试完成的停止标准,而是采取手动指定的超时。使用这种策略的工具:Monkey、Dynodroid、Nullintentfuzzer、IntentFuzzer、DroidFuzzer。基于模型的测试策略:一些Android测试工具构建并使用应用程序的GUI模型来生成事件并系统地测试应用程序的行为。这些模型通常是有限状态机,应用程序活动作为状态,GUI事件作为转换。一些工具通过区分活动状态来构建精确模型(例如,具有启用和禁用按钮的相同活动将表示为两个单独的状态)。大多数工具动态构建这样的模型,并在所有生成的事件达到现有状态时停止测试。使用这种策略的工具:GUIRipper、ORBIT、A3E-Depth-First、SwiftHand、PUMA系统的测试策略:应用程序的部分行为只能由特定输入触发,这也是为什么一些Android测试工具使用更复杂的技术(例如符号执行和进化算法)来指导对以前未发现的代码的测试。对于无法通过随机策略触发的应用程序行为,使用系统测试策略具有明显的优势。然而,这些工具的可扩展性远不如那些使用随机策略的工具。使用此策略的工具:A3E-Targeted、EvoDroid、ACTEve、JPF-Android表1.AndroidApps测试输入生成工具概述。浅灰色行表示对本文实验中研究的工具的实证研究:实验使用4个指标评估测试输入生成工具:易用性、多平台兼容性、代码覆盖率和检测故障的能力。我们共选取了68个Android手机应用,使用VirtualBox提供实验虚拟机。每台虚拟机配置2核6GB内存,配置三个Android版本的虚拟机。对应的SDK版本为:10(Gingerbread)、16(Ice-creamsandwich)core19(Kitkat)。对于每个应用程序上每个工具的一次运行,我们将虚拟机重置一次并重复10次以取实验数据的平均值。对于每次运行,我们使用Emma(http://emma.sourceforge.net/)收集代码覆盖率。我们在虚拟机测试过程中通过收集日志(也叫logcat)的方式获取应用故障,并人工审核这些应用故障的真实性。1.易用性和多平台兼容性表2报告了该工具是否开箱即用(NOEFFORT),是否需要一些努力(LITTLEEFFORT),是否配置正确并修复了一个小问题,或者是否需要付出巨大的努力(主要努力)。截至目前,我们只是报告我们安装每个工具的经验。表2.每个工具的易用性和在常用Android版本上的兼容性2.代码覆盖率和故障检测能力从图1中,我们可以看到,平均而言,Dynodroid和Monkey优于其他工具,其次是ACTEve。其他三个工具(即A3E、GUIRipper和PUMA)的覆盖率相当低。尽管如此,即使是那些平均实现低覆盖率的工具也可以为某些应用程序实现非常高的覆盖率(大约80%)。我们手动调查了这些应用程序,发现它们是最简单的应用程序。图1.每个工具在每个应用程序上运行10次的覆盖率差异图2.每个工具随时间的覆盖率图2显示所有工具都在几分钟内(5到10分钟之间)达到最大覆盖率,唯一的例外是GUIRipper。造成这种差异的一个可能原因是GUIRipper经常从其初始状态重新启动测试,这是一项耗时的操作。(这实际上是SwiftHand通过实施限制重启次数的测试策略解决的主要问题。)图3.工具触发的故障分布图3显示只有少量故障涉及自定义异常(即在中声明的异常).其中绝大多数会导致标准Java异常,其中最常见的是NullPointerExceptions。摘要:在本文中,我们对Android的主要现有测试输入生成工具(和相应技术)进行了比较研究。我们根据四个标准评估了这些工具:易用性、Android框架兼容性、实现的代码覆盖率和故障检测能力。基于这种比较的结果,我们确定并讨论了不同技术的优缺点,并强调了该领域未来研究的潜在方向。致谢本文由南京大学软件学院2018级硕士田元涵翻译转载。