English

RefDiff: Detecting Refactorings in Version Histories

Software Engineering 2018-08-07 v1

Abstract

Refactoring is a well-known technique that is widely adopted by software engineers to improve the design and enable the evolution of a system. Knowing which refactoring operations were applied in a code change is a valuable information to understand software evolution, adapt software components, merge code changes, and other applications. In this paper, we present RefDiff, an automated approach that identifies refactorings performed between two code revisions in a git repository. RefDiff employs a combination of heuristics based on static analysis and code similarity to detect 13 well-known refactoring types. In an evaluation using an oracle of 448 known refactoring operations, distributed across seven Java projects, our approach achieved precision of 100% and recall of 88%. Moreover, our evaluation suggests that RefDiff has superior precision and recall than existing state-of-the-art approaches.

Keywords

Cite

@article{arxiv.1704.01544,
  title  = {RefDiff: Detecting Refactorings in Version Histories},
  author = {Danilo Silva and Marco Tulio Valente},
  journal= {arXiv preprint arXiv:1704.01544},
  year   = {2018}
}

Comments

Paper accepted at 14th International Conference on Mining Software Repositories (MSR), pages 1-11, 2017