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

PP1: O CSDiff reduz a quantidade de conflitos reportados emcomparação ao Diff3?



CSDiff produz mais conflitos

Como pode ser observado na tabela abaixo o CSDiff produz mais conflitos em relação ao diff3

Resultados CSDiff em comparação ao diff3 com múltiplos separadores sintáticos relativo a número de conflitos
# diff3 ('\n') CSDiff ('\n', '{', '}', ',', '(', ')', ';')
Número de Conflitos 74096 152490 (+105,8%)
Arquivos com Conflitos 8670 8598 (-0,83%)
Arquivos com Conflitos (Sem Cenários Outliers) 1491 1419 (-4,83%)
Cenários com Conflitos 595 564 (-5,21%)

Para entender melhor o motivo que o CSDiff produz mais conflitos vamos analisar o caso a seguir. Considere as versões seguintes como as versões base, left e right, respectivamente, de um arquivo (por simplicidade considere que esse arquivo só possui essas chamadas de método).


base.java



left.java



right.java

Por quebrar os arquivos em separadores (nesse caso sendo os separadores utilizados o abre e fecha parênteses), o CSDiff acaba reconhecendo uma mudança dentro das chamadas de função na primeira e segunda linha, por causa disso, a ferramenta proposta reporta dois conflitos diferentes, como pode ser observado a seguir:


csdiff.java

Enquanto que, por o diff3 agrupar conflitos que estão em linhas consecutivas em um único conflito, ele reporta apenas um conflito como pode ser observado na imagem abaixo:


diff3.java