Refactoring graphs: reasoning about refactoring over time

Detalhes bibliográficos
Ano de defesa: 2023
Autor(a) principal: Aline Norberta de Brito
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
Brasil
ICX - DEPARTAMENTO DE CIÊNCIA DA COMPUTAÇÃO
Programa de Pós-Graduação em Ciência da Computação
UFMG
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: http://hdl.handle.net/1843/56371
https://orcid.org/0000-0002-7088-4935
Resumo: Frequentemente, desenvolvedores refatoram o código, criando novas entidades ou alterando estruturas existentes. Algumas vezes, estas operações são realizadas em um curto período. Em outros casos, as operações geram sequências de modificações realizadas ao longo do tempo, um cenário que usualmente não é considerado na literatura. Neste contexto, o principal objetivo deste trabalho é caracterizar e compreender refatorações realizadas ao longo do tempo. Para tanto, propõe-se uma nova abstração denominada grafos de refatoração (refactoring graphs). Neste modelo baseado em grafos, os vértices representam métodos ou funções e as arestas referem-se às operações de refatoração. Esta pesquisa está organizada em três grandes trabalhos. Inicialmente, define-se a abstração proposta, descrevendo os principais elementos e provendo um conjunto de scripts que permite a detecção de grafos de refatoração em sistemas de software reais. Em seguida, na segunda unidade de trabalho, caracteriza-se aproximadamente 1,5 mil grafos de refatoração provenientes de projetos Java e JavaScript populares hospedados no GitHub. Os resultados confirmam que as refatorações não são apenas operações únicas, mas também sequências de transformações realizadas ao longo do tempo. Além disso, um estudo qualitativo é realizado, no qual contactou-se os desenvolvedores responsáveis por subgrafos que descrevem grandes operações, visando identificar as suas principais motivações. Por fim, na última unidade de trabalho, explora-se aplicações para a abstração proposta na tese. Inicialmente, avalia-se operações realizadas por alunos de uma disciplina de Engenharia de Software, contando com os grafos de refatoração para compreender e inspecionar as operações. Logo, assume-se a perspectiva de professor que almeja entender atividades práticas neste contexto. Além disso, propõe-se um catálogo de refatorações comumente realizadas ao longo do tempo, denominadas refatorações compostas. Os grafos de refatoração são utilizados para documentar e ilustrar instâncias do catálogo detectadas em um oráculo com centenas de refatorações e no histórico de projetos populares hospedados no GitHub.