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

Detalhes bibliográficos
Ano de defesa: 2020
Autor(a) principal: Danilo Ferreira e Silva
Orientador(a): Não Informado pela instituição
Banca de defesa: Não Informado pela instituição
Tipo de documento: Tese
Tipo de acesso: Acesso aberto
Idioma: eng
Instituição de defesa: Universidade Federal de Minas Gerais
Programa de Pós-Graduação: Não Informado pela instituição
Departamento: Não Informado pela instituição
País: Não Informado pela instituição
Palavras-chave em Português:
Link de acesso: https://hdl.handle.net/1843/52752
Resumo: 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.
id UFMG_c5b55b7c416c4e672395d11775d10ceb
oai_identifier_str oai:repositorio.ufmg.br:1843/52752
network_acronym_str UFMG
network_name_str Repositório Institucional da UFMG
repository_id_str
spelling Mining refactorings from version histories: studies, tools, and applicationsComputação – TesesRefatoração de softwareEngenharia de SoftwareEvolução de softwareMineração de repositórios de software.RefactoringSoftware EvolutionMining Software RepositoriesRefatoraçã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.CNPq - Conselho Nacional de Desenvolvimento Científico e TecnológicoFAPEMIG - Fundação de Amparo à Pesquisa do Estado de Minas GeraisCAPES - Coordenação de Aperfeiçoamento de Pessoal de Nível SuperiorUniversidade Federal de Minas Gerais2023-05-03T15:21:41Z2025-09-09T01:07:06Z2023-05-03T15:21:41Z2020-02-06info:eu-repo/semantics/publishedVersioninfo:eu-repo/semantics/doctoralThesisapplication/pdfhttps://hdl.handle.net/1843/52752engDanilo Ferreira e Silvainfo:eu-repo/semantics/openAccessreponame:Repositório Institucional da UFMGinstname:Universidade Federal de Minas Gerais (UFMG)instacron:UFMG2025-09-09T01:07:06Zoai:repositorio.ufmg.br:1843/52752Repositório InstitucionalPUBhttps://repositorio.ufmg.br/oairepositorio@ufmg.bropendoar:2025-09-09T01:07:06Repositório Institucional da UFMG - Universidade Federal de Minas Gerais (UFMG)false
dc.title.none.fl_str_mv Mining refactorings from version histories: studies, tools, and applications
title Mining refactorings from version histories: studies, tools, and applications
spellingShingle Mining refactorings from version histories: studies, tools, and applications
Danilo Ferreira e Silva
Computação – Teses
Refatoração de software
Engenharia de Software
Evolução de software
Mineração de repositórios de software.
Refactoring
Software Evolution
Mining Software Repositories
title_short Mining refactorings from version histories: studies, tools, and applications
title_full Mining refactorings from version histories: studies, tools, and applications
title_fullStr Mining refactorings from version histories: studies, tools, and applications
title_full_unstemmed Mining refactorings from version histories: studies, tools, and applications
title_sort Mining refactorings from version histories: studies, tools, and applications
author Danilo Ferreira e Silva
author_facet Danilo Ferreira e Silva
author_role author
dc.contributor.author.fl_str_mv Danilo Ferreira e Silva
dc.subject.por.fl_str_mv Computação – Teses
Refatoração de software
Engenharia de Software
Evolução de software
Mineração de repositórios de software.
Refactoring
Software Evolution
Mining Software Repositories
topic Computação – Teses
Refatoração de software
Engenharia de Software
Evolução de software
Mineração de repositórios de software.
Refactoring
Software Evolution
Mining Software Repositories
description 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.
publishDate 2020
dc.date.none.fl_str_mv 2020-02-06
2023-05-03T15:21:41Z
2023-05-03T15:21:41Z
2025-09-09T01:07:06Z
dc.type.status.fl_str_mv info:eu-repo/semantics/publishedVersion
dc.type.driver.fl_str_mv info:eu-repo/semantics/doctoralThesis
format doctoralThesis
status_str publishedVersion
dc.identifier.uri.fl_str_mv https://hdl.handle.net/1843/52752
url https://hdl.handle.net/1843/52752
dc.language.iso.fl_str_mv eng
language eng
dc.rights.driver.fl_str_mv info:eu-repo/semantics/openAccess
eu_rights_str_mv openAccess
dc.format.none.fl_str_mv application/pdf
dc.publisher.none.fl_str_mv Universidade Federal de Minas Gerais
publisher.none.fl_str_mv Universidade Federal de Minas Gerais
dc.source.none.fl_str_mv reponame:Repositório Institucional da UFMG
instname:Universidade Federal de Minas Gerais (UFMG)
instacron:UFMG
instname_str Universidade Federal de Minas Gerais (UFMG)
instacron_str UFMG
institution UFMG
reponame_str Repositório Institucional da UFMG
collection Repositório Institucional da UFMG
repository.name.fl_str_mv Repositório Institucional da UFMG - Universidade Federal de Minas Gerais (UFMG)
repository.mail.fl_str_mv repositorio@ufmg.br
_version_ 1856414129789599744