ebook img

Healing Data Loss Problems in Android Apps PDF

0.38 MB·
Save to my drive
Quick download
Download
Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.

Preview Healing Data Loss Problems in Android Apps

Healing Data Loss Problems in Android Apps Oliviero Riganelli, Daniela Micucci, and Leonardo Mariani Department of Informatics, Systems and Communication University of Milano Bicocca Viale Sarca 336, IT-20126 Milan, Italy Email: riganelli,micucci,mariani @disco.unimib.it { } 7 Abstract—Android apps should be designed to cope with method,destroystheforegroundactivity,adjuststheorienta- 1 stop-startevents,whicharetheeventsthatrequirestoppingand tion, reloads the activity (which is now displayed according 0 restoring the execution of an app while leaving its state unal- to the new orientation), and finally recovers the saved state 2 tered. These events can be caused by run-time configuration byinvokingtheonRestoreInstanceState()callback changes, such as a screen rotation, and by context-switches, n method. such as a switch from one app to another. When a stop- a J starteventoccurs,Androidsavesthestateoftheapp,handles The default implementation of the callback methods the event, and finally restores the saved state. To let Android (e.g., the implementation of onSaveInstanceState() 9 save and restore the state correctly, apps must provide the 1 and onRestoreInstanceState()) only save and re- appropriate support. Unfortunately, Android developers often store the information about the state of the graphical implement this support incorrectly, or do not implement it at ] all. This bad practice makes apps to incorrectly react to stop- user interface (e.g., the text written in a TextView). E startevents,thusgeneratingwhatwedefineddatalossproblems, Unfortunately, this behavior is often insufficient to cor- S thatisAndroidappsthatloseuserdata,behaveunexpectedly, rectly handle a stop-start event. Relevant state informa- . and crash due to program variables that lost their values. s tion can be stored in the member variables of Android c Datalossproblemsaredifficulttodetectbecausetheymight activities, and these values are not saved and restored [ be observed only when apps are in specific states and with specificinputs.Coveringallthepossiblecaseswithtestingmay automatically. To handle these cases, Android developers 1 require a large number of test cases whose execution must be must override the onSaveInstanceState() and the v checked manually to discover whether the app under test has onRestoreInstanceState()methodstosavetherel- 7 been correctly restored after each stop-start event. It is thus evant information and restore it when needed, respectively. 6 importanttocomplementtraditionalin-housetestingactivities 4 with mechanisms that can protect apps as soon as a data loss Android apps that incorrectly save and restore their state, 5 problem occurs in the field. thatisAndroidappswithdata-lossproblems,mayfrequently 0 In this paper we present DataLossHealer, a technique for cause loss of user data, unexpected behaviors, and program 1. automatically identifying and healing data loss problems in crashes. the field as soon as they occur. DataLossHealer is a technique 0 Data loss problems might be introduced in three ways: thatchecksatrun-timewhetherstatesarerecoveredcorrectly, 7 by a missing implementation of the callback methods, by and heals the app when needed. DataLossHealer can learn 1 from experience, incrementally reducing the overhead that is incorrectlyimplementedcallbackmethods,andbyupgrades : v introduced avoiding to monitor interactions that have been that break the behavior of the callback methods. In the first i managed correctly by the app in the past. case,theappincorrectlyreliesonthedefaultimplementation X Keywords-Self-healing, Android, Data loss, Stop-start events of the callback methods, which omit to save and restore r a part of the state of the application, such as in the Map- box app where the missing implementation of the callback I. INTRODUCTION methods caused the loss of the current map position after When users navigate through, out of, and back to an every configuration change [?]. In the second case, the Android app, they may generate a number of stop-start app simply overrides the callback methods with a wrong events, which modify the state of the running activity1. behavior, such as in the Transmission app where the incor- Handling stop-start events requires putting an app on hold, rect implementation of the callback methods sporadically by saving its internal state, and successively recovering its produced null pointer exceptions [4]. In the third case, the state to continue with the execution [1], [2]. This process is app correctly handles stop-start events, but its behavior is managed by a set of callback methods implemented by the broken by an upgrade of the Android framework, such as app. For instance, when the screen is rotated, the Android inthePagerSlidingTabStripthatcanloosethecolor system invokes the onSaveInstanceState() callback selectedforitsActionBaraftertheupgradetoAPI17[5]. Introducing any of these problems is relatively easy, as also 1Androidappsarecomposedofmultiplecomponentscalledactivities. reported in other studies [6], [7]. Appsthatrespondunreliablytostop-starteventsarelikely 978-1-5090-3601-1/16/$31.00 c2016IEEE DOI10.1109/ISSREW.2016.50 (cid:13) (a) (b) (c) Figure 1: Data loss problem in ownCloud Notes app to be annoying for users and fail in the market. It is thus accordingly. important to implement reliable applications that correctly This paper describes our ongoing effort in the definition handle stop-start events and that can be comfortably used of DataLossHealer and our experience with a real World in common situations, such as temporary interrupting the applicationaffectedbyadatalossproblem.Inthefollowing, activity with an app to answer an incoming call or to wefirstpresentamotivatingscenarioconcerningarealdata retrieve information from another app (e.g., doing a search lossproblem(SectionII),wethenillustrateDataLossHealer on Google). referringtothemotivatingscenario(SectionIII),wediscuss WhilethereareseveraltestingsolutionsforAndroid,such related work (Section IV), and we finally provide final asRobotium[8],Thor[7],andAppDoctor[6],noneofthese remarks (Section V). provide specific support to data loss problems detection. II. MOTIVATINGEXAMPLE Robotium [8] simply offers an environment that testers can exploit to implement capture and replay testing. Thor [7] As motivating example we use an actual Android app af- runs the available test cases while recreating adverse condi- fectedbyadatalossproblem.TheAndroidappisownCloud tions that may expose unexpected problems. AppDoctor [6] Notes [10], which is an app to create, edit, modify, and can simulate some stop-start events during test execution delete notes stored on the Cloud. The app is available on but its failure detection ability is limited to crashes and any the Google Play store. data loss problem that does not cause crashes would remain Theapphasbeenaffectedforafewversionsbyadataloss unnoticed. problemthatcanbeobservedeverytimeastop-starteventis Azim et al. address the problem of making apps more generated while the user is editing a note2. Figure 1 shows reliablebyaddingthecapabilitytoautomaticallydisablethe a sequence of three screenshots that demonstrates how this functionalities that caused crashes in the past [9]. This so- problemmightbeexperiencedinthecaseofscreenrotation: lution suffers from two relevant drawbacks: it progressively the user first selects an existing note for editing (Figure 1.a reduces the set of functionalities offered by an app and is showsthenoteselectedforbeingedited,thenoteisaToDo ineffectivewithdatalossproblemsthatdonotcausecrashes. Listandincludestwotasks),thenaddstwonewtaskstothe note (Figure 1.b shows the list containing four tasks), and To address the data loss problems that might be experi- finally rotates the screen losing all the changes (Figure 1.c enced in the field by users, we introduce DataLossHealer, showsthelistwithawrongdateontheheaderandwithtwo a self-healing solution for automatically identifying and tasks instead of four). healingdatalossproblemsinAndroidapps.DataLossHealer The cause of this faulty behavior is the incorrect imple- is a technique that checks at run-time whether states are mentation of the callback methods managing the stop-start recovered correctly after stop-start events, and heals apps eventsintheNoteActivityclass.Thedatalossproblem when needed. DataLossHealer implements the capability affects both the date and the content of the ToDo list, to learn from past experience to minimize its intrusiveness which are both restored with outdated values after rotation. and increase its efficiency. In particular, DataLossHealer can distinguish the potentially safe from the potentially 2See https://github.com/stefan-niedermann/OwnCloud- unsafe situations and activate appropriate countermeasures Notes/issues/55 onSaveInstanceState() AS(S)∈MS and AS(S)∈MF AS(S) ∈ MF Save Snapshot(S) AS(S) ∈ MS Save Var Activity Destruction Activity Destruction Activity Destruction Activity Recreation Activity Recreation Activity Recreation Compare Snapshot(S) Restore Var to the current state Success Add AS(S) in MS Failure Add (AS(S),Var) in MF Legend Ac6vity Background performed by Restore Var White DataLossHealer Grey Android Figure 2: The DataLossHealer process. In the next section, we discuss how DataLossHealer can generally learn how to handle a broader set of cases. automatically detect and heal this problem. We now overview how DataLossHealer works taking advantage of the workflow shown in Figure 2. When III. DataLossHealer onSaveInstanceState() is invoked (see the trigger The workflow in Fig 2 summarizes the behavior of Dat- eventinFigure2),therearethreepossiblewaystocontinue aLossHealer.Theworkflowexploitsamemoryorganizedin the execution depending on the value of the abstract repre- two sets: MS and MF. The former set represents the app sentation AS(S) of the current state S, as represented by stateswhereactivitieshavebeendestroyedandthenrestored the three main flows in Figure 2: successfully, without causing any data loss problem. The NewState-AS(S) MS AS(S) MF:SinceAS(S)does 6∈ ∧ 6∈ latter set represents the app states where the recreation of not match with any abstract state observed before (AS(S) is the activities has failed due to a data loss problem. Each neitherinMSnorinMF),DataLossHealer takesasnapshot entry in MF also includes the list of the variables that lost ofthecurrentstateS andsavesit.Thesnapshotcontainsthe their values after recreation. Those sets are initially empty values of the relevant variables and is later used to check if and are automatically populated by DataLossHealer. any data loss problem has occurred (see Section III-C for a The app states are represented abstractly when entered more detailed description of the snapshots). into MS and MF. This is necessary because concrete app After the activity has been destroyed and recreated, statesarelarge,inprincipletheyincludethevaluesofevery DataLossHealer compares the current state of the app to program variable and a representation of the environment, the snapshot persistently saved before. If no data loss is and thus using full state representations may excessively observed, that is the current state matches the snapshot, the slow down the learning process. Moreover, a same concrete abstractstateAS(S)isaddedtoMS.Ifadatalossisobserved state is unlikely to occur many times in the life of an for a set of variables Var, the pair (AS(S),Var) is added to app, thus the probability to reuse any information learnt MF and immediate healing is performed, that is the values in the past would be extremely small. An optimal state inthesavedsnapshotareusedtorecoverthevariablevalues abstraction strategy is a strategy that represents in a same that have been lost. The next time a stop-start event occurs wayallandonlythestatesthatreactequivalentlytodataloss inthesameorasimilarstate(i.e.,inaconcretestatethatcan problems. In this way, DataLossHealer can simply observe be mapped to the same abstract state), DataLossHealer will the behavior of the application for one of these states, to handle the case more efficiently exploiting the information recorded in MS and MF. a variable assigned with its default value (e.g., a variable of Unsafe State - AS(S) MF: Since the values of the type Person assigned to null), it is virtually impossible variables in Var for the pa∈ir (AS(S),Var) in MF are likely todetermineifitsvaluehasbeenlostornotafterastop-start event.Thus,thestateswithasamesetofvariablesassigned to get lost once the state of the app has been restored, Dat- with values different than default should behave the same aLossHealer eliminates the data loss problem by saving the withrespecttotheirpropensiontoexperienceanydataloss. valuesofthevariablesinVarbeforetheactivityisdestroyed and then restoring these values after the activity has been Ourmaskofbitsexactlycapturesthisaspect.Forinstance, recreated.ComparedtotheNewStatecase,DataLossHealer in the ownCloud Notes app, when the screen is rotated, efficiently stores only the variables that may get lost, and its abstract state is represented by the pair NoteActivity, h does not record a whole snapshot of the state. 10111111 , which indicates that NoteActivity is the i foreground activity and that there is only one variable that Safe State - AS(S) MS: Since the state is safe no ∈ has a default value (represented by the only zero in the Bit- intervention is required. Compared to the New State case, Mask). This variable is the class attribute notePosition DataLossHealer skips taking any snapshot of the system. of type int that evaluates to its default value 0 when the Note that the first time a stop-start event occurs in a screen is rotated. All the other 1s in the mask indicate the given state, the DataLossHealer performs relatively costly presence of activity attributes and views with non-default operations, like saving and comparing snapshots. However, values. DataLossHealer learns from past experience and the next Trivially, two abstract states AS =(a ,bm ) and AS = 1 1 1 2 time the same (abstract) state occurs, DataLossHealer does (a ,bm ) are the same if they have the same activity (a = 2 2 1 not take any snapshot but behaves efficiently: if the state is a ) and the same bitmask (bm =bm ). 2 1 2 safe, DataLossHealer does not intervene at all; while if the state is unsafe, DataLossHealer records only the values of C. Recording and Comparing Snapshots the variables that might get lost. When a state of the app does not correspond to any We now describe how we implemented the key opera- abstract state in MS and MF (see left branch in Figure 2), tions performed by DataLossHealer using the faulty app DataLossHealer records a snapshot of the current state to describedinSectionIIasrunningexample.Weconsiderthe belaterabletodetectdatalossproblems.Dependingonthe case the user rotates the screen after having edited a note. tradeoff between completeness and cost, the snapshot may include a larger or smaller set of information. A. Monitoring. The kind of snapshot we are experiencing with records DataLossHealer needs to intercept the callbacks information about the state of the activity’s view hierarchy caused by stop-start events and in particular the andthevaluesoftheactivity’smembervariables.Intuitively callbacks to onSaveInstanceState() and this corresponds in preserving the information shown to the onRestoreInstanceState() in order to check user (the information in the view) and the internal state of whether a data-loss problem will occur and, in case, to the application (the information in the activity). add the operations necessary to heal the app. There are In the ownCloud Notes app, when the NoteActivity several frameworks that can be used to this end, such as is the foreground activity and the screen is rotated, the Xposed [11] and ADBI [12]. Our prototype implementation DataLossHealer records the values of several variables uses the Xposed Framework [11] because it allows to including the date in the view mSubtitleTextView of cost-efficiently intercept method invocations and to change type TextView, the text in the view noteContent of the behavior of an app using run-time hooking and code typeAppCompatTextView,andthevalueofthemember injection mechanisms. variable note of type Note. To store a snapshot, DataLossHealer reuses the mecha- B. Generating and Comparing Abstract States. nism natively available in Android for saving and loading State information could be abstracted in many ways. bundles. A bundle is a data structure that is able to persis- We are currently experiencing DataLossHealer with a state tently store values of certain, mostly primitive, types. The representationconsistingofapair(activity,BitMask),where valuesinthesnapshotthatarecompatiblewithbundles,such activity is the name of the foreground activity, and BitMask as the member variable notePosition of type int in representsasequenceofbinaryvalueswitheachbitindicat- the NoteActivity, are directly added to the bundle. The ing whether each member variable and view of the activity incompatible values, such as the custom object note of has a value different from the default for its type. Since typeNote,arefirstconvertedtotheJSONformatusingthe data loss problems cause variables to lose their values after GSON library [13] and then added to the bundle as strings. activityrecreation,theirmanifestationintuitivelydependson Our prototype uses this solution to not require anything the number of variables that have a non-default value. For else than bundles, but other storage technologies might be consideredinthefuture,suchasObjectRelationalMapping the value of the member variable note, not saving the (ORM) frameworks [14] or NoSQL databases [15]. values of the other views and member variables. When the app is restored, DataLossHealer checks if the Once the state has been recreated, DataLossHealer as- viewsandthemembervariablesarestillassignedwithvalues signs the values saved in the bundle to the variables subject equaltothevaluesinthebundle.Sincetheactivityhasbeen to data loss. Note that the fix produced by DataLossHealer destroyed and then recreated, variables cannot be simply is semantically equivalent to the fix implemented by the comparedbyreference.DataLossHealerusestheJavers[16] developers of the ownCloud Notes app. diff framework to compare the state of objects, while it IV. RELATEDWORK simply directly compares variables of primitive data types and standard view types. The development of reliable mobile applications is a In the ownCloud Notes app, after the screen ro- complex task with several emerging challenges and issues, tation, DataLossHealer discovers that a data loss af- such as the unpredictability and the high variability of the fected three variables: the views mSubtitleTextView application context [17], [18], the instability and the rapid and noteContent, and the member variable note. evolution of the environment [19], [20], and the lack of To prevent taking again complete snapshots in simi- robust and reliable testing and analysis tools [21], [22]. lar states in the future, DataLossHealer adds the en- Data loss problems are popular problems [6], [7] caused try (NoteActivity, 10111111), mSubtitleTextView, by the difficulty of properly implementing the interaction h { noteContent,note toMFindicatingthatthevariables between an app and both the underlying framework and its }i mSubtitleTextView, noteContent, and note are environment, as well as the difficulty of predicting every the variables to be healed when the foreground activity is possible execution scenario. NoteActivity and its concrete state can be mapped to the In this paper we presented a self-healing approach to abstract state 10111111. prevent the occurrence of any data loss directly in the field When no data loss is observed in ownCloud Notes, while the app is running. There are two main classes of DataLossHealer adds an entry to MS to prevent taking full approaches related to our contribution: testing techniques snapshots in the future. for Android applications and self-healing techniques for In addition to detecting the data loss problem, Dat- Android applications. aLossHealer immediately heals the execution by using the A. Testing Android applications recorded snapshot. The healing procedure simply consists of assigning the saved values to the variables that lost To a significant extent, the validation of mobile applica- their values. In the ownCloud Notes app these variables tions is still a manual activity [21], supported by products are mSubtitleTextView, noteContent, and note. that can only partially automate the testing process, such as Restoring these variables eliminates the data loss problem Robutium [8] that can automate the execution of test cases both visually, because the proper values of the views are that have been already executed manually. restored,andinternallytotheapp,becausethepropervalues In the last few years the research community has been of the fields of the activity are restored. particularlyactiveinthedefinitionofsolutionsforincreasing thelevelofautomationofvalidationtechniquesforAndroid applications, and mobile applications in general. Most of D. Recording and Restoring Variables theresultsconcerntechniquesaddressingspecificsituations, In addition to recording and comparing complete snap- suchasthevalidationofexceptionalbehaviors[7],[23],the shots, DataLossHealer records and restores ad-hoc sets of discovery of security and privacy concerns [24], [25] and variables based on past experience. In particular, when a the detection of energy and performance bugs [26], [27]. stop-start event is detected while an app is in a unsafe state Although all these techniques might be useful to reveal a S, that is AS(S) MF, DataLossHealer records the values range of bugs, none of them specifically addresses data loss ∈ of the variables in Var (i.e., the set of variables associated problems. To the best of our knowledge, AppDoctor [6] is with the data loss for the abstract state AS(S)) before the the only technique that can generate test cases that include state is destroyed (see right branch in Figure 2). stop-start events. However, AppDoctor is equipped with an To save the values of these variables, DataLossHealer oracle that can only detect crashes, thus the many data uses the same mechanism used to take snapshots, that is loss problems that cause loss of data without producing it uses Android bundles. Note that here DataLossHealer crasheswouldremainundetectedifaddressedwithAppDoc- efficiently saves only the subset of the state information tor(considerforinstancethedatalossproblempresentedin that might get lost, drastically reducing the amount of SectionII).Moreover,AppDoctorcanonlysimulatesomeof informationsaved.Forinstance,intheownCloudNotesapp, themany stop-start eventsthatcanbe producedwhileusing DataLossHealer only saves the values of the text in the an app, thus covering only a small subset of the situations mSubtitleTextView and noteContent views, and that might be experienced in the field. In order to protect apps from the unexpected behaviors Since developers have to implement an appropriate sup- that might be experienced as consequence of a data loss port to stop-start events in their apps, and many times this problem, it is necessary to extend their capability with support is implemented incorrectly or not implemented at the ability to prevent and overcome data loss at run-time. all, data loss problems are also common [6], [7]. DataLossHealer represents our first attempt to design a In this paper, we propose to address this problem with solution going into this direction. the DataLossHealer self-healing solution, which can de- tect and heal executions that cause data loss problems. B. Healing Android applications DataLossHealer works by saving the state of the apps before and after a stop-start event occurs, to automatically Self-healing techniques have been extensively studied as detectdata-lossproblems.Interestingly,DataLossHealercan solution to overcome failures in many different contexts, increaseitsefficiencyovertimebylearningfromexperience. including Web Applications [28], Operative systems [29], The learning task is aimed to minimize the frequency of andtheCloud[30],whilethedomainofmobileapplications intervention, preventing to record state information when has surprisingly not been well explored yet, even if there the app is in states known to be safe, and to reduce the are many classes of environment and context dependent cost of the operations, preventing to save information about problems that would benefit from self-healing solutions. variables that are known to be unaffected by the data loss. A few techniques investigated how to dynamically inject We reported our experience with the ownCloud Notes patches into a target application to fix vulnerabilities in An- app [10], which is an app affected by an actual data loss droidapplications [31],[32].Whilethesetechniquespresent problem. In the future, we plan to experience our solution interesting solutions to dynamically modify the behavior with a range of Android apps to extensively evaluate its of Android applications, they do not represent actual self- effectiveness, as well as investigating alternative ways of healingsolutionsbecausethecodethatimplementsthepatch representingtheabstractstates,andmechanismstosaveand is produced offline and then only deployed online. On the restore state information. contrary, DataLossHealer analyzes applications and takes decisions online, without any input required from users or ACKNOWLEDGMENT developers. This work has been partially supported by the H2020 In a recent work, Azim et al. [9] proposed a self-healing Learn project, which has been funded under the ERC solution that can detect crashes in Android apps and avoids Consolidator Grant 2014 program (ERC Grant Agreement future occurrences of the same crashes by bypassing the n. 646867). execution of the code that caused the crash. The approach focuses on failures caused by unhandled exceptions, while REFERENCES the healing actions consist of adding try/catch blocks that [1] “ManagingtheActivityLifecycle,”https://developer.android. capture the unhandled exceptions and skip the execution of com/training/basics/activity-lifecycle/index.html. the problematic activities. Different from this work, DataLossHealer focuses on a [2] “Handling Runtime Changes,” http://developer.android.com/ specificproblem,thatisdatalossproblems,ratherthangen- guide/topics/resources/runtime-changes.html. eral program crashes, with the advantage of implementing [3] Mapbox Android SDK, “Implement onsaveinstancestate.” a mechanism to completely heal failing executions, without impacting on the functionalities offered by the application, [4] T. Remote, “NullPointerException in MainActiv- instead of simply skipping the execution of some function- ity.onSaveInstanceState,” https://github.com/y-polek/ alities without healing them. TransmissionRemote/issues/30. V. CONCLUSION [5] Android PagerSlidingTabStrip, “Changing orientation causes ActionBar color to be reset,” https://github.com/astuetz/ While using mobile devices, users generate stop-start PagerSlidingTabStrip/issues/1. events, which are events that cause the foreground appli- [6] G.Hu,X.Yuan,Y.Tang,andJ.Yang,“Efficiently,effectively cation to be stopped and successively restored. Frequent detecting mobile app bugs with appdoctor,” in Proceedings cases where these events are generated include receiving oftheEuropeanConferenceonComputerSystems(EuroSys), an incoming call, switching from one app to another, and 2014, pp. 18:1–18:15. rotating the screen of the smartphone. In all these cases, the state of the app must be properly [7] C. Q. Adamsen, G. Mezzetti, and A. Møller, “Systematic execution of android test suites in adverse conditions,” in savedandrestored,otherwisedatamightbelostresultingin Proceedings of the International Symposium on Software adatalossproblem.Datalossproblemsmightbeparticularly Testing and Analysis (ISSTA), 2015, pp. 83–93. annoying for the users, who might experience unexpected behaviors and crashes, in addition to losing their data. [8] “Robotium,” http://www.robotium.org. [9] M. T. Azim, I. Neamtiu, and L. M. Marvel, “Towards self- [23] P.ZhangandS.Elbaum,“Amplifyingteststovalidateexcep- healing smartphone software via automated patching,” in tion handling code: An extended study in the mobile appli- Proceedings of the International Conference on Automated cation domain,” ACM Transactions on Software Engineering Software Engineering (ASE), 2014, pp. 623–628. andMethodology,vol.23,no.4,pp.32:1–32:28,Sep.2014. [10] “ownCloud Notes - An android client for ownCloud [24] R.Mahmood,N.Esfahani,T.Kacem,N.Mirzaei,S.Malek, Notes App,” https://github.com/stefan-niedermann/ andA.Stavrou,“Awhiteboxapproachforautomatedsecurity OwnCloud-Notes. testingofandroidapplicationsonthecloud,”inProceedings oftheInternationalWorkshoponAutomationofSoftwareTest [11] “Xposed,” http://repo.xposed.info/. (AST), 2012, pp. 22–28. [25] C. Gibler, J. Crussell, J. Erickson, and H. Chen, “Androi- [12] “ADBI - The Android Dynamic Binary Instrumentation dleaks: Automatically detecting potential privacy leaks in Toolkitt,” https://github.com/crmulliner/adbi. android applications on a large scale,” in Proceedings of theInternationalConferenceonTrustandTrustworthyCom- [13] “A Java serialization/deserialization library that can convert puting (TRUST), S. Katzenbeisser, E. Weippl, L. J. Camp, JavaObjectsintoJSONandback,”https://github.com/google/ M.Volkamer,M.Reiter,andX.Zhang,Eds.,2012,pp.291– gson. 307. [14] “greenDAO: the superfast Android ORM for SQLite,” http: [26] A. Banerjee, L. K. Chong, S. Chattopadhyay, and A. Roy- //greenrobot.org/greendao/. choudhury, “Detecting energy bugs and hotspots in mobile apps,” in Proceedings of the Joint Meeting of the European [15] “Lightweight, embedded, syncable NoSQL database Software Engineering Conference and the ACM SIGSOFT engine for Android,” https://github.com/couchbase/ Symposium on the Foundations of Software Engineering couchbase-lite-android. (ESEC/FSE), 2014, pp. 588–598. [16] “Object auditing and diff framework for Java,” http://javers. [27] S. Yang, D. Yan, and A. Rountev, “Testing for poor re- org. sponsiveness in android applications,” in Proceedings of the International Workshop on Engineering of Mobile-Enabled [17] H. Muccini, A. D. Francesco, and P. Esposito, “Software Systems (MOBS), 2013, pp. 1–6. testingofmobileapplications:Challengesandfutureresearch directions,”inProceedingsoftheInternationalWorkshopon [28] J. a. P. Magalha˜es and L. M. Silva, “ShO˜wa: A self-healing Automation of Software Test (AST), 2012, pp. 29–35. framework for web-based applications,” ACM Transactions on Autonomous and Adaptive Systems, vol. 10, no. 1, pp. [18] D. Amalfitano, A. R. Fasolino, P. Tramontana, and N. Am- 4:1–4:28, Mar. 2015. atucci, “Considering context events in event-based testing of mobile applications,” in Proceedings of the International [29] S.Sidiroglou,O.Laadan,C.Perez,N.Viennot,J.Nieh,and Conference on Software Testing, Verification and Validation A. D. Keromytis, “Assure: Automatic software self-healing Workshops (ICSTW), 2013, pp. 126–133. usingrescuepoints,”inProceedingsoftheInternationalCon- ferenceonArchitecturalSupportforProgrammingLanguages [19] T. McDonnell, B. Ray, and M. Kim, “An empirical study and Operating Systems (ASPLOS), 2009, pp. 37–48. of api stability and adoption in the android ecosystem,” in Proceedings of the International Conference on Software [30] Y. Dai, Y. Xiang, and G. Zhang, “Self-healing and hybrid Maintenance (ICSM), 2013, pp. 70–79. diagnosis in cloud computing,” in Proceedings of the Inter- nationalConferenceonCloudComputing(CloudCom),M.G. Jaatun, G. Zhao, and C. Rong, Eds., 2009, pp. 45–56. [20] M. Linares-Va´squez, G. Bavota, C. Bernal-Ca´rdenas, M. Di Penta, R. Oliveto, and D. Poshyvanyk, “Api change [31] C. Mulliner, J. Oberheide, W. Robertson, and E. Kirda, andfaultproneness:Athreattothesuccessofandroidapps,” “Patchdroid:Scalablethird-partysecuritypatchesforandroid inProceedingsoftheJointMeetingoftheEuropeanSoftware devices,” in Proceedings of the Annual Computer Security EngineeringConference andthe ACMSIGSOFT Symposium Applications Conference (ACSAC), 2013, pp. 259–268. on the Foundations of Software Engineering (ESEC/FSE), 2013, pp. 477–487. [32] M. Zhang and H. Yin, “Appsealer: Automatic generation of vulnerability-specific patches for preventing component hi- [21] M. E. Joorabchi, A. Mesbah, and P. Kruchten, “Real chal- jackingattacksinandroidapplications,”inProceedingsofthe lenges in mobile app development,” in Proceedings of the AnnualNetworkandDistributedSystemSecuritySymposium InternationalSymposiumonEmpiricalSoftwareEngineering (NDSS), 2014, pp. 1–15. and Measurement (ESEM), 2013, pp. 15–24. [22] H. Khalid, M. Nagappan, E. Shihab, and A. E. Hassan, “Prioritizing the devices to test your app on: A case study of android game apps,” in Proceedings of the Joint Meeting of the European Software Engineering Conference and the ACM SIGSOFT Symposium on the Foundations of Software Engineering (ESEC/FSE), 2014, pp. 610–620.

See more

The list of books you might like

Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.