Introduction
Refactoring Detection
We are dealing in particular with the problem of reconstructing refactorings that have been performed during the evolution of a software.
As in general it is undecidable if a change is a refactoring (that means the change only alters the structure, but not the behavior), we have to use heuristics.
One main challenge is to find good heuristics and evaluate them.
Approach
We have developed a signature-based analysis approach to find out if a set of (concurrent) changes extracted from the version archives
of a software may be a refactoring ([IWPC05, ASE06]). We call such a set a refactoring candidate. It turned out, that the signature-based approach has a good recall but a poor precision.
However, using code-clone detection for ranking the candidates and sorting wrong ones out, we were able to increase the precision crucialy while the recall stays at a good level ([ASE06]).
Applications
Refactoring reconstruction is a prerequisite for many applications, among them error detection (because of inconsistent refactorings, [MSR05]), capturing the intent of changes, and capturing changes to a library and relaying them to client software.
Furthermore, it enables us to perform case studies to examine if refactorings are less error-prone than other changes, or in which phases of development refactorings are mainly done ([MSR06, MSRChallenge06]).
Last but not least, refactorings reconstructed from history can be visualized in order to help programmers that have been absent for a while to understand there code again
([IWPC05]).