  Refactoring is a widespread practice that helps developers to improve the
maintainability and readability of their code. However, there is a limited
number of studies empirically investigating the actual motivations behind
specific refactoring operations applied by developers. To fill this gap, we
monitored Java projects hosted on GitHub to detect recently applied
refactorings, and asked the developers to ex- plain the reasons behind their
decision to refactor the code. By applying thematic analysis on the collected
responses, we compiled a catalogue of 44 distinct motivations for 12 well-known
refactoring types. We found that refactoring activity is mainly driven by
changes in the requirements and much less by code smells. Extract Method is the
most versatile refactoring operation serving 11 different purposes. Finally, we
found evidence that the IDE used by the developers affects the adoption of
automated refactoring tools.
