  Android apps must work correctly even if their execution is interrupted by
external events. For instance, an app must work properly even if a phone call
is received, or after its layout is redrawn because the smartphone has been
rotated. Since these events may require destroying, when the execution is
interrupted, and recreating, when the execution is resumed, the foreground
activity of the app, the only way to prevent the loss of state information is
saving and restoring it. This behavior must be explicitly implemented by app
developers, who often miss to implement it properly, releasing apps affected by
data loss problems, that is, apps that may lose state information when their
execution is interrupted. Although several techniques can be used to
automatically generate test cases for Android apps, the obtained test cases
seldom include the interactions and the checks necessary to exercise and reveal
data loss faults. To address this problem, this paper presents Data Loss
Detector (DLD), a test case generation technique that integrates an exploration
strategy, data-loss-revealing actions, and two customized oracle strategies for
the detection of data loss failures. DLD has been able to reveal 75% of the
faults in a benchmark of 54 Android app releases affected by 110 known data
loss faults. DLD also revealed unknown data loss problems, outperforming
competing approaches.
