Semantic program repair
21 Jun 2018 Thursday, 09:00 AM to 10:30 AM
COM1 Level 2
Video Conference Room, COM1-02-13
Debugging consumes significant amount of resources in software development projects. The inadequacy of used debugging techniques costs the global economy billions of dollars annually. Automated program repair is a promising technology that can reduce the cost of debugging by automatically eliminating program defects.
Early test-driven program repair techniques that scaled to large real-world programs utilized syntactic search without comprehending the meaning of the program and the defect. Although such techniques demonstrated encouraging results, they suffer from several limitations. First, since a test suite is an incomplete specification, automatically generated patches may not correspond to user intentions but merely overfit the tests. Secondly, syntactic techniques scale to relatively small search spaces and therefore can address only a small number of defects.
This work introduces a series of techniques to address the aforementioned challenges of automated program repair. These techniques are united by the idea of revealing the underlying program structure by means of semantic analysis. First, we propose an approach of encoding the repair problem as a instance of maximum satisfiability problem by reusing existing program synthesis and error diagnosis methods. Secondly, we devise a concise semantic signature that scales constraint-based repair to large real-world programs and that is capable of representing complex program changes. Third, we suggest an approach to increase the quality of generated patches by inferring missing specification from a reference implementation. Finally, we introduce symbolic execution with existential second-order constraints -- an extension of symbolic execution that helps to alleviate the path explosion problem in the context of program repair.
Our experiments showed that the proposed techniques advance the state of the art of program repair. Semantic analysis helps to increase the quality of automatically generated patches. Apart from that, it enables program repair to scale to larger search spaces and consequently address more defect. We view these results as a step towards developing a general-purpose automated program repair system.