Manual refactoring is tedious and error-prone, so it is natural
to try to automate this process as much as possible. Fully
automated refactoring usually involves using metaheuristic
search to determine which refactorings ...