RERAN:安卓系统的定时和点击的录制和回放——(1)

来源:互联网 发布:数据库系统发展历史 编辑:程序博客网 时间:2024/05/18 02:14

  摘要:智能手机、平板电脑等配有触摸屏的电子设备正日益流行起来,但多样化的输入方式使得研发和测试更加复杂。为了解决这一问题,我们设计了一个名为RERAN的工具,为安卓手机提供了记录-回放的功能。在智能手机领域,现有能够实现GUI级记录-回放功能的方法还不够完善。这些方法能否支持复杂的GUI手势取决于两点,设备的多种捕获信息传感器和精确的输入事件发生时机。面对挑战,我们直接获取手机上的低级事件流,这些事件流既包含了GUI事件,又有传感器事件,并能够以微秒级的精确度进行回放。除此之外,RERAN不需要app的源码即可实现app的重写,或对虚拟机和安卓平台进行修改。经验证,RERAN适用于各种情景:(a)对Google Play app榜前100名中的86个app支持回放功能;(b)对热门app支持bug重现功能,如Firefox, Facebook, Quickoffice;(c)能够快速执行。该通用方法能够帮助安卓的开发人员和研究人员。

  关键字:记录-回放,谷歌安卓

1. 介绍

  从办公软件到游戏再到社交网络,大量app的出现,使得智能手机和平板电脑的功能愈加强大并日渐流行起来。这些新兴设备的大热是由于用户交互体验得到了提升。可通过触摸屏也可以说通过多种驱动app行为的传感部件来达到交互的多元化(例如重力传感器,指南针,GPS等)。然而,这些特性也使得软件的开发人员、测试人员和维护人员面临着巨大的挑战。

  本文将着重介绍如何实现app的执行过程的精确记录及自动回放。记录-回放系统对于代码调试、测试、理解等过程来说都是有价值的。之前的GUI级记录-回放系统的实现方法不适用于现在的智能手机。这些工具根据离散的高级动作来捕获用户行为,很难表达和支持复杂的手势,也无法从传感器上捕获和回放事件。

  举个例子,考虑下热门游戏愤怒的小鸟该如何实现记录和回放。这款精致的游戏,没有标准的GUI元素,对时间极为敏感。我们的方法能够轻易解决这一问题,读者们可以到YouTube上观看视频[1],视频中展示了RERAN对愤怒的小鸟进行记录-回放的过程。事实上,我们的方法能够成功地对Google Play app榜前100名中的86个app支持回放功能。然而,现有的GUI级方法很难对这样的app进行记录和回放,请看下文。

  首先,GUI级工具(例如Android GUITAR[2], Abbot[3], HP WinRunner [4], IBM Rational Robot [5] and GUIcrawler [6]),特别是使用关键字行为规范来回放用户接口事件的工具。在这种规范中,输入事件从GUI级中抽离出来变为高级的表现方式,使用GUI对象的句柄或名称来和系统进行交互,例如clickTextBox1或type ‘‘Test123’’。然而愤怒的小鸟只有单个行为(屏幕),因此没有什么GUI元素,比如多屏、框架、菜单和输入框等,因为不能使用关键字行为工具执行。

  其次,前面提到的工具只能对独立的桌面单点点击GUI进行操作,而触摸屏使用了基于连续手势的GUI规范,例如滑动、捏拉缩放等。假设一个app有多屏和菜单等GUI能够记录的元素,但还是很难像关键字行为那样捕获和展示触摸屏手势,因为它们可能会出现在GUI的任何部分(例如在地图上缩放),或需要较低的精确度来实现精确的回放(例如在愤怒的小鸟中弹射一只小鸟)。在记录-回放的过程中,空间精确度(输入坐标)和时间精确度(事件时机)都是必须的。若要捕获、展现和回放一组复杂连续的手势将十分困难,例如在愤怒的小鸟中以上升的弹射趋势滑动一只小鸟。在多点触控的情况下,问题将更加复杂。为了量化回放手势的重要性,在图1中我们展示了在5分钟的时间里,REBAN回放这86个app时,触摸屏手势数量的分布:可回放的86个app中,有84个app包含手势,因此不可能用先前的方法来实现完整的回放。


这里写图片描述
图1 RERAN可回放的86个app的手势数量分布

  再次,GUI级工具只能捕获用户接口事件,而精确的回放则需要设备传感器捕获大量的外部事件。比如说大多数游戏和导航类app都需要用到重力感应和指南针传感器,而GUI级工具无法捕获到这些传感器事件,谷歌街景就是这样的一个app。它通过指南针传感器定位手机的位置(基于磁北的原理),使得屏幕上的地图能正确指示方向。

  最后,事件时间的准确性对于捕获和回放来说都是有意义的。例如,一个滑动的操作若捕捉得太慢将会变成一系列的点击操作。此外,外部事件和用户接口动作之间的时机把握也相当重要。事实上,我们发现即使只有几毫秒的延时也可能会对回放过程产生负面影响。

  本文中,我们提出了RERAN(REcord and Replayfor ANdroid),一个能够解决上述安卓app问题的记录-回放工具。RERAN可直接捕获和回放设备上触发的低级事件,进一步实现GUI事件(如点击、滑动、缩放)以及其他传感部件(如重力感应、光感、指南针等)收集到的输入信息的捕获和回放。与之相反,基于关键字行为规范的GUI级安卓回放工具[2],[6],[7]只能回放点击触摸屏操作,无法处理触摸屏手势和其他传感器的输入信息。

  RERAN以一种自然1、非入侵式且低消耗的方式来运行:在进行记录的时候,捕捉组件读取事件,执行过程中没有明显的影响。这种方法和基于关键字行为的方法相比,后者需要手工编写测试用例代码,而不能直接收集信息[3]-[5]。在回放过程中,将会有手机代理为手机提供事件,只要有用户或环境的交互,手机将会执行相应操作。RERAN可处理执行过程中出现的大量事件和精确记录-回放执行过程。

  RERAN目前能回放来自低级事件接口(如相机和GPS)的事件,但不支持系统服务提供给app的传感器事件。另外RERAN也无法捕捉app中的未知事件源,例如随机数生成器和涉及文件系统的事件。若要实现完全准确的回放,我们需要一个重量级的解决方案,例如修改虚拟机或完全干预app和基础平台间的通信。

  尽管有种种限制,RERAN还是能在多种情境下正常使用。首先它能够成功地记录和回放Google Play 免费安卓app榜前100名中86个app的执行轨迹。此外,RERAN几乎能做到实时回放,与原本的执行相比只增加了1%的开销。

  其次,RERAN能够提供强大的调试援助,因为它可以捕获和回放app中导致程序崩溃的时间序列,帮助开发人员检查崩溃点的系统状态。值得一提的是,已证实使用RERAN能复制和重放通用app的bug,包括Firefox, Facebook, K-9 Mail, 和 Quickoffice。

  再次,RERAN能够实现时间分解,即在执行某个app时,无需像正常执行时等待较长时间,也不需要额外的人工输入,可直接快进到某一特定状态。我们发现使用时间分解来回放能够比正常执行节约22%~68%的时间。

  本文剩余部分按如下顺序排列:第II部分介绍安卓的输入事件和传感器类别,包含了事件的产生、传递和处理。第III部分概述我们的实现方法和如何对智能手机进行精准的记录-回放。第IV部分则讨论我们所用的实验性方法论,RERAN的实现,Google Play app榜前100名app的运行结果和性能开销。第V部分展示了三种通过RERAN研究和开发的应用:可重复性,重现bug和时间分解。第VI部分讨论实现方法的局限之处和安卓设备通常如何实现记录-回放功能。第VII部分介绍相关的研究,第VIII部分提出结论。

0 0