Automatic repair of buggy if conditions and missing preconditions with SMT

We present Nopol, an approach for automatically repairing buggy if conditions and missing preconditions. As input, it takes a program and a test suite which contains passing test cases modeling the expected behavior of the program and at least one failing test case embodying the bug to be repaired. It consists of collecting data from multiple instrumented test suite executions, transforming this data into a Satisfiability Modulo Theory (SMT) problem, and translating the SMT result -- if there exists one -- into a source code patch. Nopol repairs object oriented code and allows the patches to contain nullness checks as well as specific method calls.

[1]  Matias Martinez,et al.  Mining software repair models for reasoning on the search space of automated program fixing , 2013, Empirical Software Engineering.

[2]  Rajiv Gupta,et al.  Fault localization using value replacement , 2008, ISSTA '08.

[3]  Sunghun Kim,et al.  Toward an understanding of bug fix patterns , 2009, Empirical Software Engineering.

[4]  Claire Le Goues,et al.  GenProg: A Generic Method for Automatic Software Repair , 2012, IEEE Transactions on Software Engineering.

[5]  Jaechang Nam,et al.  Automatic patch generation learned from human-written patches , 2013, 2013 35th International Conference on Software Engineering (ICSE).

[6]  Emina Torlak,et al.  Angelic debugging , 2011, 2011 33rd International Conference on Software Engineering (ICSE).

[7]  Renaud Pawlak,et al.  Spoon: Program Analysis and Transformation in Java , 2006 .

[8]  Dawei Qi,et al.  SemFix: Program repair via semantic analysis , 2013, 2013 35th International Conference on Software Engineering (ICSE).

[9]  Tim King,et al.  CVC 4 , 2011 .

[10]  Sumit Gulwani,et al.  Synthesis of loop-free programs , 2011, PLDI '11.

[11]  Philip Koopman,et al.  Elements of the Self-Healing System Problem Space , 2003 .

[12]  Martin Monperrus,et al.  A critical review of "automatic patch generation learned from human-written patches": essay on the problem statement and the evaluation of automatic software repair , 2014, ICSE.

[13]  Gregg Rothermel,et al.  Supporting Controlled Experimentation with Testing Techniques: An Infrastructure and its Potential Impact , 2005, Empirical Software Engineering.

[14]  Peter Zoeteweij,et al.  An Evaluation of Similarity Coefficients for Software Fault Localization , 2006, 2006 12th Pacific Rim International Symposium on Dependable Computing (PRDC'06).

[15]  Rui Abreu,et al.  GZoltar: an eclipse plug-in for testing and debugging , 2012, 2012 Proceedings of the 27th IEEE/ACM International Conference on Automated Software Engineering.

[16]  Westley Weimer,et al.  Patches as better bug reports , 2006, GPCE '06.

[17]  Xiangyu Zhang,et al.  Locating faults through automated predicate switching , 2006, ICSE.

[18]  Sumit Gulwani,et al.  Oracle-guided component-based program synthesis , 2010, 2010 ACM/IEEE 32nd International Conference on Software Engineering.

[19]  Arno Jewett,et al.  A Critical Review of , 1964 .

[20]  David R. Cok,et al.  jSMTLIB: Tutorial, Validation and Adapter Tools for SMT-LIBv2 , 2011, NASA Formal Methods.