logo

SCIENTIA SINICA Informationis, Volume 49, Issue 11: 1383-1398(2019) https://doi.org/10.1360/N112019-00018

Progress on software crash research

More info
  • ReceivedJan 28, 2019
  • AcceptedAug 13, 2019
  • PublishedNov 4, 2019

Abstract

Software crashes represent unexpected program interrupts that manifest as software faults and can be dangerous in that their frequent occurrence diminishes user experience, can damage the reputation of a company, and potentially cause significant losses to stakeholders. The increasing scale and complexity of modern software requires methods for preventing/handling software crashes. Here, we briefly review and summarize progress in three areas of the research field associated with handling software crashes: crash analysis, crash reproduction, and crash localization and repair.


Funded by

国家重点研发计划(2018YFB1003901)

国家自然科学基金(61872273,61502345)

湖北省技术创新重大专项(2017AAA125)


References

[1] Mathur A. Foundations of Software Testing. Delhi: Pearson Education India, 2011. Google Scholar

[2] Pressman R S. Software Engineering: a Practitioner's Approach. New York: McGraw-Hill, 2010. Google Scholar

[3] Wikipedia. Crash (computing). 2013. http://en.wikipedia.org/wiki/Crash (computing). Google Scholar

[4] Kim J. Fatal Bugs: Disasters and Revelations from Software Defects. Seoul: Acornpub, 2014. Google Scholar

[5] Wu R X, Zhang H Y, Cheung S C, et al. CrashLocator: locating crashing faults based on crash stacks. In: Proceedings of International Symposium on Software Testing and Analysis, San Jose, 2014. 204--214. Google Scholar

[6] Fan L L, Su T, Chen S, et al. Large-scale analysis of framework-specific exceptions in android apps. In: Proceedings of the 40th International Conference on Software Engineering, Gothenburg, 2018. 408--419. Google Scholar

[7] Li Y H, Ying S, Jia X Y, et al. EH-recommender: recommending exception handling strategies based on program context. In: Proceedings of the 23rd International Conference on Engineering of Complex Computer Systems, Melbourne, 2018. 104--114. Google Scholar

[8] Mozilla. Understanding crash reports. 2017. http://developer.mozilla.org/en-US/docs/Mozilla/Projects/Crash_reporting/Understanding_crash_reports. Google Scholar

[9] Kim S, Zimmermann T, Nagappan N. Crash graphs: an aggregated view of multiple crashes to improve crash triage. In: Proceedings of International Conference on Dependable Systems and Networks, Hong Kong, 2011. 486--493. Google Scholar

[10] Glerum K, Kinshumann K, Greenberg S, et al. Debugging in the (very) large: ten years of implementation and experience. In: Proceedings of the 22nd ACM Symposium on Operating Systems Principles, Big Sky, 2009. 103--116. Google Scholar

[11] Apple. Technical note tn2123. 2010. http://developer.apple.com/library/archive/technotes/tn2004/tn2123.html. Google Scholar

[12] Mozilla. Mozilla crash reporters. 2016. http://crash-stats.mozilla.com/. Google Scholar

[13] NetBeans. Netbeans crash reporters. 2015. http://netbeans.org/bugzilla/. Google Scholar

[14] Ganapathi A, Ganapathi V, Patterson D A. Windows XP kernel crash analysis. In: Proceedings of the 20th Conference on Systems Administration, Washington, 2006. 149--159. Google Scholar

[15] Kim D, Wang X, Kim S. Which Crashes Should I Fix First?: Predicting Top Crashes at an Early Stage to Prioritize Debugging Efforts. IIEEE Trans Software Eng, 2011, 37: 430-447 CrossRef Google Scholar

[16] Gu Z, Barr E T, Hamilton D J, et al. Has the bug really been fixed? In: Proceedings of the 32nd ACM/IEEE International Conference on Software Engineering, Cape Town, 2010. 55--64. Google Scholar

[17] Seo H, Kim S. Predicting recurring crash stacks. In: Proceedings of International Conference on Automated Software Engineering, Essen, 2012. 180--189. Google Scholar

[18] Su T, Meng G Z, Chen Y T, et al. Guided, stochastic model-based GUI testing of Android apps. In: Proceedings of the 11th Joint Meeting on Foundations of Software Engineering, Paderborn, 2017. 245--256. Google Scholar

[19] Dang Y N, Wu R X, Zhang H Y, et al. ReBucket: a method for clustering duplicate crash reports based on call stack similarity. In: Proceedings of the 34th International Conference on Software Engineering, Zurich, 2012. 1084--1093. Google Scholar

[20] van Tonder R, Kotheimer J, Le Goues C. Semantic crash bucketing. In: Proceedings of the 33rd ACM/IEEE International Conference on Automated Software Engineering, Montpellier, 2018. 612--622. Google Scholar

[21] Artzi S, Kim S, Ernst M D. ReCrash: making software failures reproducible by preserving object states. In: Proceedings of European Conference on Object-Oriented Programming, Paphos, 2008. 542--565. Google Scholar

[22] Joorabchi M E, MirzaAghaei M, Mesbah A. Works for me characterizing non-reproducible bug reports. In: Proceedings of the 11th Working Conference on Mining Software Repositories, Hyderabad, 2014. 62--71. Google Scholar

[23] Steven J, Chandra P, Fleck B, et al. jRapture: a capture/replay tool for observation-based testing. In: Proceedings of International Symposium on Software Testing and Analysis, Portland, 2000. 158--167. Google Scholar

[24] Narayanasamy S, Pokam G, Calder B. BugNet: continuously recording program execution for deterministic replay debugging. In: Proceedings of the 32st International Symposium on Computer Architecture, Madison, 2005. 284--295. Google Scholar

[25] Clause J, Orso A. A technique for enabling and supporting debugging of field failures. In: Proceedings of the 29th International Conference on Software Engineering, Minneapolis, 2007. 261--270. Google Scholar

[26] Artzi S, Kim S, Ernst M D. ReCrashJ: a tool for capturing and reproducing program crashes in deployed applications. In: Proceedings of the 7th Joint Meeting of the European Software Engineering Conference and ACM SIGSOFT International Symposium on Foundations of Software Engineering, Amsterdam, 2009. 295--296. Google Scholar

[27] Jin W, Orso A. BugRedux: reproducing field failures for in-house debugging. In: Proceedings of the 34th International Conference on Software Engineering, Zurich, 2012. 474--484. Google Scholar

[28] Zhang J, Zhang C, Xuan J F, et al. Recent progress in program analysis. J Softw, 2019, 30: 80--109. Google Scholar

[29] RÖßler J, Zeller A, Fraser G, et al. Reconstructing core dumps. In: Proceedings of the 6th IEEE International Conference on Software Testing, Verification and Validation, Luxembourg, 2013. 114–123. Google Scholar

[30] Fraser G, Arcuri A. EvoSuite: automatic test suite generation for object-oriented software. In: Proceedings of the 19th ACM SIGSOFT Symposium on the Foundations of Software Engineering, Szeged, 2011. 416--419. Google Scholar

[31] Cao Y, Zhang H Y, Ding S. SymCrash: selective recording for reproducing crashes. In: Proceedings of the International Conference on Automated Software Engineering, Vasteras, 2014. 791--802. Google Scholar

[32] Chen N, Kim S. STAR: Stack Trace Based Automatic Crash Reproduction via Symbolic Execution. IIEEE Trans Software Eng, 2015, 41: 198-220 CrossRef Google Scholar

[33] Xuan J F, Xie X Y, Monperrus M. Crash reproduction via test case mutation: let existing test cases help. In: Proceedings of the 10th Joint Meeting on Foundations of Software Engineering, Bergamo, 2015. 910--913. Google Scholar

[34] Soltani M, Panichella A, van Deursen A. Evolutionary testing for crash reproduction. In: Proceedings of the 9th International Workshop on Search-Based Software Testing, Austin, 2016. Google Scholar

[35] Soltani M, Panichella A, van Deursen A. A guided genetic algorithm for automated crash reproduction. In: Proceedings of the 39th International Conference on Software Engineering, Buenos Aires, 2017. 209--220. Google Scholar

[36] Csallner C, Smaragdakis Y. JCrasher: an automatic robustness tester for Java. Softw-Pract Exper, 2004, 34: 1025-1050 CrossRef Google Scholar

[37] Csallner C, Smaragdakis Y. Check `n' crash: combining static checking and testing. In: Proceedings of the 27th International Conference on Software Engineering, St. Louis, 2005. 422--431. Google Scholar

[38] Gu Y F, Xuan J F, Qian T Y. Automatic reproducible crash detection. In: Proceedings of the International Conference on Software Analysis, Testing and Evolution, Kunming, 2016. 48--53. Google Scholar

[39] Just R, Jalali D, Ernst M D. Defects4J: a database of existing faults to enable controlled testing studies for java programs. In: Proceedings of International Symposium on Software Testing and Analysis, San Jose, 2014. 437--440. Google Scholar

[40] Mao K, Harman M, Jia Y. Sapienz: multi-objective automated testing for android applications. In: Proceedings of the 25th International Symposium on Software Testing and Analysis, Saarbrücken, 2016. 94--105. Google Scholar

[41] Xuan J F, Gu Y F, Ren Z L, et al. Genetic configuration sampling: learning a sampling strategy for fault detection of configurable systems. In: Proceedings of Genetic and Evolutionary Computation Conference Companion, Kyoto, 2018. 1624--1631. Google Scholar

[42] Kechagia M, Mitropoulos D, Spinellis D. Charting the API minefield using software telemetry data. Empir Software Eng, 2015, 20: 1785-1830 CrossRef Google Scholar

[43] Gu Y, Xuan J, Zhang H. Does the fault reside in a stack trace? Assisting crash localization by predicting crashing fault residence. J Syst Software, 2019, 148: 88-104 CrossRef Google Scholar

[44] Wu R, Wen M, Cheung S C. ChangeLocator: locate crash-inducing changes based on crash reports. Empir Software Eng, 2018, 23: 2866-2900 CrossRef Google Scholar

[45] Ren Z L, Jiang H, Xuan J F, et al. Automated localization for unreproducible builds. In: Proceedings of the 40th International Conference on Software Engineering, Gothenburg, 2018. 71--81. Google Scholar

[46] Xuan J F, Monperrus M. Test case purification for improving fault localization. In: Proceedings of the 22nd ACM SIGSOFT International Symposium on Foundations of Software Engineering, Hong Kong, 2014. 52--63. Google Scholar

[47] Jones J A, Harrold M J, Stasko J T. Visualization of test information to assist fault localization. In: Proceedings of the 24th International Conference on Software Engineering, Orlando, 2002. 467--477. Google Scholar

[48] Abreu R, Zoeteweij P, van Gemund A J C. An evaluation of similarity coefficients for software fault localization. In: Proceedings of the 12th IEEE Pacific Rim International Symposium on Dependable Computing, Riverside, 2006. 39--46. Google Scholar

[49] Abreu R, Zoeteweij P, van Gemund A J C. On the accuracy of spectrum-based fault localization. In: Proceedings of Testing: Academic and Industrial Conference Practice and Research Techniques -- MUTATION, Windsor, 2007. 89--98. Google Scholar

[50] Naish L, Lee H J, Ramamohanarao K. A model for spectra-based software diagnosis. ACM Trans Softw Eng Methodol, 2011, 20: 1-32 CrossRef Google Scholar

[51] Xie X, Chen T Y, Kuo F C. A theoretical analysis of the risk evaluation formulas for spectrum-based fault localization. ACM Trans Softw Eng Methodol, 2013, 22: 1-40 CrossRef Google Scholar

[52] Xuan J F, Ren Z L, Wang Z Y, et al. Progress on approaches to automatic program repair. J Softw, 2016, 27: 77--784. Google Scholar

[53] Wang Z, Gao J, Chen X, et al. Automatic program repair techniques: a aurvey. Chinese J Comput, 2018, 41: 588--610. Google Scholar

[54] Le Goues C, Nguyen T V, Forrest S. GenProg: A Generic Method for Automatic Software Repair. IIEEE Trans Software Eng, 2012, 38: 54-72 CrossRef Google Scholar

[55] Kim D, Nam J, Song J, et al. Automatic patch generation learned from human-written patches. In: Proceedings of the 35th International Conference on Software Engineering, San Francisco, 2013. 802--811. Google Scholar

[56] Qi Z C, Long F, Achour S, et al. An analysis of patch plausibility and correctness for generate-and-validate patch generation systems. In: Proceedings of International Symposium on Software Testing and Analysis, Baltimore, 2015. 24--36. Google Scholar

[57] Xuan J, Cornu B, Martinez M. B-Refactoring: Automatic test code refactoring to improve dynamic analysis. Inf Software Tech, 2016, 76: 65-80 CrossRef Google Scholar

[58] Le X D, Lo D, Le Goues C. History driven program repair. In: Proceedings of the 23rd International Conference on Software Analysis, Evolution, and Reengineering, Osaka, 2016. 213--224. Google Scholar

[59] Xuan J, Martinez M, DeMarco F. Nopol: Automatic Repair of Conditional Statement Bugs in Java Programs. IIEEE Trans Software Eng, 2017, 43: 34-55 CrossRef Google Scholar

[60] Xiong Y F, Wang J, Yan R F, et al. Precise condition synthesis for program repair. In: Proceedings of the 39th International Conference on Software Engineering, Buenos Aires, 2017. 416--426. Google Scholar

[61] Gao Q, Zhang H S, Wang J, et al. Fixing recurring crash bugs via analyzing Q&A sites. In: Proceedings of the 30th IEEE/ACM International Conference on Automated Software Engineering, Lincoln, 2015. 307--318. Google Scholar

[62] Tan S H, Dong Z, Gao X, et al. Repairing crashes in android apps. In: Proceedings of the 40th International Conference on Software Engineering, Gothenburg, 2018. 187--198. Google Scholar

[63] Ke Y, Stolee K T, Le Goues C, et al. Repairing programs with semantic code search. In: Proceedings of the 30th International Conference on Automated Software Engineering, Lincoln, 2015. 295--306. Google Scholar

[64] Tan S H, Roychoudhury A. Relifix: automated repair of software regressions. In: Proceedings of the 37th International Conference on Software Engineering, Florence, 2015. 471--482. Google Scholar

[65] Kaleeswaran S, Tulsian V, Kanade A, et al. Minthint: automated synthesis of repair hints. In: Proceedings of the 36th International Conference on Software Engineering, Hyderabad, 2014. 266--276. Google Scholar

  • Figure 1

    Code snippet of crash Lang-747 in the Apache Commons Lang project. (a) Stack trace of Lang-747; (b) code snippet of Lang-747; (c) control flow graph of the code snippet (a number in a bracket denotes a line ID)

  • Figure 2

    (Color online) Workflow of a crash reporting system

  • Figure 3

    Two categories of methods for crash reproduction

  • Table 1   Comparison among typical crash reproduction methods
    Method Input Technique Potential drawback Category
    ReCrash [21] Instrumented code Selective monitoring High computation consumption Monitoring based reproduction
    BugRedux [27] Instrumented code Symbolic execution Some complex constraints are hard to solve
    ReCore [29] Source code,core dump Genetic algorithm Some complex crashes are hard to reproduce Stack trace based reproduction
    SymCrash [31] Source code,stack trace Selective monitoring,symbolic execution Some complex constraints are hard to solve
    Star [32] Source code,stack trace Symbolic execution Some complex constraints are hard to solve
    MuCrash [33] Source code,stack trace,test cases Test case mutation Some complex crashes are hard to reproduce
    EvoCrash [35] Source code,stack trace,test cases Genetic algorithm Some complex crashes are hard to reproduce

Copyright 2020 Science China Press Co., Ltd. 《中国科学》杂志社有限责任公司 版权所有

京ICP备18024590号-1       京公网安备11010102003388号