Deductive Program Repair

We present an approach to program repair and its application to programs with recursive functions over unbounded data types. Our approach formulates program repair in the framework of deductive synthesis that uses existing program structure as a hint to guide synthesis. We introduce a new specification construct for symbolic tests. We rely on such user-specified tests as well as automatically generated ones to localize the fault and speed up synthesis. Our implementation is able to eliminate errors within seconds from a variety of functional programs, including symbolic computation code and implementations of functional data structures. The resulting programs are formally verified by the Leon system.

[1]  Armando Solar-Lezama,et al.  Program sketching , 2012, International Journal on Software Tools for Technology Transfer.

[2]  Rajeev Alur,et al.  Syntax-guided synthesis , 2013, 2013 Formal Methods in Computer-Aided Design.

[3]  Manuel Fähndrich,et al.  Static Contract Checking with Abstract Interpretation , 2010, FoVeOOS.

[4]  Viktor Kuncak,et al.  Synthesis modulo recursive functions , 2013, OOPSLA.

[5]  Andreas Zeller,et al.  Simplifying and Isolating Failure-Inducing Input , 2002, IEEE Trans. Software Eng..

[6]  Ruzica Piskac,et al.  Complete completion using types and weights , 2013, PLDI.

[7]  Viktor Kuncak,et al.  Satisfiability Modulo Recursive Programs , 2011, SAS.

[8]  Christian von Essen,et al.  Program Repair without Regret , 2013, CAV.

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

[10]  Roderick Bloem,et al.  Automated error localization and correction for imperative programs , 2011, 2011 Formal Methods in Computer-Aided Design (FMCAD).

[11]  Roderick Bloem,et al.  Repair of Boolean Programs with an Application to C , 2006, CAV.

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

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

[14]  Ruzica Piskac,et al.  Functional synthesis for linear arithmetic and sets , 2011, International Journal on Software Tools for Technology Transfer.

[15]  Nikolaj Bjørner,et al.  Z3: An Efficient SMT Solver , 2008, TACAS.

[16]  Roderick Bloem,et al.  Program Repair as a Game , 2005, CAV.

[17]  E. Allen Emerson,et al.  Cost-Aware Automatic Program Repair , 2013, SAS.

[18]  Jyotirmoy V. Deshmukh,et al.  Automatic Generation of Local Repairs for Boolean Programs , 2008, 2008 Formal Methods in Computer-Aided Design.

[19]  Sarfraz Khurshid,et al.  Specification-Based Program Repair Using SAT , 2011, TACAS.

[20]  Sumit Gulwani,et al.  Template-based program verification and program synthesis , 2013, International Journal on Software Tools for Technology Transfer.

[21]  Sanjit A. Seshia,et al.  Combinatorial sketching for finite programs , 2006, ASPLOS XII.

[22]  Roderick Bloem,et al.  Finding and fixing faults , 2005, J. Comput. Syst. Sci..

[23]  Thomas Ball,et al.  Modular and verified automatic program repair , 2012, OOPSLA '12.

[24]  Philippe Suter,et al.  Programming with Specifications , 2012 .

[25]  Bertrand Meyer,et al.  Code-based automated program fixing , 2011, 2011 26th IEEE/ACM International Conference on Automated Software Engineering (ASE 2011).

[26]  Rupak Majumdar,et al.  Cause clue clauses: error localization using maximum satisfiability , 2010, PLDI '11.