Automated program repair has been gaining ground recently with substantial efforts devoted to the area. Not only has APR had great influence on academia recently, but also it has received considerable attention from the industry. Motivated by the potential impact of APR, in this project, we propose to build a repair framework that improves upon on past successful work VFix and S3.
In this project, we aim to fix NPE bugs. We will use data flow analysis as proposed in VFix to accurately localize buggy code fragments in program under repair. We then use S3 to semantically reason about the identified buggy code fragments via dynamic symbolic execution on test cases. However, simply relying on test cases may not be sufficient. We thus plan to further enhance the semantic reasoning in S3 with the ability to leverage user-provided annotations. After this step, we obtain a set of constraints that constitutes specifications of the program. We then propose a program synthesis technique that improve the template-based repair in VFix and syntax-guided synthesis in S3 to synthesize repairs.