5. 回放功能
已经有无数的程序可以回放记录。在本节,我们阐述几个场景关于REMAN的记录和回放如何有利于开发者和研究人员。
A. 通过轨迹回放的重复性
RERAN可以以完全相同的方式回放一组特定会话的输入事件就像一开始记录的那样。相比之下,如果一个用户手动的重复一个会话企图去重复先前的相同操作,由于人为的误差和不一致的运行时间,和原先的操作相比可能会存在不一致和异常。这可能会导致不准确和不理想的结果。
回放可以极大地帮助那些希望在需要重复序列操作的情况下排除错误和费时程序测试的开发人员和研究人员。事实上,在我们先前的研究[10],我们和测试人员一起使用一个初步版本的REMAN来消除不断交互的需要:配置网络流量和其他应用特性,我们通过录制用户的交互操作检查了10个在相同软件上执行的完全相同的功能(执行#1),并且回放9次(执行#2 通过#10)
分类 | 应用名称 |
---|---|
文件格式 | Ankidroid 0.7b3 APV PDF viewer 0.2.7 Quickoffice 4.1.80 Soundcloud 1.2.2 |
输入不合法 | K-9 Mail 4.0.0.3 |
压力 | NPR News 2.1b |
脚本/插件 | Firefox 14.0 |
应用业务逻辑 | Home Switcher 1.6 Facebook 1.7.1 |
表4 可重现的bug类型和应用
不同环境:轨迹回放也可以被用来测试各种环境条件影响下的程序行为。比如,在先前的网络分析工作中我们在一天的不同时段回放同一个程序轨迹从而获得更广泛的程序行为[10]。同样,开发人员可以在一个回放执行时选择不同的条件,如网络连接和手机位置来观察这些变化对应用程序的影响。
B. 重现BUG
重现bug是修复bug的关键。RERAN通过记录操作直到发现bug然后重新回放操作轨迹,为重现bug提供了重大帮助。我们利用在主流安卓软件的真实bug测试了RERAN的这个重现bug功能。我们首先从各种渠道收集样本bugs :Google代码、Mozilla基金会的缺陷跟踪系统以及网站。我们试图按照提供的重现步骤来重现bug,用RERAN记录我们的输入操作。当手动重现bug,我们回放了用RERAN收集的跟踪轨迹。所有这些能够被我们手动重现的bug可以被回放,在回放执行时,缺陷显露出来。为了确保结果的一致性,我们回放了bug 5次,并且每次bug都被重现出来。
表格四是bug的类别以及对应程序的名称和版本。RERAN已经可以在YouTube上回放视频demo的bug了,现在我们提供一下这些bug的详细描述。
- 缺陷由于不正确的文件格式(如:损坏文件、不合适的文件扩展名、不支持的文件等)。例如, APV PDF查看器0.2.7和Quickoffice4.1.80 在加载一个损坏的pdf文件时会崩溃,Soundcloud1.2.2软件在上传不支持的文件格式时会崩溃。Ankidroid闪卡(版本号:0.7b3)在打开一个特殊自定义卡模板时会崩溃。
- 由于无效输入或错误输入导致的bug。例如K-9 mail 4.0.0.3软件在用IP地址代替对应的域名进行输入并且参数被保存时程序会崩溃。
- 在浏览器程序中的bug,这些bug因为无响应的脚本、错误的插件、以及难看的HTML页面而发生。一个例子:主流浏览器Firefox 14.0版本,它会在处理特定的XML文件和外部脚本时崩溃。
- 压力测试引起的bug(即:一直重复地做同一个操作或重复生成相同序列事件。)比如,NPR News(版本2.1b)在反复执行每小时新闻的更新功能时会崩溃。
- 程序过渡状态引起的bug。Home Switcher 首页转换器允许用户修改系统用户界面的主题。有时候从一个特定的第三方主题切换到其他主题时程序会崩溃。Facebook1.7.1版本在关闭网络并且试图登录时会崩溃。
要注意的是,RERAN可以根据手势重现bug,而其他安卓测试工具并不能处理手势。比如,AndroidGUITAR [2](与其他工具的比较在第七节中)可以在那些没有包含输入手势,例如点击手势的应用程序中获取到崩溃的位置。
调试:RERAN可以结合使用调试工具来驱动APP到达某个状态,然后利用断点,调试工具帮助检查这个状态促进故障的查找和修复。
C. 时间扭曲
利用RERAN,我们可以通过相同的执行状态在回放期间time warp 一个GUI事件来改变时间。时间扭曲是通过在不改变原来路径的情况下在一个连续事件的捕获跟踪下增加或减少时间延迟(简称TD)来实现的。我们都集中在快速执行,但是我们想象一下一种类似方法可以减缓执行速度,该方法可被当成测试套件中的另外一种调试工具。例如,TDs可以给开发者更多的时间去检查应用程序发生交互之前的状态。
我们不要试图控制触屏按压或手势操作的速度。正如我们讨论的,这种时间扭曲可以简单的修改手势操作的影响或者将其转换到另一个操作或一组操作。然而,我们已经确定了两个案例,当发生重大延迟时可以达到快进:(1)当数据录入时;(2)当用户正在处理内容时。数据录入是指用户在虚拟或物理键盘输入和点击按钮。这些事件发生在人可以忍耐的时间范围内,因此还有很大的提速空间。处理内容指的是用户正在检查屏幕的内容,并决定下一步的操作;例如点击一个按钮。处理内容也可以发生在通过网络在外部服务器访问数据时(如:CNN和Facebook的应用程序)。这种情况可以被快进,因为在内容加载和用户执行下一步操作中有一个时间延迟。
我们使用被手机和应用程序证实的三个规则快速前进,但是希望有通用规则来适用其他设置。
规则如下:(a)如果延迟时间少于0.7s,压缩这个延迟时间到0.001s;(b)如果延迟大于3s,压缩时间到3s,(c)任何延迟时间在0.7秒到3秒之内的不去改变。
规则(A)试图去确认以及加快用户的数据输入。这个规则,举个例子,可让数据输入在应用请求为大量文本输入时得到最大的加速,例如字典和谷歌翻译。
规则(B)解释了用户正在查看内容或者正在决定进行下一步操作时可能发生的操作执行延长。例如,这种优化可以被体现在加油站的场景,用户在选定一种汽油前在看一些汽油价格。产生了长时间的延迟。
规则(C)保留这个操作在所有其他情况下执行的速度。
尽管这些规则的简单,我们可以用他们成功的去time-warp许多软件。视频播放的RERAN快进键在YouTube上是可用的。
表格5是快进的结果。在每一个应用中,第2列写的是最初的运行时间,第3列是快进后的时间,而第4列显示的是加快的百分比。要注意的是,一般应用可以将任务加速从4% 到68%。有些软件(Quickoffice, NPR News, Home Switcher )不能快进,接下来我们将解释原因。
快进的用途:快进可以缩短不用手动输入的应用减少时间。例如,当功能添加到一个应用程序的屏幕上,开发者可以使用快进达到大大减少请求到页面的请求时间。快进也可以被使用在结合RERAN的重现bug功能,为了加快调试时间。利用加快回放,加快重现bug时间,即回放重现的步骤时间将会被减少从而节省开发时间。如表5所示,我们也进行加快重现这9个程序崩溃的bug,我们运行被打乱时间的回放发现有5个应用程序已经减少了运行时间。剩下3个应用没有减少时间还是保持原先的运行时间。这是由于这个应用没有数据输入或者长时间的延迟(所以我们不能使用规则A或规则B),相反的这个延迟时间会保持在这个不改变规则(规则C)的范围内即保持原有的延迟时间。
App name | Run-time | Reduction(%) | |
Original (seconds) | Fast-forwarded (seconds) | ||
Facebook 1.9 | 249.71 | 162.93 | 34.75 |
Dictionary | 238.49 | 144.31 | 39.49 |
Gas Buddy | 263.06 | 84.72 | 67.79 |
BBC News | 277.31 | 120.32 | 56.61 |
Craigslist | 308.92 | 239.54 | 22.46 |
ESPN Score | 314.22 | 244.95 | 22.05 |
Amazon | 298.69 | 109.15 | 63.46 |
Movies | 286.16 | 197.09 | 31.13 |
Google Translate | 308.66 | 211.63 | 31.44 |
Ankidroid | 8.66 | 8.35 | 3.58 |
APV PDF viewer | 10.93 | 8.17 | 25.25 |
Firefox | 64.22 | 29.55 | 53.99 |
Soundcloud | 29.34 | 25.79 | 12.10 |
K-9 Mail | 32.23 | 24.84 | 22.93 |
Facebook 1.7.1 | 30.31 | 18.69 | 38.34 |
Quickoffice | 3.12 | 3.12 | 0.00 |
NPR News | 9.91 | 9.91 | 0.00 |
Home Switcher | 7.99 | 7.99 | 0.00 |
表5 在原先执行和加快回放的应用程序运行时间。灰色部分是重现bug的数据
无法重放原因 | APP名称 |
---|---|
需要安卓传感器服务 | Barcode Scanner, Tango Video Calls Voice Search, Voxer Walkie-Talki |
动态和随机的元素 (即非确定性) | Pandora, Boxing Game, Fruit Ninja Jewels Star, Shoot Bubble Deluxe Solitare, Temple Run, Tetris Uno Free, Words with Friends |
表6 14个RERAN无法回放的应用程序来自于前100应用程序