چكيده به لاتين
Nowadays, technical debt has become a very important issue in software project management. Because with the rising of agile software development methods, making changes to the software to add new features has become permanent in software project management. Technical debt refers to the distance between the optimal state of a software project at each of the various levels of design and the state of that software project. This gap is created by software designers and developers, sometimes intentionally and sometimes inadvertently. Since increasing this distance leads to the failure of the software project, to reduce this gap, or technical debt, it is necessary to repay at appropriate times during the lifecycle of the software project. At the software code and structure level, repaying technical debt is tantamount to refactoring the software and making improvements to its code structure, which enhances the software's quality features without changing the software's behavior and appearance. Refactoring software projects usually comes at a high cost. As a result, researchers have always looked for ways to minimize this cost, and the best way to reduce the cost of a process is to automate it. One of the methods of automatic software refactoring that has received a lot of attention in recent years is based on the search-based software engineering (in short, SBSE) method. This method is a good method due to its comprehensiveness and versatility, but it also has problems, the most important of which are the uncertainty of the results and the exponential execution time of the reconstruction in the proportion of the size of the software. In this research, a solution has been presented by inspiring from search-based refactoring and exploitation of reinforcement learning techniques, which solved uncertainty problems, and execution time for large software. In the proposed approach, the problem of uncertainty is solved by targeting and smartening the selection of refactoring actions used in the search-based approach. Also, due to the reduction of the dependency between the choice of the appropriate refactoring and its execution time, the time problem in large software refactoring has been greatly improved. By doing several tests, the proposed approach was examined from the perspectives of behavior in refactoring, execution time, and rate of the code improvement. The results of the tests show that with increasing the volume and size of the software, the performance of the proposed approach also improves compared to the methods based on SBSE, both in terms of reducing technical debt and speeding up the refactoring process. As in the refactoring of the largest case study, the proposed approach managed to achieve about 40 percent more improvements over the SBSE refactoring, while reducing the execution time of the refactoring by more than 98%.