Software development is inherently incremental. Nowadays, many software companies adopt an agile process and a shorter release cycle, where software needs to be delivered faster but with quality assurances, and many versions of software may co-exist in the field and need to be maintained. While faster releases do not increase the user's tolerance of bugs, it is challenging to correctly introduce a change on top of existing programs. In recent studies, researchers found that when programming a change, the most important information a developer wants to know is whether this change breaks any code elsewhere, and in fact, 15-24% of the bug fixes are incorrect.
This project will develop program analyses to address quality assurance problems related to program changes and versions, specifically for the three challenges: efficiently verifying changes for reliable software releases, automatically diagnosing failures caused by changes, and effectively patching multiple versions of software. The project will result in tools and techniques transferable to industry to improve the quality and productivity of software development. The results will also be disseminated via STEM volunteering, new course materials, and release of the software and data obtained through this research.