1 Introduction
Refactoring is the process of changing the structure of code without changing the way that it behaves [6]. Refactoring is considered a best practice when creating and maintaining software, and indeed, research suggests that programmers practice it regularly [16], [22]. Examples of refactoring include renaming a variable, moving a method from a superclass to its subclasses, and taking a few statements and extracting them into a new method. Each kind of refactoring has a name: These examples are called Rename, Push Down Method, and Extract Method [6].