Conceptually speaking, automated
program repair closes the gap between the huge manual effort spent
today in writing correct programs,
and the ultimate dream of generating
programs automatically via learning
approaches. Given the challenges of
generating multiline program fixes in
program repair, we can thus imagine
the difficulty of generating explainable programs automatically.
Pragmatically speaking, automated
program repair also makes us keenly
aware of the challenges in managing
changes in software engineering projects, and the need for automation in
this arena. Today, manual debugging
and maintenance often takes up 80%
of the resources in a software project,
prompting practitioners to long declare a legacy crisis. 25 In the future,
program repair can provide tool support by repairing bugs from complex
changes in software projects. This can
help resolve a dilemma of developers
when managing program changes:
“Our dilemma is that we hate change
and love it at the same time; what we
really want is for things to remain the
same but get better.”d
d Quote by Sydney J. Harris.
References
1. Abadi, M., Budiu, M., Erlingsson, U. and Ligatti, J.
Control-flow integrity. In Proceedings of the 12th
ACM Conference on Computer and Communications
Security, 2005, ACM, 340–353.
2. Alur, R., Singh, R., Fisman, D. and Solar-Lezama, A.
Search-based program synthesis. Commun. ACM 61
(2018), 84–93.
3. Brown, D. B., Vaughn, M., Liblit, B. and Reps, T. W.
The care and feeding of wild-caught mutants.
In Proceedings of the 2017 11th Joint Meeting on
Foundations of Software Engineering, (Paderborn,
Germany, Sept. 4–8, 2017), 511–522.
4. Fry, Z.P., Landau, B., and Weimer, W. A human study
of patch maintainability. In Proceedings of the Intern.
Symp. on Software Testing and Analysis, 2012, 177–187.
5. Gupta, R., Pal, S., Kanade, A. and Shevade, S.
DeepFix: Fixing common C language errors by deep
learning. Assoc. for the Advancement of Artificial
Intelligence, 2017.
6. Harman, M. Automated patching techniques: The fix is
in. Commun. ACM 53 (2010), 108–108.
7. Johnson, B., Song, Y., Murphy-Hill, E. and Bowdidge,
Z. Why don’t software developers use static analysis
tools to find bugs? In Proceedings of the Intern. Conf.
on Software Engineering, 2013, 672–681.
8. Jones, J.A., Harrold, M.J. and Stasko, J. Visualization
of test information to assist fault localization. In
Proceedings of the ACM/IEEE Intern. Conf. on
Software Engineering, 9.
9. Kim, D., Nam, J., Song, J. and Kim, S. Automatic patch
generation learned from human-written patches.
In Proceedings of the ACM/IEEE International
Conference on Software Engineering, 2013.
10. King, J.C. Symbolic execution and program testing.
Commun. ACM 19 (1976).
11. Logozzo, F. and Ball, T. Modular and verified
automatic program repair. In Proceedings of Object-
Oriented Programming Systems Languages and
Applications, 2012.
12. Long, F., Amidon, P. and Rinard, M. Automatic
inference of code transforms for patch generation. In
Proceedings of the ACM SIGSOF T Intern. Symp. on
Foundations of Software Engineering, 2017.
13. Long, F. and Rinard, M. Staged program repair with
condition synthesis. In Proceedings of the 2015
10th Joint Meeting on Foundations of Software
Engineering, 2015.
14. Long, F. and Rinard, M. Automatic patch generation
by learning correct code. In Proceedings of the
ACM Intern. Symp. on Principles of Programming
Languages, 2016.
15. Marginean, A., Bader, J., Chandra, S., Harman,
M., Jia, Y., Mao, K., Mols, A. and Scott, A. Sapfix:
Automated end-to-end repair at scale. In Proceedings
of the Intern. Conf. on Software Engineering, Software
Engineering in Practice track, 2019.
16. Mechtaev, S., Yi, J. and Roychoudhury, A. Angelix:
Scalable multiline program patch synthesis via
symbolic analysis. In Proceedings of the ACM/IEEE
Intern. Conf. on Software Engineering, 2016.
17. Monperrus, M. Automatic software repair: A
bibliography. ACM Computing Surveys 51, 1 (2017).
18. Nguyen, H.D. T., Qi, D., Roychoudhury, A. and Chandra,
S. SemFix: Program repair via semantic analysis.
In Proceedings of the ACM/IEEE Intern. Conf. on
Software Engineering, 2013.
19. Nistor, A., Chang, P-C., Radoi, C. and Lu, S. Caramel:
Detecting and fixing performance problems that have
non-intrusive fixes. In Proceedings of ICSE, 2015.
20. Perkins, J.H. et al. Automatically patching errors in
deployed software. In Proceedings of the Symp. on
Operating Systems Principles. ACM, 2009.
21. Qi, Y., Mao, X., Lei, Y., Dai, Z. and Wang, C. The strength
of random search on automated program repair.
In Proceedings of the Intern. Conf. on Software
Engineering, 2014.
22. Ray, B., Hellendoorn, V., Godhane, S., Tu, Z., Bacchelli,
A. and Devanbu, P. On the “naturalness” of buggy
code. In Proceedings of the 38th Intern. Conf. on
Software Engineering (Austin, TX, USA, May 14–22,
2016), 428–439.
23. Sadowski, C., Aftandilian, E., Eagle, A., Miller-Cushon,
L. and Jaspan, C. Lessons from building static analysis
tools at google. Commun. ACM 61, 4 (Apr. 2018), 58–66.
24. Samimi, H., Schäfer, M., Artzi, S., Millstein, T., Tip, F.
and Hendren, L. Automated repair of HTML generation
errors in PHP applications using string constraint
solving. In Proceedings of the 34th Intern. Conf. on
Software Engineering, 2012.
25. Seacord, R., Plakosh, D. and Lewis, G. Modernizing
Legacy Systems: Software Technologies,
Engineering Processes and Business Practices.
Addison Wesley, 2003.
26. Shacham, O. M., Vechev, M. T. and Yahav, E. Chameleon:
Adaptive selection of collections. In Proceedings
of Conf. on Programming Language Design and
Implementation, 2009. ACM, 408–418.
27. Shriver, D., Elbaum, S. and Stolee, K. T. At the
end of synthesis: narrowing program candidates.
In Proceedings of the Intern. Conf. on Software
Engineering, 2017.
28. Singh, R., Gulwani, S. and Solar-Lezama, A.
Automated feedback generation for introductory
programming assignments. In Proceedings of the
Intern. Conf. on Programming Language Design and
Implementation, 2013.
29. Smith, E.K., Barr, E., Le Goues, C. and Brun, Y. Is the
cure worse than the disease? overfitting in automated
program repair. In Proceedings of the International
Symposium on Foundations of Soft ware Engineering
(FSE), 2015.
30. Su, Z. and Wassermann, G. The essence of command
injection attacks in Web applications. In Proceedings
of Symp. on Principles of Programming Languages,
2006, 372–382.
31. Toffola, L.D., Pradel, M. and Gross, T.R. Performance
problems you can fix: A dynamic analysis of
memoization opportunities. In Proceedings of Conf. on
Object-Oriented Programming, Systems, Languages,
and Applications, 2015.
32. Tufano, M., Watson, C., Bavota, G., Di Penta, M., White,
M. and Poshyvanyk, D. An empirical investigation
into learning bug-fixing patches in the wild via neural
machine translation. In Proceedings of Intern. Conf.
on Automated Software Engineering, 2018.
33. Urli, S., Yu, Z., Seinturier, L. and Monperrus, M. How
to design a program repair bot? insights from the
repairnator project. In Proceedings of Intern. Conf. on
Software Engineering, Track Software Engineering in
Practice, 2018.
34. Wei, Y., Pei, Y., Furia, C.A., Silva, L.S., Buchholz, S.,
Meyer, B. and Zeller, A. Automated fixing of programs
with contracts. In Proceedings of ACM Intern. Symp.
on Software Testing and Analysis, 2010.
35. Weimer, W., Forrest, S., Kim, M., Le Goues, C. and
Hurley, P. Trusted software repair for system
resiliency. In Proceedings of 46th Annual IEEE/IFIP
Intern. Conf. on Dependable Systems and Networks
Workshops, 2016.
36. Weimer, W., Fry, Z, and Forrest, S. Leveraging program
equivalence for adaptive program repair: Models and
first results. In Proceedings of ACM/IEEE Intern.
Conf. on Automated Software Engineering, 2013.
37. Weimer, W., Nguyen, T. V., Le Goues, C. and Forrest,
S. Automatically finding patches using genetic
programming. In Proceedings of ACM/IEEE Intern.
Conf. on Software Engineering, 2009.
38. Xiong, Y., Liu, X., Zeng, M., Zhang, L. and Huang, G.
Identifying patch correctness in test-based program
repair. In Proceedings of Intern. Conf. on Software
Engineering, 2018.
39. Xuan, J., Martinez, M., Demarco, F., Clement,
M., Marcote, S.L., Durieux, T., Le Berre, D. and
Monperrusm M. Nopol: Automatic repair of conditional
statement bugs in Java programs. IEEE Trans.
Software Engineering 43, (2017).
40. Yi, J., Ahmed, U.Z., Karkare, A., Tan, S.H. and
Roychoudhury, A. A feasibility study of using
automated program repair for introductory
programming assignments. In Proceedings of ACM
SIGSOF T Intern. Symp. Foundations of Software
Engineering, 2017.
Claire Le Goues ( clegoues@cs.cmu.edu) is an associate
professor at Carnegie Mellon University, Pittsburgh,
PA, USA.
Michael Pradel ( michael@binaervarianz.de) is a
professor at the University of Stuttgart, Germany.
Abhik Roychoudhury ( abhik@comp.nus.edu.sg) is a
professor at the National University of Singapore.
© 2019 ACM 0001-0782/19/12
Watch the authors discuss
this work in the exclusive
Communications video.
https://cacm.acm.org/videos/
automated-program-repair