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
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/56371
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.
id UFMG_a09038fed1ae1c93e22771b3128607d3
oai_identifier_str oai:repositorio.ufmg.br:1843/56371
network_acronym_str UFMG
network_name_str Repositório Institucional da UFMG
repository_id_str
spelling 2023-07-17T12:51:58Z2025-09-09T00:27:41Z2023-07-17T12:51:58Z2023-03-10https://hdl.handle.net/1843/56371Frequentemente, 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.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 SuperiorengUniversidade Federal de Minas GeraisRefactoringRefactoring graphsMining software repositoriesSoftware evolutionComputação – TesesEngenharia de software – TesesGrafos de refatoração – TesesMineração de repositórios de software – TesesRefactoring graphs: reasoning about refactoring over timeinfo:eu-repo/semantics/publishedVersioninfo:eu-repo/semantics/doctoralThesisAline Norberta de Britoinfo:eu-repo/semantics/openAccessreponame:Repositório Institucional da UFMGinstname:Universidade Federal de Minas Gerais (UFMG)instacron:UFMGhttp://lattes.cnpq.br/5513766633619869Marco Tulio de Oliveira Valentehttp://lattes.cnpq.br/2147157840592913André Cavalcante HoraElisa Yumi NakagawaFernando José Castor de Lima FilhoEduardo Magno Lages FigueiredoTayana Uchôa ConteFrequently, practitioners refactor their code, producing new entities or changing the structure of existing ones. Sometimes, these transformations are performed in a constrained time frame. In other cases, they generate sequences of modifications performed over a long time period, a scenario not usually considered in the literature. In this context, the main goal of this Ph.D. thesis is to characterize and understand refactoring operations performed over time. For this purpose, we introduce a novel abstraction for reasoning about refactorings, named refactoring graphs. In this graph-based abstraction, nodes represent methods or functions, and edges refer to refactoring operations. We organize the research into three major working units. We start by defining the proposed abstraction, describing the elements and providing a set of scripts to detect refactoring graphs in real-world projects. Then, in the second working unit, we characterize about 1.5K refactoring subgraphs from popular Java and JavaScript projects hosted on GitHub. The results confirmed our hypothesis that refactorings are not only sole operations. There are also sequences of transformations performed over time. Besides, we also perform a qualitative study, in which we contact developers responsible by subgraphs describing large operations, aiming to identify their main reasons to perform such operations. Finally, in the last working unit, we explore applications of the proposed graph-based model. First, we evaluate refactoring tasks performed by undergraduate students from a Software Engineering course, relying on refactoring graphs to understand and inspect the operations. In other words, we assume a professor's perspective who needs to understand practical exercises on refactoring. We also propose a catalog of common refactorings performed over time, which we decide to call composite refactorings. We rely on refactoring graphs to document and illustrate instances of composites detected in an oracle with hundreds of operations and in the history of popular projects hosted on GitHub.https://orcid.org/0000-0002-7088-4935BrasilICX - DEPARTAMENTO DE CIÊNCIA DA COMPUTAÇÃOPrograma de Pós-Graduação em Ciência da ComputaçãoUFMGLICENSElicense.txttext/plain2118https://repositorio.ufmg.br//bitstreams/0d55f5e1-7ab2-459e-ae94-916795abe648/downloadcda590c95a0b51b4d15f60c9642ca272MD51falseAnonymousREADORIGINALRefactoring graphs: reasoning about refactoring over time.pdfapplication/pdf18383711https://repositorio.ufmg.br//bitstreams/90492dc3-6c4b-4c1a-91da-5cd9ea69003f/download041ae67b5cb6282c89099fb001b7f1f8MD52trueAnonymousREAD1843/563712025-09-08 21:27:41.84open.accessoai:repositorio.ufmg.br:1843/56371https://repositorio.ufmg.br/Repositório InstitucionalPUBhttps://repositorio.ufmg.br/oairepositorio@ufmg.bropendoar:2025-09-09T00:27:41Repositório Institucional da UFMG - Universidade Federal de Minas Gerais (UFMG)falseTElDRU7Dh0EgREUgRElTVFJJQlVJw4fDg08gTsODTy1FWENMVVNJVkEgRE8gUkVQT1NJVMOTUklPIElOU1RJVFVDSU9OQUwgREEgVUZNRwoKQ29tIGEgYXByZXNlbnRhw6fDo28gZGVzdGEgbGljZW7Dp2EsIHZvY8OqIChvIGF1dG9yIChlcykgb3UgbyB0aXR1bGFyIGRvcyBkaXJlaXRvcyBkZSBhdXRvcikgY29uY2VkZSBhbyBSZXBvc2l0w7NyaW8gSW5zdGl0dWNpb25hbCBkYSBVRk1HIChSSS1VRk1HKSBvIGRpcmVpdG8gbsOjbyBleGNsdXNpdm8gZSBpcnJldm9nw6F2ZWwgZGUgcmVwcm9kdXppciBlL291IGRpc3RyaWJ1aXIgYSBzdWEgcHVibGljYcOnw6NvIChpbmNsdWluZG8gbyByZXN1bW8pIHBvciB0b2RvIG8gbXVuZG8gbm8gZm9ybWF0byBpbXByZXNzbyBlIGVsZXRyw7RuaWNvIGUgZW0gcXVhbHF1ZXIgbWVpbywgaW5jbHVpbmRvIG9zIGZvcm1hdG9zIMOhdWRpbyBvdSB2w61kZW8uCgpWb2PDqiBkZWNsYXJhIHF1ZSBjb25oZWNlIGEgcG9sw610aWNhIGRlIGNvcHlyaWdodCBkYSBlZGl0b3JhIGRvIHNldSBkb2N1bWVudG8gZSBxdWUgY29uaGVjZSBlIGFjZWl0YSBhcyBEaXJldHJpemVzIGRvIFJJLVVGTUcuCgpWb2PDqiBjb25jb3JkYSBxdWUgbyBSZXBvc2l0w7NyaW8gSW5zdGl0dWNpb25hbCBkYSBVRk1HIHBvZGUsIHNlbSBhbHRlcmFyIG8gY29udGXDumRvLCB0cmFuc3BvciBhIHN1YSBwdWJsaWNhw6fDo28gcGFyYSBxdWFscXVlciBtZWlvIG91IGZvcm1hdG8gcGFyYSBmaW5zIGRlIHByZXNlcnZhw6fDo28uCgpWb2PDqiB0YW1iw6ltIGNvbmNvcmRhIHF1ZSBvIFJlcG9zaXTDs3JpbyBJbnN0aXR1Y2lvbmFsIGRhIFVGTUcgcG9kZSBtYW50ZXIgbWFpcyBkZSB1bWEgY8OzcGlhIGRlIHN1YSBwdWJsaWNhw6fDo28gcGFyYSBmaW5zIGRlIHNlZ3VyYW7Dp2EsIGJhY2stdXAgZSBwcmVzZXJ2YcOnw6NvLgoKVm9jw6ogZGVjbGFyYSBxdWUgYSBzdWEgcHVibGljYcOnw6NvIMOpIG9yaWdpbmFsIGUgcXVlIHZvY8OqIHRlbSBvIHBvZGVyIGRlIGNvbmNlZGVyIG9zIGRpcmVpdG9zIGNvbnRpZG9zIG5lc3RhIGxpY2Vuw6dhLiBWb2PDqiB0YW1iw6ltIGRlY2xhcmEgcXVlIG8gZGVww7NzaXRvIGRlIHN1YSBwdWJsaWNhw6fDo28gbsOjbywgcXVlIHNlamEgZGUgc2V1IGNvbmhlY2ltZW50bywgaW5mcmluZ2UgZGlyZWl0b3MgYXV0b3JhaXMgZGUgbmluZ3XDqW0uCgpDYXNvIGEgc3VhIHB1YmxpY2HDp8OjbyBjb250ZW5oYSBtYXRlcmlhbCBxdWUgdm9jw6ogbsOjbyBwb3NzdWkgYSB0aXR1bGFyaWRhZGUgZG9zIGRpcmVpdG9zIGF1dG9yYWlzLCB2b2PDqiBkZWNsYXJhIHF1ZSBvYnRldmUgYSBwZXJtaXNzw6NvIGlycmVzdHJpdGEgZG8gZGV0ZW50b3IgZG9zIGRpcmVpdG9zIGF1dG9yYWlzIHBhcmEgY29uY2VkZXIgYW8gUmVwb3NpdMOzcmlvIEluc3RpdHVjaW9uYWwgZGEgVUZNRyBvcyBkaXJlaXRvcyBhcHJlc2VudGFkb3MgbmVzdGEgbGljZW7Dp2EsIGUgcXVlIGVzc2UgbWF0ZXJpYWwgZGUgcHJvcHJpZWRhZGUgZGUgdGVyY2Vpcm9zIGVzdMOhIGNsYXJhbWVudGUgaWRlbnRpZmljYWRvIGUgcmVjb25oZWNpZG8gbm8gdGV4dG8gb3Ugbm8gY29udGXDumRvIGRhIHB1YmxpY2HDp8OjbyBvcmEgZGVwb3NpdGFkYS4KCkNBU08gQSBQVUJMSUNBw4fDg08gT1JBIERFUE9TSVRBREEgVEVOSEEgU0lETyBSRVNVTFRBRE8gREUgVU0gUEFUUk9Dw41OSU8gT1UgQVBPSU8gREUgVU1BIEFHw4pOQ0lBIERFIEZPTUVOVE8gT1UgT1VUUk8gT1JHQU5JU01PLCBWT0PDiiBERUNMQVJBIFFVRSBSRVNQRUlUT1UgVE9ET1MgRSBRVUFJU1FVRVIgRElSRUlUT1MgREUgUkVWSVPDg08gQ09NTyBUQU1Cw4lNIEFTIERFTUFJUyBPQlJJR0HDh8OVRVMgRVhJR0lEQVMgUE9SIENPTlRSQVRPIE9VIEFDT1JETy4KCk8gUmVwb3NpdMOzcmlvIEluc3RpdHVjaW9uYWwgZGEgVUZNRyBzZSBjb21wcm9tZXRlIGEgaWRlbnRpZmljYXIgY2xhcmFtZW50ZSBvIHNldSBub21lKHMpIG91IG8ocykgbm9tZXMocykgZG8ocykgZGV0ZW50b3IoZXMpIGRvcyBkaXJlaXRvcyBhdXRvcmFpcyBkYSBwdWJsaWNhw6fDo28sIGUgbsOjbyBmYXLDoSBxdWFscXVlciBhbHRlcmHDp8OjbywgYWzDqW0gZGFxdWVsYXMgY29uY2VkaWRhcyBwb3IgZXN0YSBsaWNlbsOnYS4K
dc.title.none.fl_str_mv Refactoring graphs: reasoning about refactoring over time
title Refactoring graphs: reasoning about refactoring over time
spellingShingle Refactoring graphs: reasoning about refactoring over time
Aline Norberta de Brito
Computação – Teses
Engenharia de software – Teses
Grafos de refatoração – Teses
Mineração de repositórios de software – Teses
Refactoring
Refactoring graphs
Mining software repositories
Software evolution
title_short Refactoring graphs: reasoning about refactoring over time
title_full Refactoring graphs: reasoning about refactoring over time
title_fullStr Refactoring graphs: reasoning about refactoring over time
title_full_unstemmed Refactoring graphs: reasoning about refactoring over time
title_sort Refactoring graphs: reasoning about refactoring over time
author Aline Norberta de Brito
author_facet Aline Norberta de Brito
author_role author
dc.contributor.author.fl_str_mv Aline Norberta de Brito
dc.subject.por.fl_str_mv Computação – Teses
Engenharia de software – Teses
Grafos de refatoração – Teses
Mineração de repositórios de software – Teses
topic Computação – Teses
Engenharia de software – Teses
Grafos de refatoração – Teses
Mineração de repositórios de software – Teses
Refactoring
Refactoring graphs
Mining software repositories
Software evolution
dc.subject.other.none.fl_str_mv Refactoring
Refactoring graphs
Mining software repositories
Software evolution
description 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.
publishDate 2023
dc.date.accessioned.fl_str_mv 2023-07-17T12:51:58Z
2025-09-09T00:27:41Z
dc.date.available.fl_str_mv 2023-07-17T12:51:58Z
dc.date.issued.fl_str_mv 2023-03-10
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/56371
url https://hdl.handle.net/1843/56371
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.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
bitstream.url.fl_str_mv https://repositorio.ufmg.br//bitstreams/0d55f5e1-7ab2-459e-ae94-916795abe648/download
https://repositorio.ufmg.br//bitstreams/90492dc3-6c4b-4c1a-91da-5cd9ea69003f/download
bitstream.checksum.fl_str_mv cda590c95a0b51b4d15f60c9642ca272
041ae67b5cb6282c89099fb001b7f1f8
bitstream.checksumAlgorithm.fl_str_mv MD5
MD5
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_ 1862106044974497792