TY - GEN
T1 - Finding resume and restart errors in android applications
AU - Shan, Zhiyong
AU - Azim, Tanzirul
AU - Neamtiu, Iulian
N1 - Publisher Copyright: © 2016 ACM.
PY - 2016/10/19
Y1 - 2016/10/19
N2 - Smartphone apps create and handle a large variety of "instance" data that has to persist across runs, such as the current navigation route, workout results, antivirus settings, or game state. Due to the nature of the smartphone platform, an app can be paused, sent into background, or killed at any time. If the instance data is not saved and restored between runs, in addition to data loss, partially-saved or corrupted data can crash the app upon resume or restart. While smartphone platforms offer API support for data-saving and data-retrieving operations, the use of this API is ad-hoc: left to the programmer, rather than enforced by the compiler. We have observed that several categories of bugs-including data loss, failure to resume/restart or resuming/restarting in the wrong state-are due to incorrect handling of instance data and are easily triggered by just pressing the 'Home' or 'Back' buttons. To help address this problem, we have constructed a tool chain for Android (the KRE finder static analysis and the KREreproducer input generator) that helps find and reproduce such incorrect handling. We have evaluated our approach by running the static analysis on 324 apps, of which 49 were further analyzed manually. Results indicate that our approach is (i) effective, as it has discovered 49 bugs, including in popular Android apps, and (ii) efficient, completing on average in 61 seconds per app. More generally, our approach helps determine whether an app saves too much or too little state.
AB - Smartphone apps create and handle a large variety of "instance" data that has to persist across runs, such as the current navigation route, workout results, antivirus settings, or game state. Due to the nature of the smartphone platform, an app can be paused, sent into background, or killed at any time. If the instance data is not saved and restored between runs, in addition to data loss, partially-saved or corrupted data can crash the app upon resume or restart. While smartphone platforms offer API support for data-saving and data-retrieving operations, the use of this API is ad-hoc: left to the programmer, rather than enforced by the compiler. We have observed that several categories of bugs-including data loss, failure to resume/restart or resuming/restarting in the wrong state-are due to incorrect handling of instance data and are easily triggered by just pressing the 'Home' or 'Back' buttons. To help address this problem, we have constructed a tool chain for Android (the KRE finder static analysis and the KREreproducer input generator) that helps find and reproduce such incorrect handling. We have evaluated our approach by running the static analysis on 324 apps, of which 49 were further analyzed manually. Results indicate that our approach is (i) effective, as it has discovered 49 bugs, including in popular Android apps, and (ii) efficient, completing on average in 61 seconds per app. More generally, our approach helps determine whether an app saves too much or too little state.
KW - App testing
KW - Data loss
KW - Google android
KW - Mobile applications
KW - Software restart
KW - Static analysis
UR - http://www.scopus.com/inward/record.url?scp=84995543469&partnerID=8YFLogxK
UR - http://www.scopus.com/inward/citedby.url?scp=84995543469&partnerID=8YFLogxK
U2 - 10.1145/2983990.2984011
DO - 10.1145/2983990.2984011
M3 - Conference contribution
T3 - Proceedings of the Conference on Object-Oriented Programming Systems, Languages, and Applications, OOPSLA
SP - 864
EP - 880
BT - OOPSLA 2016 - Proceedings of the 2016 ACM SIGPLAN International Conference on Object-Oriented Programming, Systems, Languages, and Applications
A2 - Visser, Eelco
A2 - Smaragdakis, Yannis
PB - Association for Computing Machinery
T2 - 2016 ACM SIGPLAN International Conference on Object-Oriented Programming, Systems, Languages, and Applications, OOPSLA 2016
Y2 - 31 October 2016 through 1 November 2016
ER -