Software defects, or bugs, are a significant issue in software development and society. The cost of dealing with the faults caused by these defects is significant. Once a software fault has been identified, either by a failing test case or due to a failure in use, it can be difficult and time consuming to identify the defect responsible for the fault and how to repair it. This research will combine information from analysis of the program and the failing run to help understand the context of the fault, and provide a developer with visualizations and other information to help them understand the fault and repair the software.
The technical focus of this work consists of novel software analyses, software models, and software-development interfaces and visualizations to support software development, comprehension, and fault repair. These techniques capture and utilize static and dynamic information about the program and its execution to model relations among software elements and their functionality. These hybrid static/dynamic models can be used as the basis for the exploration of a program when attempting to understand the nature and context of software faults so that they may be effectively and efficiently repaired. These software models utilize lightweight and commonplace dynamic information, thus making them practical and ready for near-term adoption. The interfaces and visualizations present the program to software developers in a way to reveal interactions within software, thus allowing them to comprehend larger and more complex systems than is currently possible. As such, the research will enable software-development industry to better understand and repair software faults, thus producing higher quality software, which will benefit society at large.