  Automated program repair is an emerging technology which consists of a suite
of techniques to automatically fix bugs or vulnerabilities in programs. In this
paper, we present a comprehensive survey of the state of the art in program
repair. We first study the different suite of techniques used including search
based repair, constraint based repair and learning based repair. We then
discuss one of the main challenges in program repair namely patch overfitting,
by distilling a class of techniques which can alleviate patch overfitting. We
then discuss classes of program repair tools, applications of program repair as
well as uses of program repair in industry. We conclude the survey with a
forward looking outlook on future usages of program repair, as well as research
opportunities arising from work on code from large language models.
