在 Android 应用中高效显现异步编程错误
软件工程
2018-08-10 v1
摘要
Android 作为第一的移动应用框架,强制采用单 GUI 线程模型,其中单一的 UI 线程管理 GUI 渲染与事件分发。由于该模型,为避免响应性下降,避免阻塞 UI 线程至关重要。一种常见做法是将长时间运行的任务卸载到异步线程中。为此,Android 提供了多种异步编程构造,并将遵守该模型隐含规则的责任留给开发者自身。然而,正如我们的研究所揭示的,超过 25% 的应用违反了这些规则并引入了难以检测、失效即停的错误,我们称之为异步编程错误(APEs)。为此,本文提出 APEChecker,一种自动且高效显现 APEs 的技术。其核心思想是将 APEs 刻画为特定的故障模式,并协同结合静态分析与动态 UI 探索来检测并验证此类错误。在 40 个真实世界 Android 应用中,APEChecker 发现并处理了 61 个 APEs,其中 51 个被确认(命中率 83.6%)。具体而言,APEChecker 检测到的 APEs 是最先进测试工具(Monkey、Sapienz 和 Stoat)的 3 倍,并将测试时间从半小时缩短至几分钟。对于某一特定类型的 APEs,APEChecker 确认的错误数量是数据竞争检测工具 EventRacer 的 5 倍,且误报极少。
引用
@article{arxiv.1808.03178,
title = {Efficiently Manifesting Asynchronous Programming Errors in Android Apps},
author = {Lingling Fan and Ting Su and Sen Chen and Guozhu Meng and Yang Liu and Lihua Xu and Geguang Pu},
journal= {arXiv preprint arXiv:1808.03178},
year = {2018}
}