Towards the automation of program debugging
W. Eric Wong, Vidroha Debroy · 2011
Program debugging is one of the most important activities in software development. However, given the growing size and complexity of software today, manual debugging is quickly becoming prohibitively time-consuming and expensive. One way to reduce this cost is to automatically lead programmers to the locations of faults, i.e., localize the faults, using run-time information from failed and successful program executions. With this in mind, we propose a fault localization technique named DStar (D*), which has its origins rooted in binary similarity coefficient-based analysis, such that D* can guide programmers to faults without requiring any prior knowledge of program structure or semantics. Via rigorous case studies we show that D* is more effective at fault localization than a host of other contemporary fault localization techniques. Additionally, we present an equivalence relation by virtue of which two or more fault localization techniques may be provably shown to be equivalent, i.e., equally as effective at locating faults. This is an important relation as it can help do away with need for time-consuming and arduous case studies to compare the effectiveness of fault localization techniques, which was previously the norm. It can also be applied to make existing fault localization techniques more efficient without sacrificing effectiveness. However, while fault localization techniques such as D* are quite effective at locating faults, they still suffer from one fundamental limitation in that they offer no guidance as to how the faults may subsequently be fixed, and this is solely left up to the programmer. We therefore, also propose a strategy that combines the processes of fault localization and mutation, to automatically produce potential fixes for faulty programs, while doing so in an efficient manner. Case studies reveal that the strategy holds great promise in the context of automatic fault-fixing. The ultimate goal of this research is to help automate the program debugging process, thereby making it much more efficient and considerably less expensive.