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.
Avaliação dos Resultados
- PP1: O CSDiff reduz a quantidade de conflitos reportados emcomparação ao Diff3?
- PP2: O CSDiff reduz a quantidade de cenários com conflitosreportados em comparação ao Diff3?
- PP3: O CSDiff reduz a quantidade de falsos conflitos e ce-nários com falsos conflitos reportados (falsos positivos) emcomparação ao Diff3?
- PP4: O CSDiff, em comparação ao Diff3, aumenta o númerode integrações de mudanças que interferem uma na outrasem reportar conflitos (falsos negativos)?