Mining refactorings from version histories: studies, tools, and applications

dc.creatorDanilo Ferreira e Silva
dc.date.accessioned2023-05-03T15:21:41Z
dc.date.accessioned2025-09-09T01:07:06Z
dc.date.available2023-05-03T15:21:41Z
dc.date.issued2020-02-06
dc.description.abstractRefatoraçã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.
dc.description.sponsorshipCNPq - Conselho Nacional de Desenvolvimento Científico e Tecnológico
dc.description.sponsorshipFAPEMIG - Fundação de Amparo à Pesquisa do Estado de Minas Gerais
dc.description.sponsorshipCAPES - Coordenação de Aperfeiçoamento de Pessoal de Nível Superior
dc.identifier.urihttps://hdl.handle.net/1843/52752
dc.languageeng
dc.publisherUniversidade Federal de Minas Gerais
dc.rightsAcesso Aberto
dc.subjectComputação – Teses
dc.subjectRefatoração de software
dc.subjectEngenharia de Software
dc.subjectEvolução de software
dc.subjectMineração de repositórios de software.
dc.subject.otherRefactoring
dc.subject.otherSoftware Evolution
dc.subject.otherMining Software Repositories
dc.titleMining refactorings from version histories: studies, tools, and applications
dc.typeTese de doutorado
local.contributor.advisor1Marco Túlio de Oliveira Valente
local.contributor.advisor1Latteshttp://lattes.cnpq.br/2147157840592913
local.contributor.referee1Rohit Gheyi
local.contributor.referee1André Cavalcante Hora
local.contributor.referee1Eduardo Magno Lages Figueiredo
local.contributor.referee1Paulo Henrique Monteiro Borba
local.creator.Latteshttp://lattes.cnpq.br/5675610909926344
local.description.resumoRefactoring 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.
local.publisher.countryBrasil
local.publisher.departmentICX - DEPARTAMENTO DE CIÊNCIA DA COMPUTAÇÃO
local.publisher.initialsUFMG
local.publisher.programPrograma de Pós-Graduação em Ciência da Computação

Arquivos

Pacote original

Agora exibindo 1 - 1 de 1
Carregando...
Imagem de Miniatura
Nome:
phd_thesis_danilo.pdf
Tamanho:
3.16 MB
Formato:
Adobe Portable Document Format

Licença do pacote

Agora exibindo 1 - 1 de 1
Carregando...
Imagem de Miniatura
Nome:
license.txt
Tamanho:
2.07 KB
Formato:
Plain Text
Descrição: