
On the Influence of Refactorings on Merge Effort
Resumo:
No desenvolvimento colaborativo de software, desenvolvedores frequentemente modificam o código-fonte em paralelo para implementar funcionalidades, corrigir defeitos, refatorar e realizar outras atividades de manutenção. Essas modificações precisam ser posteriormente integradas por meio de operações de merge, que podem exigir trabalho adicional para compreender e reconciliar mudanças concorrentes. As refatorações são particularmente relevantes nesse contexto porque alteram a estrutura interna do software e podem interagir com modificações implementadas de forma independente em outros ramos. Embora estudos anteriores tenham investigado a presença de refatorações em conflitos de merge, ainda havia conhecimento limitado sobre sua relação com o esforço necessário para concluir a integração. Esta tese investiga como as refatorações de código se relacionam com o esforço de merge, considerando sua ocorrência, volume, distribuição entre os ramos, tipos específicos, diversidade e combinações introduzidas de forma concorrente. Nos estudos quantitativos, o esforço de merge foi operacionalizado como o code churn adicional introduzido durante a resolução do merge, após a exclusão das alterações já presentes nos ramos. A pesquisa adotou um desenho empírico incremental e multimétodo, combinando mineração de repositórios, análise de regras de associação, inspeção manual de código, entrevistas semiestruturadas e um questionário pós-entrevista. O primeiro estudo analisou 40.248 cenários de merge válidos provenientes de 28 projetos Java de código aberto e examinou as refatorações sem distinguir seus tipos. O segundo ampliou a investigação para 91.270 cenários de merge de 64 projetos de código aberto e analisou 33 tipos de refatoração, seus volumes, diversidade e combinações entre ramos. O terceiro estudo analisou 6.344 cenários de merge de 12 repositórios privados desenvolvidos e mantidos pelo Serviço Federal de Processamento de Dados (SERPRO), comparou os resultados às evidências obtidas em projetos de código aberto e incorporou entrevistas e respostas de questionário de 30 desenvolvedores. Os resultados mostram que merges envolvendo refatorações são mais frequentemente associados à ocorrência e à maior intensidade de esforço, e que essas associações se tornam mais fortes à medida que as refatorações se acumulam e quando ocorrem simultaneamente nos dois ramos. Os tipos de refatoração não apresentam comportamento uniforme: transformações que afetam nomes, localizações, contratos de métodos, dependências e relações estruturais apresentam associações particularmente relevantes. O volume e a diversidade de refatorações foram associados ao esforço de merge, indicando que não apenas a quantidade de refatorações, mas também a variedade de transformações é relevante. Além disso, alguns tipos específicos de refatoração apresentaram associações particularmente fortes com maior esforço de merge quando ocorreram de forma concorrente em ramos distintos. Os resultados industriais reproduzem os principais padrões observados em projetos de código aberto, embora a intensidade e a distribuição das associações variem conforme o contexto. As evidências obtidas com os desenvolvedores mostram ainda que o esforço de merge relacionado a refatorações decorre da interação entre mudanças estruturais, ramos de longa duração, integração tardia, fluxos paralelos de desenvolvimento, acoplamento do software, comunicação e conhecimento sobre a intenção das mudanças. Esses achados caracterizam o esforço de merge relacionado a refatorações como um fenômeno sociotécnico e fornecem implicações para práticas de desenvolvimento e para ferramentas de integração e de recomendação sensíveis a refatorações.
Abstract
In collaborative software development, developers often modify source code in parallel to implement features, fix defects, refactor, and perform other maintenance activities. These modifications must subsequently be integrated through merge operations, which may require additional work to understand and reconcile concurrent changes. Refactorings are particularly relevant in this context because they modify software’s internal structure and may interact with changes implemented independently in other branches. Although previous studies have examined the presence of refactorings in merge conflicts, little is known about their relationship to the effort required to complete integration. This thesis investigates how code refactorings relate to merge effort by considering their occurrence, volume, distribution across branches, specific types, diversity, and combinations introduced concurrently. Across the quantitative studies, merge effort was operationalized as the additional code churn introduced during merge resolution after excluding changes already present in the branches. The research adopted an incremental, multi-method empirical design combining repository mining, association-rule analysis, manual code inspection, semi-structured interviews, and a post-interview questionnaire survey. The first study analyzed 40,248 valid merge scenarios from 28 open-source Java projects and examined refactorings without distinguishing their individual types. The second expanded the investigation to 91,270 merge scenarios from 64 open-source projects and analyzed 33 refactoring types, their volume, diversity, and cross-branch combinations. The third study analyzed 6,344 merge scenarios from 12 private repositories developed and maintained by the Brazilian Federal Data Processing Service (SERPRO), compared the findings with open-source evidence, and incorporated interviews and survey responses from 30 software developers. The results show that merges involving refactorings are more frequently associated with the occurrence and higher intensity of merge effort, and that these associations become stronger as refactorings accumulate and when they occur concurrently in both branches. Refactoring types do not behave uniformly: transformations affecting names, code locations, method contracts, dependencies, and structural relationships present particularly relevant associations. Refactoring volume and diversity were both associated with merge effort, indicating that both the number of refactorings and the variety of transformations matter. Moreover, some specific refactoring types were particularly associated with higher merge effort when they occurred concurrently across different branches. The industrial results reproduce the main patterns found in open-source projects, although the strength and distribution of the associations vary across contexts. Developer evidence further shows that refactoring-related merge effort emerges from the interaction among structural changes, long-lived branches, delayed integration, parallel development workflows, software coupling, communication, and knowledge of change intent. These findings characterize refactoring-related merge effort as a socio-technical phenomenon and provide implications for development practices and for refactoring-aware integration and recommendation tools.
Banca examinadora:
Prof. Leonardo Gresta Paulino Murta, UFF – Presidente
Prof. Alexandre Plastino de Carvalho, UFF
Profa. Vânia de Oliveira Neves, UFF
Prof. José Viterbo Filho, UFF
Prof. Daniel Cardoso Moraes de Oliveira, UFF
Prof. Márcio de Medeiros Ribeiro, UFAL
Prof. Marco Túlio de Oliveira Valente, UFMG