本文最初发表于 IEEE Software 杂志。IEEE Software杂志提供了有关当今战略技术问题的可靠的、经过同行评审的信息。为了应对运营可靠而又灵活的企业的挑战,IT经理和技术主管需要依靠IT专业人员提供最先进的解决方案。
机器人被广泛应用于大量重复性任务。 那为什么不将它用于软件测试?机器人测试向测试人员展现了一种新的测试形式,比以前所见过的都更接近黑盒测试。为此,我们开发了Axiz,用于移动应用的机器人测试生成器。在这篇文章中,我们将我们的方法与基于模拟的测试自动化进行比较,描述了一些能从使用机器人测试中获益(甚至是必须使用机器人测试)的场景,并展示了我们如何将Axiz应用于Google计算器应用程序的测试。
基于机器人的测试可以解决从桌面到移动计算的巨大转变所带来的挑战[1][2]。随着人们的常用设备从桌面设备转变为移动设备,这一转变趋势预计将会加速爆发[3]。在这个新兴的移动世界中,我们比以往任何时候都需要自动化软件测试。但是,我们可能需要重新考虑软件测试的一些原则。
移动设备支持丰富的用户交互输入,比如通过触摸屏进行手势操作、通过传感器(GPS、加速度计、气压计、NearId通信等)得到各种信号。它们为异构和动态环境中的大量用户提供服务,例如地理位置和网络基础设施。为了全面地探索和发现缺陷,测试必须考虑在各种测试场景下与各种传感器的复杂交互。一项关于移动应用程序开发的调查表明,目前移动应用测试实践主要依赖手工测试,而手工测试本身是低效且存在偏差的[4]。诸如 Appium 、 Robotium 和 UIAutomator 等框架可以实现一定程度的测试自动化。然而,它们依赖人工来设计测试脚本,就会成为瓶颈。
幸运的是,Android测试自动化相关研究最近有了很多新进展[5][6][7][8]。然而,这些技术使用侵入式(部分或全部白盒)方法执行测试用例,并且假设测试工具享有开发者权限,而实际情况并不总是如此。
这些技术中很多需要修改应用程序代码甚至操作系统,而最接近黑盒测试的方法仍需要通过测试套件与被测应用程序(AUT)通信。这不是真正的黑盒测试,因为它依赖于测试套件与被测应用程序之间的机器对机器接口。
真正的黑盒测试方法将不会作假设,而只依赖于人与应用之间的设备级网络物理接口。在这个抽象级别进行测试能更好地模拟真实用户的体验,从而可以得到更接近真实场景的测试用例。此外,这种方法本质上是与设备无关的,在可能涉及2000多个不同待测设备的情况下可以带来相当大的好处[9]。
手持设备的出现使我们需要重新考虑黑盒测试的真正含义。移动应用程序的用户体验与桌面应用程序截然不同,现有的机器对机器黑盒测试缺乏真实性、使用情况敏感度以及快速并廉价地生成可操作的测试用例所需的跨平台灵活性。
本节列出了机器人测试的宣言,采用这套方法生成的测试用例能以真正的黑盒(完全非侵入式)方式执行。表1对手动测试、基于模拟的测试和机器人测试进行了比较。
对于Android测试,MonkeyLab基于应用使用数据生成测试用例[10]。研究人员还发布了几种方法用于为Web系统提供真实的自动化测试输入[11]。然而,这些基于自动化测试输入的系统并不是针对移动平台的,而在关于如何生成自动化测试输入的文献中对测试用例的真实性几乎没怎么提到。
如果开发人员认为测试集与真实情况不一致,他们就不会对出现崩溃的测试集采取任何行动。此外,由于缺乏领域知识,与真实情况不符的测试会让自动测试数据的生成变得很困难。移动计算还引入了另外一个问题:人类可能无法执行测试。例如,测试可能需要使用超过五个手指同时点击屏幕。
相比之下,机器人测试套件可以模拟人的手势操作。虽然可能有一部分手势是机器人无法模拟的(还有一些手势可能机器人可以操作但人类无法重复),但至少机器人手势同为身体手势。因此,相比现在的非机器人测试环境模拟的虚拟手势——只是简单地在被测设备端生成一系列事件,机器人手势更接近真实的人机交互。
目前已有的白盒自动化测试和(声称的)黑盒自动化测试都需要修改被测设备和操作平台中的一个或两者皆要修改。即使是所谓的黑盒技术也是通过模拟信号与应用程序通信,而不是通过移动设备上真实存在的传感器(例如触摸屏或重力传感器)触发的信号。
如前所述,机器人测试使用与人类用户相同的网络物理接口。它不太容易受到底层平台、API接口和实现细节的变化的影响。在如今这个上市时间至关重要的世界,能够在不同平台上进行快速部署是一个相当大的优势。
人工测试是相当昂贵的,虽然它有更好的真实性和设备独立性。反之,目前的自动化测试数据生成则相对便宜,仅依赖于计算时间,但它缺乏真实性和设备独立性。机器人测试则能达到最佳的成本效益比,它结合了人工测试和机器对机器自动测试的优点。
虽然从历史上来看机器人技术曾经非常昂贵,但如今机器人技术的成本正在迅速下降。虽然众包也可以降低人工测试的成本[12],但说到底还是不可能比机器人测试更便宜。
传统的自动化测试对被测系统提出了许多假设,而人工测试生成测试数据时提出的假设较少。机器人测试在提出假设的数量上更接近人工测试,但是它能够低成本地生成大量测试用例这一点则更接近现有的自动化测试。
图1展示了Axiz的架构,包括两个高级组件:机器人测试生成器和机器人测试执行器。
机器人测试生成器分析被测设备,并使用提取到的信息(包括应用程序类别、静态字符串和API)来调整真实性模型。该模型使用之前收集的经验数据,其中包括已知的真实场景测试用例。
表1:选择手动测试、基于模拟的测试或机器人测试的参考标准
基于对用户使用情况的观察结果,我们得到了一个完整的属性列表(例如两个相邻事件之间的延迟、事件类型和事件模式),其中涵盖了潜在的真实场景测试用例的特征和属性。我们希望这些特征能够反应真实用户环境中发生的情况,以便Axiz利用它们来指导和约束自动化测试数据生成。
图1. Axiz机器人测试系统的架构。机器人测试生成器生成基于真实场景的测试用例。机器人测试执行器剔除无法执行的测试用例并执行其余的测试用例。
机器人测试生成器将真实性模型和被测设备信息传递给进化搜索组件,以生成和改进测试用例。这些测试用例的真实性来源于两个方面。首先,我们通过重用和扩展基于真实场景的测试用例(例如Robotium或Appium测试脚本),改进应用程序测试人员以前手动编写的测试。其次,通过搜索由真实性模型约束的解决方案空间,重点生成满足早先由众包测试确定的约束条件的测试用例。
我们基于测试用例的性能(如代码覆盖率和故障发现率)和由真实性模型评定的真实性来评估生成的测试用例的质量。
我们通过在真实设备上执行用例来进一步验证候选的测试用例,使这些用例与用户或手动测试人员操作的方式大致相同。机器人测试执行器将代码形式的测试脚本转换为机器可执行的命令,然后在机器人手臂上执行它们。
机器人手臂可以与移动设备进行非侵入式地交互,就像人类一样。这个过程需要利用反向运动学和校准组件使操纵器的动作更准确。摄像头监控移动设备的状态。机器人测试执行器通过计算机视觉技术进一步处理来自摄像头的图像数据,包括执行对象检测和预测点对照。
最后,机器人测试执行器将执行过程中记录的所有过程数据发送到测试筛选器,以确定候选测试用例是否可以在真实场景中执行。如果无法执行,测试执行器会将其过滤掉。否则,Axiz将保存该测试用例以便后续再次使用。
我们开发了Axiz的原型来演示这套系统的可行性(见图2)。我们使用一套廉价、适用性广且通用的成品硬件组件来开发这个原型。我们使用3D视觉自校准功能[13]来校准和调整机器人的机械手,使系统得以可靠运行,并为预测点对照器提供输入。
机械手是一个基于Arduino的四轴机器人手臂。它由重复定位精度为0.2 mm的步进电机驱动。每个轴的最大移动速度从115至210度/秒不等(这是负载为200克时的计算结果,这个最大移动速度对于大多数移动设备来说都已经足够大了)。在机械手的末端是用于模拟手指手势的触控笔。
一个外置的CMOS 1080像素摄像头监控测试执行。我们在配置有2.3GHz CPU和16GB RAM的MacBook Pro笔记本电脑上运行测试生成器和机器人控制器。
我们利用Python中的反向运动学组件控制机器人手臂。对象检测器和预测点对照器则基于OpenCV库实现。机器人测试生成器使用(目前最先进的)工具Sapienz[14]并应用NSGA-II(非支配排序遗传算法II)——一种广泛使用的多目标遗传算法,进行基于多目标搜索的软件测试。这个工具可以生成一系列测试事件,用最少的测试事件实现更高的测试覆盖率和故障发现率。
Google计算器应用程序的安装数已经达到了500万到1000万次[15]。虽然Google计算器的功能很简单,但不失为一个非常重要的基于真实场景的应用程序,因此通过它能够展示真正的黑盒机器人测试的潜力。
我们使用机器人测试生成器来生成与真实场景相符的测试用例,并用机械手臂执行测试。 被测设备是Nexus 7平板电脑,配置了普通的用户权限和Android官方操作系统(无需修改)。作为对比,我们使用另一台Nexus 7,并对它进行更传统的侵入式测试。第二台Nexus 7直接连接到MacBook上的机器人控制器。它对应的测试工具具有开发者权限,并且可以修改操作系统。
图3展示了整个测试过程。MacBook的解释器组件将事件指令转换为机器人手臂控制器的运动规律。然后该控制器基于反向运动学将运动规律转换为关节角度指令。如图3所示,机器人手臂点击第一台Nexus 7上的按钮执行测试。预测点对照器监控每一个测试事件。在执行每一个测试步骤之后,预测点对照器通过外置摄像头捕获图像并验证移动GUI的状态。
Axiz准确地执行了生成的机器人测试用例中每一个测试事件,并通过了所需的预置检查点,使Sapienz的能力得以发挥到极致。
图2:用四轴机器人手臂测试移动应用程序。我们使用一套廉价、适用性广且通用的成品硬件组件进行开发。
图3:使用Axiz测试一个真实的计算器应用程序。Axiz准确地执行了生成的机器人测试用例中每一个测试事件,并且通过了所需的预置检查点。
Axiz执行测试的视频可以在这里查看。在这个视频中,我们将Axiz与传统的自动化测试工具并排展示,后者不使用机器人手臂,而只是产生一系列测试事件。该视频表明,用廉价的成品硬件开发的机器人手臂可以产生一组相同的测试事件,但更接近真实的使用场景,从而实现更好的设备独立性和真实性。
我们感谢Andreas Zeller在第36届CREST(进化、搜索和测试研究中心)开放研讨会[16]上所作的演讲,在演讲中他展示了一个有趣的视频,视频中一款人造手臂自动与移动设备进行交互。这成为了我们研究的灵感之一。
Ke Mao是伦敦大学学院进化、搜索与测试研究中心(CREST)的研究生。读者可以通过k.mao@cs.ucl.ac.uk与他联系。
Mark Harman是伦敦大学学院进化、搜索与测试研究中心(CREST)的主任。读者可以通过mark.harman@ucl.ac.uk与他联系。
Yue Jia是伦敦大学学院进化、搜索与测试研究中心(CREST)的软件工程讲师。读者可以通过yue.jia@ucl.ac.uk与他联系。
本文最初发表于 IEEE Software 杂志。IEEE Software杂志提供了有关当今战略技术问题的可靠的、经过同行评审的信息。为了应对运营可靠而又灵活的企业的挑战,IT经理和技术主管需要依靠IT专业人员提供最先进的解决方案。
查看英文原文: Robotic Testing of Mobile Apps for Truly Black-Box Automation
感谢薛命灯对本文的审校。
原文转自:http://www.infoq.com/cn/articles/mobile-robotic-testing-automation