Mining refactorings from version histories: studies, tools, and applications
Carregando...
Arquivos
Data
Autor(es)
Título da Revista
ISSN da Revista
Título de Volume
Editor
Universidade Federal de Minas Gerais
Descrição
Tipo
Tese de doutorado
Título alternativo
Primeiro orientador
Membros da banca
Rohit Gheyi
André Cavalcante Hora
Eduardo Magno Lages Figueiredo
Paulo Henrique Monteiro Borba
André Cavalcante Hora
Eduardo Magno Lages Figueiredo
Paulo Henrique Monteiro Borba
Resumo
Refactoring is an important aspect of software development and a key factor to understand
software evolution. As such, researchers often report and discuss refactoring
practice on real software projects. Unfortunately, empirical studies on refactoring are
often hindered by the difficulty of obtaining reliable information of refactoring activity,
and many questions remain open. In this thesis, we first investigate an overarching
question: why do developers refactor? To this end, we developed two large-scale empirical
studies that rely on mining refactorings from version histories. Initially, we
investigated the relationship between Extract Method refactoring and code reuse. After
analyzing over 10,000 revisions of 10 open source systems, we found evidence that,
in 56.9% of the cases, Extract Method is motivated by code reuse. Next, we investigated
the motivations for refactorings applied to open source systems based on feedback
from the developers who performed the refactorings. 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. Notably, Extract Method is
the most versatile refactoring operation, serving 11 different purposes. Additionally, we
found evidence that the IDE used by the developers affects the adoption of automated
refactoring tools. As a second line of research, we propose RefDiff, a novel approach to
mine refactorings from version histories that supports multiple programming languages
and offers high precision and recall. Our tool leverages existing techniques and introduces
a novel refactoring detection algorithm that relies on the Code Structure Tree
(CST)—a simple yet powerful representation of the source code that abstracts away
the specificities of particular programming languages—and on a code similarity metric
based on TF-IDF technique. Despite its language-agnostic design, our evaluation
shows that RefDiff’s precision (96%) and recall (80%) are on par with state-of-the-art
refactoring detection approaches specialized in the Java language.
Abstract
Refatoração de código é uma prática importante no desenvolvimento de sistemas e um
fator essencial para entender a evolução de um software. Sendo assim, pesquisadores
frequentemente reportam e discutem a prática de refatoração em sistemas reais. Infelizmente,
estudos empíricos sobre refatoração são frequentemente limitados pela dificuldade
de se obter informações confiáveis sobre a atividade de refatoração e muitas
questões permanecem em aberto. Nesta tese, primeiro investigamos uma importante
questão: por que desenvolvedores refatoram? Para esse fim, desenvolvemos dois estudos
empíricos em larga escala, baseados na mineração de refatorações em históricos
de versões. Inicialmente, investigamos a relação entre a refatoração Extrair Método e
reúso de código. Após analizar mais de 10 mil revisões de 10 sistemas, encontramos
evidências de que em 56,9% dos casos tal refatoração é motivada pelo reúso de código.
Em seguida, investigamos as motivações para refatorações encontradas em sistemas de
código aberto com base em respostas dos próprios desenvolvedores que as aplicaram.
Como resultado, compilamos um catálogo com 44 motivações distintas para 12 tipos
de refatorações. Tal catálogo revela que o esforço de refatoração é mais direcionado
pela necessidade de evolução do sistema do que pela resolução de problemas de projeto
conhecidos como code smells. Notadamente, Extrair Método é a refatoração mais
versátil, servindo a 11 propósitos diferentes. Em uma segunda linha de pesquisa, nós
propomos RefDiff, uma nova ferramenta para mineração de refatorações em histórico
de versões, com suporte a múltiplas linguagens de programação e alta precisão. Nossa
ferramenta introduz um algoritmo de detecção de refatorações baseado na Code Structure
Tree (CST)—uma representação do código fonte que abstrai as particularidades
das linguagens de programação—e em uma métrica de similaridade de código baseada
na técnica TF-IDF. Apesar do seu projeto multilinguagem, nossa avaliação revelou que
nossa ferramenta tem precisão (96%) e revocação (80%) equivalentes ao estado da arte
em ferramentas especializadas na linguagem Java.
Assunto
Computação – Teses, Refatoração de software, Engenharia de Software, Evolução de software, Mineração de repositórios de software.
Palavras-chave
Refactoring, Software Evolution, Mining Software Repositories