Abstract

Program faults are unavoidable phenomena in the software development. The application of mutation and fault localization techniques is effective in automated program repair, but suffers the inevitable high execution cost as the number of mutants increases exponentially for large industrial programs. The combination with fault localization techniques can reduce the cost by mutating the statements with high suspicious values first. However, the accuracy of fault localization techniques has not been good enough for real applications, and some faults may occur on a statement which is related to the statement with a high suspicious value rather than itself. Therefore, the greedy strategy used currently may not be effective, resulting in inefficient repairs. Finding a mutant as a correct patch should be regarded as a continuous process of searching the global solutions. In this paper, we proposed the search-based automated program repair using mutation and fault localization, which not only takes advantage of fault localization but also overcomes the disadvantage of the greedy strategy used in the mutation generation. The initial population of the search algorithm is constructed by the mutants generated from the statements with high suspicious values using the fault localization, which is a set of rough solutions. A hybrid-crossover operator is then designed where the fixed position crossover operator is used to converge to the global optimal solutions and the random position crossover operator is used to explore the entire search space faster, respectively. The experimental results on the Siemens suite indicate that the proposed approach can improve the efficiency with the same effectiveness compared to the exhaustive approach, and show that the non-random initial population method and the hybrid-crossover strategy can improve the efficiency of the search process.

Full Text
Published version (Free)

Talk to us

Join us for a 30 min session where you can share your feedback and ask us any queries you have

Schedule a call