(图片来源网络,侵删)
论文摘要App商店中发布的移动应用数量不断增加的同时,这些应用程序的质量呈现巨大的差异。然而对于许多应用程序,一旦在用户的移动设备上安装了,这些应用程序就会相继发生错误和崩溃。为了解决这些烦人的崩溃,开发人员首先需要重现这些崩溃,这样才能够找到问题的根源。然而由于移动设备、移动平台的差异性以及使用版本和用户类型的不同,崩溃的复现是应用程序开发人员面临的主要挑战之一。本文介绍了MoTiF,这是一种众包方法,可以帮助应用程序开发人员自动复现用户面临的上下文敏感崩溃。特别地,通过分析崩溃数据中的重复模式,导出再现崩溃的最短事件序列,并且最后转变为一个测试用例集。通过测试用例集,MoTiF可以有效的重现崩溃。研究问题:无论是全新安装或是在更新后,应用程序的投诉除了是功能上的却是,大多数问题都是与应用程序崩溃有关。移动应用开发者虽然可以使用各种测试工具进行检测,但是一旦用户安装到设备上,许多错误依然可能出现。举一个真实的例子,在使用维基百科移动App,当用户按下菜单按钮,该应用程序就会崩溃。但是,这次崩溃只是在运行Android 4.1的LG设备上出现。 因此,应用程序开发人员需要了解用户的交互行为和执行上下文(即软件和硬件配置),才可以真实的再现这个崩溃。为了解决这个问题,我们提出了MoTiF,通过真实的设备和用户,使用机器学习技术学习众包的数据,帮助开发人员的再现用户面临的移动应用上下文敏感崩溃。本文关键的想法是对于众包测试中大规模出现的崩溃,该工具能够以自动有效以自动有效的方式去协助开发人员隔离和复制此类崩溃。解决方案:一、MoTiF的四个关键阶段:1、从设备收集执行跟踪MoTiF收集用户交互事件和上下文,如果应用程序崩溃,收集的数据将提交给MoTiF服务器。2、识别移动应用程序的崩溃模式首先,MoTiF在应用程序执行过程中,收集并识别跟踪到的崩溃模式。这些模式将用于自动提取重现和表征崩溃的最小步骤序列3、合成崩溃测试用例集。基于在执行上下文中收集的崩溃模式,合成崩溃测试用例集。此测试用例集能够重现一系列导致崩溃的用户交互4、评估重现崩溃的执行上下文。关察到并确定是否可以推广到其他应用环境。在验证这一系列的测试用例集合后,MoTiF会通知应用程序开发人员。二、收集数据启用后,MoTiF会跟踪输入事件(例如,用户交互事件)和在Activity执行期间抛出的未处理异常。为了将事件情境化,MoTiF记录以下内容事件元数据:时间戳,方法名称,实现类,线程ID和视图Id(唯一)异常元数据:时间戳,位置和异常跟踪,上下文数据:与执行相关的信息Android应用程序是以UI为中心的,View是基类。要拦截用户交互事件,只需要拦截这些控件的事件处理程序即可。例如,当一个按钮被点击的时候,会在该对象上调用onTouchEvent方法。MoTiF拦截这些事件处理程序的执行,同时记录事件元数据和上下文数据。三、异常处理执行应用程序期间,MoTiF会将观察到的事件保存在内存中。 只有当应用程序崩溃时,MoTiF才将事件的跟踪记录保存在设备的日志文件中。我们将崩溃跟踪(ct)定义为执行的一系列事件。在崩溃发生之前的应用程序中,即ct = {e1,e2,...,en}。事件可以有两种类型:交互和异常。该记录跟踪的最后一个事件(en)始终是异常事件。静态上下文仅在异常事件中报告,因为它在整个应用程序执行期间保持不变。相反,报告每个事件的动态上下文。图2的示例代表两个交互事件e1,e2,并导致了crash1的跟踪情况。四、Crowd Crash Graph论文定义了一个数据结构:Crowd Crash Graph,它是一个有向图(下文简称CCG):CCG = {G1,G2,...,Gn},其中每个Gi是一个崩溃图,表示不同类型的崩溃。这样的崩溃图的聚合结果就是导致某个相同异常的所有崩溃路径。它基于马尔可夫链(一阶马尔可夫模型),这是一种被广泛接受的用来捕捉顺序依赖的形式。在我们的崩溃图中,节点代表事件和边表示事件之间的顺序流,节点和边缘具有分别描述事件元数据和转移概率的属性。我们将基于这个图合成最有可能的重现崩溃的步骤序列。五、重现崩溃这一阶段的目标是最大化遍历的马尔可夫概率,寻找从起始节点(S)到异常节点(e)的最短路径。为此,MoTiF实现了Dijkstra的算法[12],这是一种众所周知的在图表中的节点之间寻找最短路径的算法,Dijkstra的目标是尽量减少路径上的权重,我们的目标是找到最大化S-e路径上的转换概率的路径。MoTiF会自动生成黑盒UI测试。我们使用Robotium,一个用于Android应用程序的自动黑盒UI测试的测试自动化框架,在设备上执行对应的用户交互,来重现找到的上下文敏感崩溃。总结:移动生态系统激烈竞争,为了避免失去客户和信用,开发人员面临着快速识别以及修复应用程序中的崩溃的挑战。本文介绍了MoTiF,一种众包监控的方法,可以帮助开发人员在移动应用程序部署之后检测和重现移动应用程序中的上下文敏感崩溃。MoTiF以智能方式利用崩溃和设备反馈去快速检测一群设备的崩溃模式。通过使用这些崩溃模式,MoTiF可以合成测试用例集去重现崩溃。然后,MoTiF利用众包测试中的各种移动设备来检查测试是否可以暴露崩溃以及是否存在可以重现相同崩溃的异常。致谢此文由南京大学软件学院2018级硕士韦志宾翻译转述。
0 评论