Merge textual baseado em separadores de elementos sintáticos de linguagens de programação

Merge textual baseado em separadores de elementos sintáticos de linguagens de programação

Abstract:

Com o aumento de colaboradores trabalhando em um mesmo projeto de software, modificações paralelas são realizadas e precisam ser integradas no código principal através do processo de merge. O merge por muitas vezes pode gerar conflito, o que impacta na produtividade do time e influencia na produção de bugs no produto final. Na prática, a abordagem de merge mais utilizada é a textual, porém ela reporta falsos conflitos. Por causa disso, pesquisadores desenvolveram abordagens mais sofisticadas utilizando, por exemplo, árvores sintáticas no caso da proposta do merge estruturado. Porém, essas abordagens demandam um custo de criar ferramentas para cada linguagem de programação e podem gerar um impacto negativo na performance. Este trabalho propõe e analisa uma nova solução que se baseia no merge textual, mas visa simular o estruturado, utilizando não somente linhas na busca por mudanças, como também separadores sintáticos específicos da linguagem. Os resultados obtidos mostram que a abordagem textual com separadores tem relação com a redução de falsos conflitos em comparação ao merge textual tradicional baseado em linhas e que, apesar dessa redução não ser tão expressiva, esta nova solução abre espaço para estudos futuros por seu uso trazer benefícios.

Setup do Estudo

Com o objetivo de responder as perguntas de pesquisa, utilizamos projetos Java bem avaliados (com no mínimo 800 estrelas no Github) e com múltiplos colaboradores (no mínimo 80 colaboradores). Utilizamos os cenários de merge desses projetos para executar a ferramenta Diff3 em comparação a ferramenta proposta pelo artigo, o CSDiff. Como input para o CSDiff foram utilizados dois conjuntos de separadores, sendo o primerio formado pelos caracteres '{', '}', ',', '(', ')', ';' e o segundo (um subconjunto do primeiro) '{', '}', ','.

O processo de avaliação é definido por três passos: mineração, execução e análise. O processo de mineração tem como objetivo extrair os cenários de merge dos nove projetos selecionados. O processo de execução tem como objetivo executar as ferramentas que irão ser analisadas e salvar os resultados do merge para cada cenário. O último passo, a análise, tem como objetivo comparar e obter os resultados focados nas perguntas de pesquisa. Para realizar estes processos foi utilizada a ferramenta Mining Framework.