Although developers test programs for checking whether the programs work as expected, developers need to debug with their much amount of effort when test failures occur. Automated program repair (especially, generate-and-validate techniques) generates patches by mutating given faulty programs and validates patched programs by checking whether the patched programs make all test cases pass. Thus, generate-and-validate techniques can be used for automatically debugging faulty programs without any manual effort.
Generate-and-validate automated-program-repair techniques need (1) effective program-mutation operators for fixing faults in programs under repair and (2) efficient repair-space search for identifying properly-repaired programs. In our research, we plan to apply the state-of-the-art techniques on mutation testing, repository mining, machine learning, etc. into generate-and-validate techniques for developing automated and practical program repair．
Generation: Mutation testing contains mutation operators that injects typical faults into programs under test for assessing fault-detecting capability of given test cases. These mutation operators can be used for fixing faults in programs under repair. We design our proposal technique to mine actual solutions by developers for fixing faults from software repositories and redesign mutation operators for effectively fixing faults in the context of automated program repair.
Validation: Even if programs are small-sized, a vast number of patches can be generated. We design our proposal technique to learn information of generated patches from the validation results and construct a prediction model for predicting whether generated patches make faulty programs pass on test cases. Our proposal technique uses this prediction model for identifying properly-repaired programs in a feasible amount of time.