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


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