中文

修复 Android 应用中的数据丢失问题

软件工程 2017-01-20 v1

摘要

Android 应用应当被设计成能够应对 stop-start 事件,即那些需要停止并恢复应用执行同时保持其状态不变的事件。这些事件可能由运行时配置更改(例如屏幕旋转)以及上下文切换(例如从一个应用切换到另一个应用)引起。当 stop-start 事件发生时,Android 会保存应用状态、处理事件,并最终恢复所保存的状态。为了让 Android 正确保存和恢复状态,应用必须提供适当的支持。遗憾的是,Android 开发人员经常错误地实现这种支持,或者根本不实现。这种不良做法使得应用对 stop-start 事件反应不正确,从而产生了我们定义的数据丢失问题(data loss problems),即 Android 应用丢失用户数据、行为异常,并因程序变量丢失其值而崩溃。数据丢失问题难以检测,因为它们可能仅在应用处于特定状态且使用特定输入时才会被观察到。通过测试覆盖所有可能的情况可能需要大量的测试用例,且必须手动检查其执行以发现被测应用是否在每次 stop-start 事件后正确恢复。因此,用能够在现场一旦发生数据丢失问题就保护应用的机制来补充传统的内部测试活动十分重要。本文中,我们提出 DataLossHealer,一种用于在现场一旦发生就自动识别和修复数据丢失问题的技术。DataLossHealer 是一种在运行时检查状态是否被正确恢复并在需要时修复应用的技术。DataLossHealer 能够从经验中学习,逐步减少所引入的开销,避免监控那些过去已被应用正确处理的交互。

关键词

引用

@article{arxiv.1701.05467,
  title  = {Healing Data Loss Problems in Android Apps},
  author = {Oliviero Riganelli and Daniela Micucci and Leonardo Mariani},
  journal= {arXiv preprint arXiv:1701.05467},
  year   = {2017}
}

备注

IEEE International Symposium on Software Reliability Engineering Workshops (ISSREW), 2016