The goal of my research is to automate the development and maintenance of trustworthy software. This includes automatically generating code and fixing bugs, analysing and verifying programs. My work has received prestigious recognition, including the ACM SIGSOFT Outstanding Dissertation Award and two ACM SIGSOFT Distinguished Paper Awards. Additionally, the tools I co-developed, such as B-Assist (deployed at Bloomberg) and Angelix (used at IIT Kanpur), have been successfully applied in industry and academy.

Automated Program Repair

The goal of automated program repair (APR) is to automatically modify a given incorrect program to eliminate the observable failures. APR has recently attracted significant attention from the research community and industry due to abundance of software defects and vulneraries in widely used software, and the significant cost of debugging. This technology can substantially reduce the cost of software debugging and maintenance, and find applications in various areas including software security, developer productivity tools and education. However, its adoption faces technical and societal challenges, such as limited scalability and the lack of developer trust in automatically generated patches.

I led the development of semantic program repair that seeks to address these challenges by using program analysis to understand the meaning of software defects. Early program repair approaches were either purely based on heuristic search, which ignores the semantics of the program and produced low-quality patches, or not scalable. Notably, our tool Angelix was the first semantic approach to scale to large, realistic programs. It uses symbolic execution to infer a specification of the intended behavior, called an angelic forest, and repairs the program according to this specification using program synthesis. We also discovered that angelic forest can guide Large Language Models (LLMs) to generate higher-quality patches. To enhance the developer trust in automatically generated patches, we developed methods to guide program repair by program properties, thus providing stronger correctness guarantees than methods based on tests. Particularly, our tool Symlog was the first general-purpose static program repair framework, which is able to repair bugs based on an arbitrary static analysis property expressed in Datalog.

I investigated various practical applications of automated program repair. In the context of developer productivity, our tool B-Assist was deployed at Bloomberg across over 1000 repositories as a part of the continuous integration workflow to automate the code review process. In education, I applied program repair to automatically provide feedback to students taking programming courses. In security, I applied program repair to automatically repair security vulnerabilities found by fuzzing.

As a part of my community-building effort, I founded program-repair.org, the largest online community of program repair researchers, and co-founded International Workshop on Automated Program Repair, a popular international event dedicated to program repair.