Abstract
This article presents a survey on automatic software repair. Automatic software repair consists of automatically finding a solution to software bugs without human intervention. This article considers all kinds of repairs. First, it discusses behavioral repair where test suites, contracts, models, and crashing inputs are taken as oracle. Second, it discusses state repair, also known as runtime repair or runtime recovery, with techniques such as checkpoint and restart, reconfiguration, and invariant restoration. The uniqueness of this article is that it spans the research communities that contribute to this body of knowledge: software engineering, dependability, operating systems, programming languages, and security. It provides a novel and structured overview of the diversity of bug oracles and repair operators used in the literature.
- Robin Abraham and Martin Erwig. 2005. Goal-directed debugging of spreadsheets. In Proceedings of the 2005 IEEE Symposium on Visual Languages and Human-Centric Computing. 37--44. Google ScholarDigital Library
- Edward Aftandilian, Raluca Sauciuc, Siddharth Priya, and Sundaresan Krishnan. 2012. Building useful program analysis tools using an extensible java compiler. In Proceedings of the International Working Conference on Source Code Analysis and Manipulation (SCAM’12). 14--23. Google ScholarDigital Library
- Paul E. Ammann and John C. Knight. 1988. Data diversity: An approach to software fault tolerance. IEEE Trans. Comput. 37, 4 (1988), 418--425. Google ScholarDigital Library
- Jesper Andersen and Julia L. Lawall. 2010. Generic patch inference. Automat. Softw. Eng. 17, 2 (2010), 119--148. Google ScholarDigital Library
- Andrea Arcuri. 2009. Automatic Software Generation and Improvement Through Search Based Techniques. Ph.D. Dissertation. The University of Birmingham.Google Scholar
- Andrea Arcuri. 2011. Evolutionary repair of faulty software. Appl. Soft Comput. 11, 4 (2011), 3494--3514. Google ScholarDigital Library
- Andrea Arcuri and Xin Yao. 2008. A novel co-evolutionary approach to automatic software bug fixing. In Proceedings of the IEEE Congress on Evolutionary Computation. 162--168.Google ScholarCross Ref
- Algirdas Avizienis. 1985. The N-version approach to fault-tolerant software. IEEE Trans. Softw. Eng. 11, 12 (1985), 1491--1501. Google ScholarDigital Library
- Algirdas Avizienis, J.-C. Laprie, Brian Randell, and Carl Landwehr. 2004. Basic concepts and taxonomy of dependable and secure computing. IEEE Trans. Depend. Sec. Comput. 1, 1 (2004), 11--33. Google ScholarDigital Library
- Tanzirul Azim, Iulian Neamtiu, and Lisa Marvel. 2014. Towards self-healing smartphone software via automated patching. In Proceedings of the 29th ACM/IEEE International Conference on Automated Software Engineering. 623--628. Google ScholarDigital Library
- E. T. Barr, M. Harman, P. McMinn, M. Shahbaz, and S. Yoo. 2015. The oracle problem in software testing: A survey. IEEE Trans. Soft. Eng. 41, 5 (2015), 507--525.Google ScholarDigital Library
- Earl T. Barr, Yuriy Brun, Premkumar T. Devanbu, Mark Harman, and Federica Sarro. 2014. The plastic surgery hypothesis. In Proceedings of the 22nd ACM SIGSOFT International Symposium on Foundations of Software Engineering. 306--317. Google ScholarDigital Library
- Emery D. Berger and Benjamin G. Zorn. 2006. DieHard: Probabilistic memory safety for unsafe languages. ACM SIGPLAN Not. 41, 6 (2006), 158--168. Google ScholarDigital Library
- Rastislav Bodik and Barbara Jobstmann. 2013. Algorithmic program synthesis: Introduction. Int. J. Softw. Tools Technol. Transf. 15, 5 (2013), 397--411.Google ScholarDigital Library
- M. Brodie, S. Ma, G. Lohman, L. Mignet, M. Wilding, J. Champlin, and P. Sohn. 2005. Quickly finding known software problems via automated symptom matching. In Proceedings of the International Conference on Autonomic Computing. 101--110. Google ScholarDigital Library
- Yuriy Brun, Earl Barr, Ming Xiao, Claire Le Goues, and Prem Devanbu. 2013. Evolution Vs. Intelligent Design in Program Patching. Technical Report. UC Davis.Google Scholar
- Yan Cai and Lingwei Cao. 2016. Fixing deadlocks via lock pre-acquisitions. In Proceedings of the 38th International Conference on Software Engineering. ACM, 1109--1120. Google ScholarDigital Library
- G. Candea and A. Fox. 2001. Recursive restartability: Turning the reboot sledgehammer into a scalpel. In Proceedings of the 8th Workshop on Hot Topics in Operating Systems. 125--130. Google ScholarDigital Library
- G. Candea and A. Fox. 2003. Crash-only software. In Proceedings of the 9th Conference on Hot Topics in Operating Systems. 12--12. Google ScholarDigital Library
- George Candea, Shinichi Kawamoto, Yuichi Fujiki, Greg Friedman, and Armando Fox. 2004. Microreboot: A technique for cheap recovery. In Proceedings of the 6th Conference on Symposium on Operating Systems Design 8 Implementation. 3--3. Google ScholarDigital Library
- G. Candea, E. Kiciman, S. Zhang, P. Keyani, and A. Fox. 2003. JAGR: An autonomous self-recovering application server. In Proceedings of the Workshop on Active Middleware Services. 168--177.Google Scholar
- Michael Carbin, Sasa Misailovic, Michael Kling, and Martin C. Rinard. 2011. Detecting and escaping infinite loops with jolt. In Procceedings of the European Conference on Object-Oriented Programming (ECOOP’11). 609--633. Google ScholarDigital Library
- Antonio Carzaniga, Alessandra Gorla, Andrea Mattavelli, Nicolò Perino, and Mauro Pezzè. 2013. Automatic recovery from runtime failures. In Proceedings of the International Conference on Software Engineering. Google ScholarDigital Library
- Antonio Carzaniga, Alessandra Gorla, Nicolò Perino, and Mauro Pezzè. 2010. Automatic workarounds for web applications. In Proceedings of the Foundations of Software Engineering Conference. 237--246. Google ScholarDigital Library
- Satish Chandra, Emina Torlak, Shaon Barman, and Rastislav Bodik. 2011. Angelic debugging. In Proceeding of the International Conference on Software Engineering. 121--130. Google ScholarDigital Library
- Shang-Wen Cheng, David Garlan, Bradley R. Schmerl, João Pedro Sousa, Bridget Spitnagel, and Peter Steenkiste. 2002. Using architectural style as a basis for system self-repair. In Proceedings of the IFIP 17th World Computer Congress/3rd IEEE/IFIP Conference on Software Architecture: System Design, Development and Maintenance. 45--59. Google ScholarDigital Library
- Zack Coker and Munawar Hafiz. 2013. Program transformations to fix C integers. In Proceedings of the International Conference on Software Engineering. 792--801. Google ScholarDigital Library
- Benoit Cornu, Lionel Seinturier, and Martin Monperrus. 2015. Exception handling analysis and transformation using fault injection: Study of resilience against unanticipated exceptions. Inf. Softw. Technol. 57 (Jan. 2015), 66--76.Google Scholar
- Manuel Costa, Jon Crowcroft, Miguel Castro, Antony Rowstron, Lidong Zhou, Lintao Zhang, and Paul Barham. 2005. Vigilante: End-to-end containment of internet worms. In ACM SIGOPS Operating Systems Review, Vol. 39. 133--147. Google ScholarDigital Library
- Marcos Aurélio Almeida da Silva, Alix Mougenot, Xavier Blanc, and Reda Bendraou. 2010. Towards automated inconsistency handling in design models. In Proceedings of the 22nd International Conference on Advanced Information Systems Engineering. 348--362. Google ScholarDigital Library
- Valentin Dallmeier, Andreas Zeller, and Bertrand Meyer. 2009. Generating fixes from object behavior anomalies. In Proceedings of the International Conference on Automated Software Engineering. 5. Google ScholarDigital Library
- Brett Daniel, Vilas Jagannath, Danny Dig, and Darko Marinov. 2009. ReAssert: Suggesting repairs for broken unit tests. In Proceedings of the 24th IEEE/ACM International Conference on Automated Software Engineering. 433--444. Google ScholarDigital Library
- V. Debroy and W. E. Wong. 2010. Using mutation to automatically suggest fixes for faulty programs. In Proceedings of the International Conference on Software Testing, Verification and Validation. 65--74. Google ScholarDigital Library
- Favio Demarco, Jifeng Xuan, Daniel Le Berre, and Martin Monperrus. 2014. Automatic repair of buggy if conditions and missing preconditions with SMT. In Proceedings of the 6th International Workshop on Constraints in Software Testing, Verification, and Analysis (CSTVA’14). Hyderabad, India. Google ScholarDigital Library
- Brian Demsky and Alokika Dash. 2008. Bristlecone: A language for robust software systems. In Proceedings of the European Conference on Object-Oriented Programming (ECOOP’08). 490--515. Google ScholarDigital Library
- B. Demsky and M. Rinard. 2003. Automatic detection and repair of errors in data structures. ACM SIGPLAN Not. 38, 11 (2003), 78--95. Google ScholarDigital Library
- Giovanni Denaro, Mauro Pezzè, and Davide Tosi. 2009. Ensuring interoperable service-oriented systems through engineered self-healing. In Proceedings of the 7th Joint Meeting of the European Software Engineering Conference and the ACM SIGSOFT Symposium on the Foundations of Software Engineering. 253--262. Google ScholarDigital Library
- Louise A. Dennis, Raul Monroy, and Pablo Nogueira. 2006. Proof-directed debugging and repair. In Proceedings of the 7th Symposium on Trends in Functional Programming. 131--140.Google Scholar
- Aritra Dhar, Rahul Purandare, Mohan Dhawan, and Suresh Rangaswamy. 2015. CLOTHO: Saving programs from malformed strings and incorrect string-handling. In Foundations of Software Engineering. ACM, 555--566. Google ScholarDigital Library
- Kinga Dobolyi and Westley Weimer. 2008. Changing java’s semantics for handling null pointer exceptions. In Proceedings of the 19th International Symposium on Software Reliability Engineering. 47--56. Google ScholarDigital Library
- J. A. Duraes and H. S. Madeira. 2006. Emulation of software faults: A field data study and a practical approach. IEEE Trans. Softw. Eng. 32, 11 (2006), 849--867. Google ScholarDigital Library
- Loris D’Antoni, Roopsha Samanta, and Rishabh Singh. 2016. Qlose: Program repair with quantitative objectives. In International Conference on Computer Aided Verification. Springer, 383--401.Google ScholarCross Ref
- Marc Eisenstadt. 1997. My hairiest bug war stories. Commun. ACM 40, 4 (1997), 30--37. Google ScholarDigital Library
- B. Elkarablieh, I. Garcia, Y. L. Suen, and S. Khurshid. 2007. Assertion-based repair of complex data structures. In Proceedings of the 22nd IEEE/ACM International Conference on Automated Software Engineering. 64--73. Google ScholarDigital Library
- H. ETO and K. Yoda. 2001. Propolice: Improved stacksmashing attack detection. IPSJ SIG Not2 75 (2001), 181--188.Google Scholar
- S. Forrest, T. V. Nguyen, W. Weimer, and C. Le Goues. 2009. A genetic programming approach to automated software repair. In Proceedings of the 11th Annual Conference on Genetic and Evolutionary Computation. 947--954. Google ScholarDigital Library
- Gerhard Friedrich, Mariagrazia Fugini, Enrico Mussi, Barbara Pernici, and Gaston Tagni. 2010. Exception handling for repair in service-based processes. IEEE Trans. Softw. Eng. 36, 2 (2010), 198--215. Google ScholarDigital Library
- Zachary P. Fry, Bryan Landau, and Westley Weimer. 2012. A human study of patch maintainability. In Proceedings of the International Symposium on Software Testing and Analysis. 177--187. Google ScholarDigital Library
- Richard P. Gabriel and Ron Goldman. 2006. Conscientious software. In ACM SIGPLAN Notices, Vol. 41. 433--450. Google ScholarDigital Library
- Qing Gao, Yingfei Xiong, Yaqing Mi, Lu Zhang, Weikun Yang, Zhaoping Zhou, Bing Xie, and Hong Mei. 2015. Safe memory-leak fixing for C programs. In Proceedings of the 37th International Conference on Software Engineering. 459--470. Google ScholarDigital Library
- Qing Gao, Hansheng Zhang, Jie Wang, Yingfei Xiong, Lu Zhang, and Hong Mei. 2015. Fixing recurring crash bugs via analyzing Q&A sites. In Proceedings of the 30th IEEE/ACM International Conference on Automated Software Engineering. ACM.Google ScholarDigital Library
- Z. Gao, Z. Chen, Y. Zou, and A. Memon. 2015. SITAR: GUI test script repair. IEEE Trans. Softw. Eng. 42, 2 (2015), 170--186. Google ScholarDigital Library
- David Garlan, Shang-Wen Cheng, and Bradley Schmerl. 2003. Increasing system dependability through architecture-based self-repair. In Architecting Dependable Systems. 61--89. Google ScholarDigital Library
- Brady J. Garvin, Myra B. Cohen, and Matthew B. Dwyer. 2011. Using feature locality: Can we leverage history to avoid failures during reconfiguration? In Proceedings of the 8th Workshop on Assurances for Self-Adaptive Systems. 24--33. Google ScholarDigital Library
- Selvin George, David Evans, and Steven Marchette. 2013. A biological programming model for self-healing. In Proceedings of the 2003 ACM Workshop on Survivable and Self-Regenerative Systems (SSRS). Fairfax, VA, 72--81. Google ScholarDigital Library
- Debanjan Ghosh, Raj Sharman, H. Raghav Rao, and Shambhu Upadhyaya. 2007. Self-healing systems survey and synthesis. Decis. Support Syst. 42, 4 (2007), 2164--2185. Google ScholarDigital Library
- Divya Gopinath, Sarfraz Khurshid, Diptikalyan Saha, and Satish Chandra. 2014. Data-guided repair of selection statements. In Proceedings of the 36th International Conference on Software Engineering. 243--253. Google ScholarDigital Library
- Divya Gopinath, Muhammad Zubair Malik, and Sarfraz Khurshid. 2011. Specification-based program repair using SAT. In Proceedings of the International Conference on Tools and Algorithms for the Construction and Analysis of Systems. Google ScholarDigital Library
- Andreas Griesmayer, Roderick Bloem, and Byron Cook. 2006. Repair of boolean programs with an application to C. In Computer Aided Verification. 358--371. Google ScholarDigital Library
- Rahul Gupta, Soham Pal, Aditya Kanade, and Shirish Shevade. 2017. DeepFix: Fixing common C language errors by deep learning. In Proceedings of the AAAI Conference on Artificial Intelligence.Google Scholar
- Björn Hartmann, Daniel MacDougall, Joel Brandt, and Scott R. Klemmer. 2010. What would other programmers do: Suggesting solutions to error messages. In Proceedings of the SIGCHI Conference on Human Factors in Computing Systems. 1019--1028. Google ScholarDigital Library
- Haifeng He and Neelam Gupta. 2004. Automated debugging using path-based weakest preconditions. In Proceedings of the 7th International Conference on Fundamental Approaches to Software Engineering (FASE’04). 267--280.Google ScholarCross Ref
- Petr Hosek and Cristian Cadar. 2013. Safe software updates via multi-version execution. In Proceedings of the International Conference on Software Engineering. 612--621. Google ScholarDigital Library
- David Hovemeyer and William Pugh. 2004. Finding bugs is easy. ACM SIGPLAN Not. 39, 12 (2004). Google ScholarDigital Library
- Y. Huang, C. Kintala, N. Kolettis, and N. D. Fulton. 1995. Software rejuvenation: Analysis, module and applications. In Proceedings of the International Symposium on Fault-Tolerant Computing. 381--390. Google ScholarDigital Library
- Daniel Jackson and Mandana Vaziri. 2000. Finding bugs with a constraint solver. In Proceedings of the 2000 ACM SIGSOFT International Symposium on Software Testing and Analysis. 14--25. Google ScholarDigital Library
- Dennis Jeffrey, Min Feng, Neelam Gupta, and Rajiv Gupta. 2009. BugFix: A learning-based tool to assist developers in fixing bugs. In Proceedings of the International Conference on Program Comprehension (ICPC’09). 70--79.Google ScholarCross Ref
- Dennis Jeffrey, Neelam Gupta, and Rajiv Gupta. 2008. Fault localization using value replacement. In Proceedings of the International Symposium on Software Testing and Analysis. 167--178. Google ScholarDigital Library
- Susmit Jha, Sumit Gulwani, Sanjit A Seshia, and Ashish Tiwari. 2010. Oracle-guided component-based program synthesis. In Proceedings of the International Conference on Software Engineering, Vol. 1. 215--224. Google ScholarDigital Library
- Mingyue Jiang, Tsong Yueh Chen, Fei-Ching Kuo, Dave Towey, and Zuohua Ding. 2016. A metamorphic testing approach for supporting program repair without the need for a test oracle. J. Syst. Softw. (2016).Google Scholar
- G. Jin, L. Song, W. Zhang, S. Lu, and B. Liblit. 2011. Automated atomicity-violation fixing. In Proceedings of the 32nd ACM SIGPLAN Conference on Programming Language Design and Implementation 46, 6 (2011), 389--400. Google ScholarDigital Library
- Barbara Jobstmann, Andreas Griesmayer, and Roderick Bloem. 2005. Program repair as a game. In Computer Aided Verification. 226--238. Google ScholarDigital Library
- H. Jula, D. Tralamazza, C. Zamfir, and G. Candea. 2008. Deadlock immunity: Enabling systems to defend against deadlocks. In Proceedings of the 8th USENIX Conference on Operating Systems Design and Implementation. 295--308. Google ScholarDigital Library
- Shalini Kaleeswaran, Varun Tulsian, Aditya Kanade, and Alessandro Orso. 2014. Minthint: Automated synthesis of repair hints. In Proceedings of the International Conference on Software Engineering. 266--276. Google ScholarDigital Library
- Sara Kalvala and Richard Warburton. 2011. A formal approach to fixing bugs. In Formal Methods, Foundations and Applications. 172--187. Google ScholarDigital Library
- Aditya Kalyanpur, Bijan Parsia, Evren Sirin, and Bernardo Cuenca-Grau. 2006. Repairing unsatisfiable concepts in OWL ontologies. In The Semantic Web: Research and Applications. Vol. 4011. 170--184. Google ScholarDigital Library
- M. Kasbekar, C. Narayanan, and C. R. Das. 1999. Selective checkpointing and rollbacks in multi-threaded object-oriented environment. IEEE Trans. Reliabil. 48, 4 (1999), 325--337.Google ScholarCross Ref
- Yalin Ke, Kathryn T. Stolee, Claire Le Goues, and Yuriy Brun. 2015. Repairing programs with semantic code search. In Proceedings of the International Conference on Automated Software Engineering.Google ScholarDigital Library
- Christian Kern and Javier Esparza. 2010. Automatic error correction of java programs. In Formal Methods for Industrial Critical Systems. 67--81. Google ScholarDigital Library
- Dongsun Kim, Jaechang Nam, Jaewoo Song, and Sunghun Kim. 2013. Automatic patch generation learned from human-written patches. In Proceedings of the 32nd ACM/IEEE International Conference on Software Engineering (ICSE’13). Google ScholarDigital Library
- Etienne Kneuss, Manos Koukoutos, and Viktor Kuncak. 2015. Deductive program repair. In International Conference on Computer Aided Verification. Springer, 217--233.Google ScholarCross Ref
- Donald E. Knuth. 1989. The errors of TEX. Softw. Pract. Exper. 19, 7 (1989), 607--685. Google ScholarDigital Library
- Xianglong Kong, Lingming Zhang, W. Eric Wong, and Bixin Li. 2015. Experience report: How do techniques, programs, and tests impact automated program repair? In Proceedings of the International Symposium on Software Reliability Engineering. IEEE, 194--204. Google ScholarDigital Library
- Robert Könighofer and Roderick Bloem. 2011. Automated error localization and correction for imperative programs. In Proceedings of the Formal Methods in Computer-Aided Design (FMCAD’11), 2011. 91--100. Google ScholarDigital Library
- Robert Könighofer and Roderick Bloem. 2013. Repair with on-the-fly program analysis. In Hardware and Software: Verification and Testing. 56--71. Google ScholarDigital Library
- R. Koo and S. Toueg. 1987. Checkpointing and rollback-recovery for distributed systems. IEEE Trans. Softw. Eng. 1 (1987), 23--31. Google ScholarDigital Library
- Matt Lake. 2010. Epic Failures: 11 Infamous Software Bugs. Retrieved from http://www.computerworld.com/article/2515483/enterprise-applications/epic-failures--11-infamous-software-bugs.html.Google Scholar
- Sebastian Lamelas-Marcote and Martin Monperrus. 2015. Automatic Repair of Infinite Loops. Technical Report hal-01144026. University of Lille. https://arxiv.org/pdf/1504.05078.pdf.Google Scholar
- Julia L. Lawall, Julien Brunel, Nicolas Palix, René Rydhof Hansen, Henrik Stuart, and Gilles Muller. 2009. WYSIWIB: A declarative approach to finding API protocols and bugs in linux code. In International Conference on Dependable Systems 8 Networks. 43--52.Google ScholarCross Ref
- N. Lazaar, A. Gotlieb, and Y. Lebbah. 2011. A framework for the automatic correction of constraint programs. In Proceedings of the International Conference on Software Testing, Verification and Validation. 319--326. Google ScholarDigital Library
- X. B. D. Le, D. Lo, and C. L. Goues. 2016. History driven program repair. In Proceedings of the 23rd International Conference on Software Analysis, Evolution, and Reengineering (SANER’16). 213--224.Google Scholar
- C. Le Goues, M. Dewey-Vogt, S. Forrest, and W. Weimer. 2012. A systematic study of automated program repair: fixing 55 out of 105 bugs for $8 each. In Proceedings of the International Conference on Software Engineering. 3--13. Google ScholarDigital Library
- Claire Le Goues, Stephanie Forrest, and Westley Weimer. 2013. Current challenges in automatic software repair. Softw. Qual. J. 21, 3 (2013), 421--443. Google ScholarDigital Library
- Claire Le Goues, Neal Holtschulte, Edward K. Smith, Yuriy Brun, Premkumar Devanbu, Stephanie Forrest, and Westley Weimer. 2015. The ManyBugs and IntroClass benchmarks for automated repair of C programs. (unpublished).Google Scholar
- Claire Le Goues, ThanhVu Nguyen, Stephanie Forrest, and Westley Weimer. 2012. GenProg: A generic method for automatic software repair. IEEE Trans. Softw. Eng. 38 (2012), 54--72. Google ScholarDigital Library
- Maurizio Leotta, Diego Clerissi, Filippo Ricca, and Cristiano Spadaro. 2013. Repairing selenium test cases: An industrial case study about web page element localization. In International Conference on Software Testing, Verification and Validation. IEEE, 487--488. Google ScholarDigital Library
- R. Levinson. 2005. Unified planning and execution for autonomous software repair. In Workshop on Plan Execution: A Reality Check.Google Scholar
- Chris Lewis and Jim Whitehead. 2010. Runtime repair of software faults using event-driven monitoring. In Proceedings of the 32nd ACM/IEEE International Conference on Software Engineering (ICSE’10), vol. 2. 275. Google ScholarDigital Library
- Z. Liang and R. Sekar. 2005. Fast and automated generation of attack signatures: A basis for building self-protecting servers. In Proceedings of the 12th ACM Conference on Computer and Communications Security. 213--222. Google ScholarDigital Library
- Yiyan Lin and Sandeep Kulkarni. 2014. Automatic repair for multi-threaded programs with deadlock/livelock using maximum satisfiability. In Proceedings of the 2014 International Symposium on Software Testing and Analysis. ACM, 237--247. Google ScholarDigital Library
- Z. Lin, X. Jiang, D. Xu, B. Mao, and L. Xie. 2007. AutoPaG: Towards automated software patch generation with source code root cause identification and repair. In Proceedings of the 2nd ACM Symposium on Information, Computer and Communications Security. 329--340. Google ScholarDigital Library
- Chen Liu, Jinqiu Yang, Lin Tan, and Munawar Hafiz. 2013. R2Fix: Automatically generating bug fixes from bug reports. In Proceedings of the International Conference on Software Testing, Verification and Validation (ICST’13). 282--291. Google ScholarDigital Library
- Haopeng Liu, Yuxi Chen, and Shan Lu. 2016. Understanding and generating high quality patches for concurrency bugs. In Proceedings of the 2016 24th ACM SIGSOFT International Symposium on Foundations of Software Engineering. ACM, 715--726. Google ScholarDigital Library
- Peng Liu and Charles Zhang. 2012. Axis: Automatically fixing atomicity violations through solving control constraints. In Proceedings of the 2012 International Conference on Software Engineering. 299--309. Google ScholarDigital Library
- Michael E. Locasto, Stelios Sidiroglou, and Angelos D. Keromytis. 2006. Software self-healing using collaborative application communities. In Proceedings of the Network and Distributed System Security Symposium.Google Scholar
- Francesco Logozzo and Tom Ball. 2012. Modular and verified automatic program repair. In Proceedings of the 27th ACM International Conference on Object Oriented Programming Systems Languages and Applications. Google ScholarDigital Library
- Francesco Logozzo and Matthieu Martel. 2013. Automatic repair of overflowing expressions with abstract interpretation. In Semantics, Abstract Interpretation, and Reasoning About Programs: Essays Dedicated to David A. Schmidt on the Occasion of His Sixtieth Birthday, Vol. 129. 341--357.Google Scholar
- Fan Long, Vijay Ganesh, Michael Carbin, Stelios Sidiroglou, and Martin Rinard. 2012. Automatic input rectification. In Proceedings of Proceedings of the 32nd ACM/IEEE International Conference on Software Engineering (ICSE’12). Google ScholarDigital Library
- Fan Long and Martin C. Rinard. 2015. Staged program repair with condition synthesis. In Proceedings of ACM Joint European Software Engineering Conference and Symposium on the Foundations of Software Engineering (ESEC/FSE’15). Google ScholarDigital Library
- Fan Long and Martin C. Rinard. 2016. Prophet: Automatic patch generation via learning from successful patches. In Proceedings of the Symposium on Principles of Programming Languages.Google Scholar
- Fan Long, Stelios Sidiroglou-Douskos, Deokhwan Kim, and Martin Rinard. 2014. Sound input filter generation for integer overflow errors. ACM SIGPLAN Not. 49, 1 (2014), 439--452. Google ScholarDigital Library
- Fan Long, Stelios Sidiroglou-Douskos, and Martin C. Rinard. 2014. Automatic runtime error repair and containment via recovery shepherding. In ACM SIGPLAN Conference on Programming Language Design and Implementation. Google ScholarDigital Library
- M. Z. Malik, J. H. Siddiqi, and S. Khurshid. 2011. Constraint-based program debugging using data structure repair. In International Conference on Software Testing, Verification and Validation (ICST’11). 190--199. Google ScholarDigital Library
- Matias Martinez, Thomas Durieux, Romain Sommerard, Jifeng Xuan, and Martin Monperrus. 2017. Automatic repair of real bugs in java: A large-scale experiment on the defects4j dataset. In Proceedings of the 11th Joint Meeting of the European Software Engineering Conference and the ACM SIGSOFT Symposium on the Foundations of Software Engineering. PADERBORN, Germany. Google ScholarDigital Library
- Matias Martinez and Martin Monperrus. 2015. Mining software repair models for reasoning on the search space of automated program fixing. Empir. Softw. Eng. 20, 1 (2015), 176--205. Google ScholarDigital Library
- Matias Martinez, Westley Weimer, and Martin Monperrus. 2014. Do the fix ingredients already exist? An empirical inquiry into the redundancy assumptions of program repair approaches. In Proceedings of the 32nd ACM/IEEE International Conference on Software Engineering (ICSE’14). Hyderabad, India. Google ScholarDigital Library
- Sergey Mechtaev, Jooyong Yi, and Abhik Roychoudhury. 2015. DirectFix: Looking for simple program repairs. In Proceedings of the 37th International Conference on Software Engineering. Google ScholarDigital Library
- Sergey Mechtaev, Jooyong Yi, and Abhik Roychoudhury. 2016. Angelix: Scalable multiline program patch synthesis via symbolic analysis. In Proceedings of the 38th International Conference on Software Engineering. 691--701. Google ScholarDigital Library
- Ibéria Medeiros, Nuno F. Neves, and Miguel Correia. 2014. Automatic detection and correction of web application vulnerabilities using data mining to predict false positives. In Proceedings of the 23rd International Conference on World Wide Web. ACM, 63--74. Google ScholarDigital Library
- Atif M. Memon. 2008. Automatically repairing event sequence-based GUI test suites for regression testing. ACM Trans. Softw. Eng. Methodol. 18, 2 (2008), 4. Google ScholarDigital Library
- Na Meng, Miryung Kim, and Kathryn S. McKinley. 2011. Systematic editing: Generating program transformations from an example. In Proceedings of the 32nd ACM SIGPLAN Conference on Programming Language Design and Implementation. 329--342. Google ScholarDigital Library
- Na Meng, Miryung Kim, and Kathryn S. McKinley. 2013. LASE: Locating and applying systematic edits by learning from examples. In Proceedings of the International Conference on Software Engineering. 502--511. Google ScholarDigital Library
- Michael G. Merideth. 2003. Enhancing survivability with proactive fault-containment. In Proceedings of the 2003 International Conference on Dependable Systems and Networks.Google Scholar
- B. Meyer. 1992. Applying “design by contract.” Computer 25, 10 (1992), 40--51. Google ScholarDigital Library
- Martin Monperrus. 2014. A critical review of ”automatic patch generation learned from human-written patches”: Essay on the problem statement and the evaluation of automatic software repair. In Procedings of the International Conference on Software Engineering. 234--242. Google ScholarDigital Library
- Martin Monperrus. 2017. Principles of antifragile software. In Proceedings of the Salon des Refusés 2017. Brussels, Belgium. Google ScholarDigital Library
- P. Muntean, V. K. Kommanapalli, A. Ibing, and C. Eckert. 2015. Automated generation of buffer overflows quick fixes using symbolic execution and SMT. In International Conference on Computer Safety, Reliability 8 Security (SAFECOMP’15). Google ScholarDigital Library
- Christian Nentwich, Wolfgang Emmerich, and Anthony Finkelstein. 2003. Consistency management with repair actions. In Proceedings of the 25th International Conference on Software Engineering. 455--464. Google ScholarDigital Library
- Hoang Duong Thien Nguyen, Dawei Qi, Abhik Roychoudhury, and Satish Chandra. 2013. SemFix: Program repair via semantic analysis. In Proceedings of the International Conference on Software Engineering. Google ScholarDigital Library
- Huu Hai Nguyen and Martin Rinard. 2007. Detecting and eliminating memory leaks using cyclic memory allocation. In Proceedings of the 6th International Symposium on Memory Management. 15--30. Google ScholarDigital Library
- Mihai Nica, Simona Nica, and Franz Wotawa. 2013. On the use of mutations and testing for debugging. Softw. Pract. Exper. 43, 9 (2013), 1121--1142.Google ScholarCross Ref
- G. Novark, E. D. Berger, and B. G. Zorn. 2007. Exterminator: Automatically correcting memory errors with high probability. ACM SIGPLAN Not. 42, 6 (2007), 1--11. Google ScholarDigital Library
- Vinicius Oliveira, Eduardo Souza, Claire Le Goues, and Celso G. Camilo. 2016. Improved crossover operators for genetic programming for program repair. In Proceedings of the 8th International Symposium on Search Based Software Engineering.Google Scholar
- Y. Padioleau, J. Lawall, R. R. Hansen, and G. Muller. 2008. Documenting and automating collateral evolutions in linux device drivers. ACM SIGOPS Operat. Syst. Rev. 42, 4 (2008), 247--260. Google ScholarDigital Library
- Jeff H. Perkins, Greg Sullivan, Weng-Fai Wong, Yoav Zibin, Michael D. Ernst, Martin Rinard, Sunghun Kim, Sam Larsen, Saman Amarasinghe, Jonathan Bachrach, Michael Carbin, Carlos Pacheco, Frank Sherwood, and Stelios Sidiroglou. 2009. Automatically patching errors in deployed software. Proceedings of the Symposium on Operating Systems Principles (2009), 87. Google ScholarDigital Library
- Barbara Pernici and Anna Maria Rosati. 2007. Automatic learning of repair strategies for web services. In Proceedings of the 5th European Conference on Web Services. 119--128. Google ScholarDigital Library
- Mauro Pezzè, Martin C. Rinard, Westley Weimer, and Andreas Zeller. 2011. Self-Repairing Programs, Report From Dagstuhl Seminar. Technical Report 11062. Schloss Dagstuhl—Leibniz-Zentrum für Informatik.Google Scholar
- Yuhua Qi, Xiaoguang Mao, and Yan Lei. 2009. Program repair as sound optimization of broken programs. In International Symposium on Theoretical Aspects of Software Engineering. Google ScholarDigital Library
- Y. Qi, X. Mao, and Y. Lei. 2013. Efficient automated program repair through fault-recorded testing prioritization. In Proceedings of the 2013 IEEE International Conference on Software Maintenance (ICSM’13). Google ScholarDigital Library
- Yuhua Qi, Xiaoguang Mao, Yan Lei, Ziying Dai, and Chengsong Wang. 2014. The strength of random search on automated program repair. In Proceedings of the 36th International Conference on Software Engineering. 254--265. Google ScholarDigital Library
- Zichao Qi, Fan Long, Sara Achour, and Martin Rinard. 2015. An analysis of patch plausibility and correctness for generate-and-validate patch generation systems. In Proceedings of ACM SIGSOFT International Symposium on Software Testing and Analysis (ISSTA’15). Google ScholarDigital Library
- F. Qin, J. Tucek, J. Sundaresan, and Y. Zhou. 2005. Rx: Treating bugs as allergies—A safe method to survive software failures. ACM SIGOPS Operat. Syst. Rev. 39, 5 (2005), 235--248. Google ScholarDigital Library
- Brian Randell. 1975. System structure for software fault tolerance. IEEE Trans. Softw. Eng. 2 (1975), 220--232. Google ScholarDigital Library
- Martin Rinard. 2003. Acceptability-oriented computing. ACM SIGPLAN Not. 38, 12 (2003), 57--75. Google ScholarDigital Library
- M. Rinard, C. Cadar, D. Dumitran, D. M. Roy, T. Leu, and W. S. Beebee Jr. 2004. Enhancing server availability and security through failure-oblivious computing. In Proceedings of the 6th Conference on Symposium on Operating Systems, Design 8 Implementation. 21--21. Google ScholarDigital Library
- Martin Rinard, Cristian Cadar, Daniel Dumitran, Daniel M. Roy, and Tudor Leu. 2004. A dynamic technique for eliminating buffer overflow vulnerabilities (and other memory errors). In Proceedings of the 20th Annual Computer Security Applications Conference. 82--90. Google ScholarDigital Library
- M. Rinard, M. Ernst, and J. Perkins. 2011. Collaborative Learning for Security and Repair in Application Communities. Technical Report. Massachusetts Institute of Technology.Google Scholar
- Martin C. Rinard. 2006. Survival Techniques for Computer Programs. Technical Report. MIT.Google Scholar
- J. A. Rohr. 1973. STAREX self-repair routines: Software recovery in the JPL-STAR computer. In Proceedings of the International Conference on Fault-Tolerant Computing (FTCS’73).Google Scholar
- Roopsha Samanta, Oswaldo Olivo, and E. Allen Emerson. 2014. Cost-aware automatic program repair. In International Static Analysis Symposium. Springer, 268--284.Google Scholar
- Hesam Samimi, Max Schäfer, Shay Artzi, Todd D. Millstein, Frank Tip, and Laurie J. Hendren. 2012. Automated repair of HTML generation errors in PHP applications using string constraint solving. In Proceedings of the 32nd ACM/IEEE International Conference on Software Engineering (ICSE’12). 277--287. Google ScholarDigital Library
- E. Schulte, S. Forrest, and W. Weimer. 2010. Automated program repair through the evolution of assembly code. In Proceedings of the IEEE/ACM International Conference on Automated Software Engineering. 313--316. Google ScholarDigital Library
- A. S. Sethi and others. 2004. A survey of fault localization techniques in computer networks. Sci. Comput. Program. 53, 2 (2004), 165--194.Google ScholarCross Ref
- Alex Shaw, Dusten Doggett, and Munawar Hafiz. 2014. Automatically fixing C buffer overflows using program transformations. In International Conference on Dependable Systems and Networks. 124--135. Google ScholarDigital Library
- Mary Shaw. 2002. Self-healing: Softening precision to avoid brittleness. In Proceedings of the 1st Workshop on Self-healing Systems. 111--114. Google ScholarDigital Library
- Sylvain Sicard, Fabienne Boyer, and Noel De Palma. 2008. Using components for architecture-based management: The self-repair case. In Proceedings of the 30th International Conference on Software Engineering. 101--110. Google ScholarDigital Library
- S. Sidiroglou and A. D. Keromytis. 2005. Countering network worms through automatic patch generation. Secur. Priv. 3, 6 (2005), 41--49. Google ScholarDigital Library
- S. Sidiroglou, O. Laadan, C. Perez, N. Viennot, J. Nieh, and A. D. Keromytis. 2009. Assure: Automatic software self-healing using rescue points. ACM Sigplan Not. 44, 3 (2009), 37--48. Google ScholarDigital Library
- S. Sidiroglou, M. E. Locasto, S. W. Boyd, and A. D. Keromytis. 2005. Building a reactive immune system for software services. In Proceedings of the USENIX Annual Technical Conference, Vol. 161. Google ScholarDigital Library
- Stelios Sidiroglou-Douskos, Eric Lahtinen, Fan Long, and Martin Rinard. 2015. Automatic error elimination by horizontal code transfer across multiple applications. In Proceedings of the 36th ACM SIGPLAN Conference on Programming Language Design and Implementation. 43--54. Google ScholarDigital Library
- Stelios Sidiroglou-Douskos, Sasa Misailovic, Henry Hoffmann, and Martin Rinard. 2011. Managing performance vs. accuracy trade-offs with loop perforation. In Proceedings of the 19th ACM SIGSOFT Symposium and the 13th European Conference on Foundations of Software Engineering. 124--134. Google ScholarDigital Library
- Josep Silva. 2011. A survey on algorithmic debugging strategies. Adv. Eng. Softw. 42, 11 (2011), 976--991. Google ScholarDigital Library
- Rishabh Singh, Sumit Gulwani, and Armando Solar-Lezama. 2013. Automated feedback generation for introductory programming assignments. In ACM SIGPLAN Not. 48, 15--26. Google ScholarDigital Library
- A. Smirnov and T. Chiueh. 2005. DIRA: Automatic detection, identification, and repair of control-hijacking attacks. In Proceedings of the 12th Annual Network and Distributed System Security Symposium.Google Scholar
- Edward K. Smith, Earl Barr, Claire Le Goues, and Yuriy Brun. 2015. Is the cure worse than the disease? Overfitting in automated program repair. In Proceedings of the 10th Joint Meeting of the European Software Engineering Conference and ACM SIGSOFT Symposium on the Foundations of Software Engineering (ESEC/FSE’15). Google ScholarDigital Library
- A. Somayaji, S. Hofmeyr, and S. Forrest. 1998. Principles of a computer immune system. In Proceedings of the 1997 Workshop on New Security Paradigms. 75--82. Google ScholarDigital Library
- Sooel Son, Kathryn S. McKinley, and Vitaly Shmatikov. 2013. Fix me up: Repairing access-control bugs in web applications. In Proceedings of the Network and Distributed System Security Symposium.Google Scholar
- H. Sözer, B. Tekinerdoğan, and M. Akşit. 2009. FLORA: A framework for decomposing software architecture to introduce local recovery. Softw. Prac. Exper. 39, 10 (2009), 869--889. Google ScholarDigital Library
- Matt Staats, Michael W. Whalen, and Mats Per Erik Heimdahl. 2011. Programs, tests, and oracles: The foundations of testing revisited. In Proceedings of the International Conference on Software Engineering. 391--400. Google ScholarDigital Library
- M. Stumptner and F. Wotawa. 1996. A model-based approach to software debugging. In Proceedings on the 7th International Workshop on Principles of Diagnosis.Google Scholar
- B. Sun, R. Y. Chang, X. Chen, and A. Podgurski. 2008. Automated support for propagating bug fixes. In Proceedings of the International Symposium on Software Reliability Engineering. 187--196. Google ScholarDigital Library
- B. Sun, G. Shu, A. Podgurski, S. Li, S. Zhang, and J. Yang. 2010. Propagating bug fixes with fast subgraph matching. In Proceedings of the International Symposium on Software Reliability Engineering. 21--30. Google ScholarDigital Library
- Gerald Jay Sussman. 2007. Building Robust Systems An Essay. (2007). https://groups.csail.mit.edu/mac/users/gjs/6.945/readings/robust-systems.pdf.Google Scholar
- Sriraman Tallam, Chen Tian, Rajiv Gupta, and Xiangyu Zhang. 2008. Avoiding program failures through safe execution perturbations. In International Conference on Computer Software and Applications. Google ScholarDigital Library
- Shin Hwei Tan and Abhik Roychoudhury. 2015. Relifix: Automated repair of software regressions. In Proceedings of Proceedings of the 32nd ACM/IEEE International Conference on Software Engineering (ICSE’15). Google ScholarDigital Library
- Yida Tao, Jindae Kim, Sunghun Kim, and Chang Xu. 2014. Automatically generated patches as debugging aids: A human study. In Proceedings of the 22nd ACM SIGSOFT International Symposium on Foundations of Software Engineering. 64--74. Google ScholarDigital Library
- S. Thomas and L. Williams. 2007. Using automated fix generation to secure SQL statements. In Proceedings of the 3rd International Workshop on Software Engineering for Secure Systems. 9. Google ScholarDigital Library
- Wilfredo Torres-Pomales and others. 2000. Software Fault Tolerance: A Tutorial. Technical Report NASA-2000-tm210616. NASA. Google Scholar
- J. B. Tran, M. W. Godfrey, E. H. S. Lee, and R. C. Holt. 2000. Architectural repair of open source software. In Proceedings of the International Workshop on Program Comprehension. 48--59. Google ScholarDigital Library
- K. Tsipenyuk, B. Chess, and Gary McGraw. 2005. Seven pernicious kingdoms: A taxonomy of software security errors. Secur. Priv. 3, 6 (2005), 81--84. Google ScholarDigital Library
- Farn Wang and Chih-Hong Cheng. 2008. Program repair suggestions from graphical state-transition specifications. In Proceedings of the 28th IFIP WG 6.1 International Conference on Formal Techniques for Networked and Distributed Systems (FORTE’08). Google ScholarDigital Library
- Tielei Wang, Chengyu Song, and Wenke Lee. 2014. Diagnosis and emergency patch generation for integer overflow exploits. In Detection of Intrusions and Malware, and Vulnerability Assessment. 255--275.Google Scholar
- Xiaoyin Wang, Lu Zhang, Tao Xie, Yingfei Xiong, and Hong Mei. 2012. Automating presentation changes in dynamic web applications via collaborative hybrid analysis. In Proceedings of the ACM SIGSOFT International Symposium on the Foundations of Software Engineering. ACM, 16. Google ScholarDigital Library
- Y. M. Wang, Y. Huang, and C. Kintala. 1997. Progressive retry for software failure recovery in message-passing applications. IEEE Trans. Comput. 46, 10 (1997), 1137--1141. Google ScholarDigital Library
- Yi Wei, Yu Pei, Carlo A. Furia, Lucas S. Silva, Stefan Buchholz, Bertrand Meyer, and Andreas Zeller. 2010. Automated fixing of programs with contracts. In Proceedings of the International Symposium on Software Testing and Analysis. 12. Google ScholarDigital Library
- Westley Weimer. 2006. Patches as better bug reports. In Proceedings of the International Conference on Generative Programming and Component Engineering. Google ScholarDigital Library
- Westley Weimer, Stephanie Forrest, Claire Le Goues, and ThanhVu Nguyen. 2010. Automatic program repair with evolutionary computation. Commun. ACM 53, 5 (2010), 109. Google ScholarDigital Library
- Westley Weimer, Zachary P. Fry, and Stephanie Forrest. 2013. Leveraging program equivalence for adaptive program repair: Models and first results. In International Conference on Automated Software Engineering. 356--366. Google ScholarDigital Library
- W. Weimer, T. Nguyen, C. Le Goues, and S. Forrest. 2009. Automatically finding patches using genetic programming. In Proceedings of the International Conference on Software Engineering. Google ScholarDigital Library
- W. E. Wong and V. Debroy. 2009. A survey on software fault localization. University of Texas at Dallas, Tech. Rep. UTDCS-45-09 (2009).Google Scholar
- Yingfei Xiong, Zhenjiang Hu, Haiyan Zhao, Hui Song, Masato Takeichi, and Hong Mei. 2009. Supporting automatic model inconsistency fixing. In Proceedings of the 7th Joint Meeting of the European Software Engineering Conference and the ACM SIGSOFT Symposium on The Foundations of Software Engineering. ACM, 315--324. Google ScholarDigital Library
- Yingfei Xiong, Hansheng Zhang, Arnaud Hubaux, Steven She, Jie Wang, and Krzysztof Czarnecki. 2015. Range fixes: Interactive error resolution for software configuration. IEEE Trans. Softw. Eng. 41, 6 (2015), 603--619.Google ScholarDigital Library
- Andreas Zeller, Yi Wei, Bertrand Meyer, Martin Nordio, Carlo A. Furia, and Yu Pei. 2014. Automated fixing of programs with contracts. IEEE Trans. Softw. Eng. 40, 5 (2014), 427--449. Google ScholarDigital Library
- Xiangyu Zhang, Neelam Gupta, and Rajiv Gupta. 2006. Locating faults through automated predicate switching. In Proceedings of the 28th International Conference on Software Engineering. 272--281. Google ScholarDigital Library
- Y. Zhang and Y. Ding. 2008. CTL model update for system modifications. J. Artif. Intell. Res. 31, 1 (2008), 113--155. Google ScholarCross Ref
- Hao Zhong and Zhendong Su. 2015. An empirical study on real bug fixes. In Proceedings of the 37th International Conference on Software Engineering. Google ScholarDigital Library
- F. Zhou, J. Condit, Z. Anderson, I. Bagrak, R. Ennals, M. Harren, G. Necula, and E. Brewer. 2006. SafeDrive: Safe and recoverable extensions using language-based techniques. In Proceedings of the 7th Symposium on Operating Systems Design and Implementation. 45--60. Google ScholarDigital Library
Index Terms
- Automatic Software Repair: A Bibliography
Recommendations
Model and Program Repair via SAT Solving
Special Issue on MEMCODE 2015 and Regular Papers (Diamonds)We consider the subtractive model repair problem: given a finite Kripke structure M and a CTL formula η, determine if M contains a substructure M′ that satisfies η. Thus, M can be “repaired” to satisfy eta by deleting some transitions and states. We map ...
Angelix: scalable multiline program patch synthesis via symbolic analysis
ICSE '16: Proceedings of the 38th International Conference on Software EngineeringSince debugging is a time-consuming activity, automated program repair tools such as GenProg have garnered interest. A recent study revealed that the majority of GenProg repairs avoid bugs simply by deleting functionality. We found that SPR, a state-of-...
MintHint: automated synthesis of repair hints
ICSE 2014: Proceedings of the 36th International Conference on Software EngineeringBeing able to automatically repair programs is at the same time a very compelling vision and an extremely challenging task. In this paper, we present MintHint, a novel technique for program repair that is a departure from most of today’s approaches. ...
Comments