چكيده به لاتين
Bug fixing is a frequent activity in the software life cycle. Due to the continuous growth of software applications in size and complexity, it's required to carry out debugging and maintenance activities in a shorter period of time. These activities involve a lot of financial and time costs, so that its accounts for about half of the total cost of developing a product. Hence, in the recent years, automatic program repair approaches have emerged to automatically generate proper fixes for program bugs. Unfortunately, fixing bug could be even hard and expensive for automatic program repair approaches. So that, to repair an existing bug in program, these techniques could spend infinite time to find a patch. For instance, a bug in a commercial software can cause severe economic damage. In this case, it is important to finding repair in the shortest time. The main goal of this thesis is to decrease the time to find a solution to fix the program. In this thesis, the modifications required to repair the program are categorized into several patterns of repair, that Each targets a batch of bugs due to the features in the program. These patterns, which are often defined based on common programming mistakes, create a number of patches to repair the program by considering the features of the source code. Unfortunately, there is still a large search space for plausible patches in using this technique. To deal with the problems of this large search space, a trained model in the neural network is used to prioritize repair patterns. This prioritization is based on the similarity of the faulty program code to the previously fixed code. In this way, it is possible to reduce the repair search space without losing repair strength. Therefore, by providing a general framework in the proposed method, we were able to combine the repair operators of 5 different methods in one set and improve the strength of repair. Experimental results show that using a proper prioritization process, 84% of plausible patches are produced in the first three priorities. In case of repair time, which was one of the main goals of this thesis, the average repair time in a large applications set is reduced by a quarter and for smaller applications it reaches one-seventh. it was reduced by on average of more than a quarter for large applications and by more than one-seventh for smaller applications, so that the time to find the first repair significantly reduced, compared to basic approach.