30
Thiago Pinheiro de Araújo Arndt von Staa SDiff: Uma ferramenta para comparação de documentos com base nas suas estruturas sintáticas

Thiago Pinheiro de Araújo Arndt von Staa SDiff: Uma ferramenta para comparação de documentos com base nas suas estruturas sintáticas

Embed Size (px)

Citation preview

Page 1: Thiago Pinheiro de Araújo Arndt von Staa SDiff: Uma ferramenta para comparação de documentos com base nas suas estruturas sintáticas

Thiago Pinheiro de Araújo

Arndt von Staa

SDiff: Uma ferramenta para comparação de documentos com base nas suas

estruturas sintáticas

Page 2: Thiago Pinheiro de Araújo Arndt von Staa SDiff: Uma ferramenta para comparação de documentos com base nas suas estruturas sintáticas

Índice

• Introdução

• Motivação

• Estado da arte

• Objetivo

• Modelo conceitual

• A ferramenta SDiff

• Experimentos

• Conclusão e Trabalhos futuros

Page 3: Thiago Pinheiro de Araújo Arndt von Staa SDiff: Uma ferramenta para comparação de documentos com base nas suas estruturas sintáticas

Introdução

• Ferramentas de comparação são utilizadas para identificar as diferenças existentes entre duas versões de um documento.

• Entende-se por documento qualquer artefato que possa ser comparado.

• Tais ferramentas costumam ser utilizadas acopladas a sistemas de controle de versão a fim de:

– Permitir que o usuário visualize as diferenças que serão adicionadas ao próximo changeset do projeto.

– Definir o incremento representado por cada changeset do projeto.

Page 4: Thiago Pinheiro de Araújo Arndt von Staa SDiff: Uma ferramenta para comparação de documentos com base nas suas estruturas sintáticas

Motivação

• Toda ferramenta desta natureza possui uma unidade de comparação indivisível.

– Na maioria das ferramentas comerciais esta unidade costuma ser o parágrafo (linha de texto seguida de terminador de linha).

• Essa abordagem permite tratar de todos os arquivos de texto da mesma forma independente do tipo de conteúdo específico de cada um.

• Porém esta abordagem produz resultados imprecisos e com poucas informações sobre a evolução.

– A tarefa de identificar o trecho exato que foi modificado e a semântica associada a ele é delegada ao usuário.

Page 5: Thiago Pinheiro de Araújo Arndt von Staa SDiff: Uma ferramenta para comparação de documentos com base nas suas estruturas sintáticas

Motivação

• Resultados pouco precisos dificultam a legibilidade das diferenças:

• Além disso, o versionamento de documentos não-textuais, como modelos, torna-se inviável.

Page 6: Thiago Pinheiro de Araújo Arndt von Staa SDiff: Uma ferramenta para comparação de documentos com base nas suas estruturas sintáticas

Estado da arte

• Categorias de trabalhos encontrados na literatura:

– Operation-based.

• Conhece a seqüência de passos com as operações de edição.

• Depende de um ambiente instrumentado.

– Syntax-based.

• Baseia-se na estrutura sintática dos documentos.

• Depende de interpretadores para tratar cada tipo de sintaxe.

– Refactor-oriented.

• Procura identificar operações de refatoração.

• É complementar aos anteriores.

• Abordagem oriented-based depende de um ambiente instrumentado.

• Abordagem syntax-based depende da AST e de todo o código-fonte disponível.

Page 7: Thiago Pinheiro de Araújo Arndt von Staa SDiff: Uma ferramenta para comparação de documentos com base nas suas estruturas sintáticas

Estado da arte

• Categorias de trabalhos encontrados na literatura:

– Model-oriented.

• Viabiliza o versionamento de documentos não-textuais.

• Contribui para a evolução de Model-driven development.

– Controles de versão com granularidade variável.

• Capazes de persistir todo o conteúdo sob a forma de elementos com granularidade variável.

• Quando associados a ambientes de desenvolvimento é possível manter identificadores persistentes para cada elemento.

• Depende de interpretadores para tratar cada tipo de sintaxe.

• Pesquisas relacionadas:

– Kim [2006] realizou um estudo comparativo sobre as técnicas existentes de comparação de código-fonte de software.

• Concluiu que um comparador hibrido produz melhores resultados.

Page 8: Thiago Pinheiro de Araújo Arndt von Staa SDiff: Uma ferramenta para comparação de documentos com base nas suas estruturas sintáticas

Objetivo

• Criar um mecanismo de comparação de documentos textuais capaz de identificar com precisão as diferenças entre duas versões de um documento.

• Este mecanismo

– Deve se basear nas estruturas sintáticas dos documentos.

– Não deve depender de outros documentos que resolvam as dependências do documento comparado.

• Ex: Declarações em linguagens de programação.

• O mecanismo deve poder se aplicado a qualquer tipo de documento textual.

– Ex: Linguagens de programação, arquivos XML, arquivos Tex, etc.

Page 9: Thiago Pinheiro de Araújo Arndt von Staa SDiff: Uma ferramenta para comparação de documentos com base nas suas estruturas sintáticas

Modelo conceitual

• Conceitos gerais

• Visão geral

• Estrutura sintática canônica

• Mecanismo de comparação

– Estrutura Diff

– Algoritmo de comparação

• Algoritmo de comparação textual.

• Algoritmo de comparação sintática.

• Comparação com o estado da arte

Page 10: Thiago Pinheiro de Araújo Arndt von Staa SDiff: Uma ferramenta para comparação de documentos com base nas suas estruturas sintáticas

Conceitos gerais

• Comparações de documentos geram uma lista de diferenças.

• Cada diferença é representada nos documentos a partir de uma seleção.

• Uma seleção define os limites textuais de um elemento sintático, a partir de um ponto inicial e um ponto final.

• Um ponto indica uma posição no documento a partir de linha e coluna.

Page 11: Thiago Pinheiro de Araújo Arndt von Staa SDiff: Uma ferramenta para comparação de documentos com base nas suas estruturas sintáticas

Conceitos gerais

• Cada diferença representa um tipo de operação:

– Inserção.

– Remoção.

– Modificação.

– Movimentação.

– União.

– Separação.

– Clone.

• Ferramentas comerciais costumam identificar inserções e remoções.

• Algumas mais elaboradas identificam também modificações.

• Porém, em ambos os casos, com precisão baixa.

Page 12: Thiago Pinheiro de Araújo Arndt von Staa SDiff: Uma ferramenta para comparação de documentos com base nas suas estruturas sintáticas

Visão geral

Page 13: Thiago Pinheiro de Araújo Arndt von Staa SDiff: Uma ferramenta para comparação de documentos com base nas suas estruturas sintáticas

Estrutura sintática canônica

• O algoritmo de comparação trabalha sobre uma estrutura sintática canônica, a fim de mantê-lo genérico para qualquer tipo de documento.

• Esta estrutura canônica:

– representa os elementos sintáticos presentes no documento e seus relacionamentos hierárquicos.

– é gerada por um conversor que recebe o conteúdo específico, interpreta-o, e retorna sua representação estrutural.

• Nesse processo são adicionadas propriedades sintáticas identificadas durante a interpretação do documento.

Page 14: Thiago Pinheiro de Araújo Arndt von Staa SDiff: Uma ferramenta para comparação de documentos com base nas suas estruturas sintáticas

Estrutura sintática canônica

Page 15: Thiago Pinheiro de Araújo Arndt von Staa SDiff: Uma ferramenta para comparação de documentos com base nas suas estruturas sintáticas

Mecanismo de comparação

• O resultado dessa conversão é retornado em um formato XML.

– Este é um formato flexível e genérico suficiente para representar a grande maioria dos documentos.

• Exemplo:

30. private:31. int m_var;

<VariableDeclaration visibility="private“ >

<TypeSpecifier value="int“ />

<Identifier value="m_var“ />

</VariableDeclaration>

Page 16: Thiago Pinheiro de Araújo Arndt von Staa SDiff: Uma ferramenta para comparação de documentos com base nas suas estruturas sintáticas

Algoritmo de comparação

• Entrada: dois documentos na forma canônica.

• Saída: uma estrutura Diff contendo as diferenças identificadas.

– Como o algoritmo atua sobre uma árvore composta por elementos sintáticos, a resposta também é representada como uma árvore de diferenças.

– Esta estrutura também guarda o percentual de diferença calculado para o par de elementos comparados.

• Esta é a propriedade mais relevante para a tomada de decisão do algoritmo e possivelmente para se obter um bom resultado final.

• Este valor é calculado com base em três heurísticas apresentadas a seguir.

Page 17: Thiago Pinheiro de Araújo Arndt von Staa SDiff: Uma ferramenta para comparação de documentos com base nas suas estruturas sintáticas

Algoritmo de comparação

Result:

Page 18: Thiago Pinheiro de Araújo Arndt von Staa SDiff: Uma ferramenta para comparação de documentos com base nas suas estruturas sintáticas

Algoritmo de comparação

• O algoritmo de comparação:

1. Só compara os elementos se forem do mesmo tipo.

2. Realiza a comparação de propriedades.

3. Realiza a comparação de sub-elementos, que pode ser:

• Textual – Baseado no algoritmo LCS, considerando o caractere como unidade indivisível de comparação.

• Sintática – Explicado a seguir.

4. Calcula o percentual de diferença entre os elementos segundo a fórmula:

Page 19: Thiago Pinheiro de Araújo Arndt von Staa SDiff: Uma ferramenta para comparação de documentos com base nas suas estruturas sintáticas

Algoritmo de comparação

• O algoritmo de comparação sintática:

1. Executa o algoritmo LCS sobre as listas de sub-elementos.

2. Constrói uma matriz Elemento Inseridos X Elementos Removidos

• O peso de cada par é calculado a partir dos valores:

1. Percentual de igualdade.

2. Proximidade (heurística).

3. Igualdade de nomes (heurística).

3. Executa um algoritmo de emparelhamento sobre esta matriz.

• Hungarian [Kuhn, 1955].

4. Define quais pares resultantes do emparelhamento são equivalentes, a partir de uma heurística.

5. Classifica os resultados em operações de modificação e movimentação.

Page 20: Thiago Pinheiro de Araújo Arndt von Staa SDiff: Uma ferramenta para comparação de documentos com base nas suas estruturas sintáticas

Comparação com o estado da arte

• O modelo apresentado não é invasivo.

– Evita que o usuário final se restrinja a ferramentas especiais.

• O mecanismo de comparação respeita a hierarquia e os tipos dos elementos sintáticos.

• A utilização de heurísticas combinadas ao algoritmo de emparelhamento é uma inovação proposta por este trabalho que evita resultados rígidos.

• A proposta de Dig [DIG, et al., 2006] relacionada à detecção de operações de refactor com base em padrões conhecidos é complementar ao nosso modelo.

• O algoritmo implementado é híbrido: cada tipo de elemento define se o seu conteúdo será comparado utilizando o mecanismo de comparação sintática ou textual.

Page 21: Thiago Pinheiro de Araújo Arndt von Staa SDiff: Uma ferramenta para comparação de documentos com base nas suas estruturas sintáticas

A ferramenta SDiff

• A implementação deste algoritmo produziu a ferramenta SDiff:

Inserção

Remoção

Modificação

Movimentação

Alteração no contexto

Modificação no elemento

Page 22: Thiago Pinheiro de Araújo Arndt von Staa SDiff: Uma ferramenta para comparação de documentos com base nas suas estruturas sintáticas

Comparação com a ferramenta KDiff3

• Modificação

Page 23: Thiago Pinheiro de Araújo Arndt von Staa SDiff: Uma ferramenta para comparação de documentos com base nas suas estruturas sintáticas

Comparação com a ferramenta KDiff3

• Movimentação

Page 24: Thiago Pinheiro de Araújo Arndt von Staa SDiff: Uma ferramenta para comparação de documentos com base nas suas estruturas sintáticas

Comparação com a ferramenta KDiff3

• Reformatação

Page 25: Thiago Pinheiro de Araújo Arndt von Staa SDiff: Uma ferramenta para comparação de documentos com base nas suas estruturas sintáticas

Comparação com a ferramenta KDiff3

• Extração de código

Page 26: Thiago Pinheiro de Araújo Arndt von Staa SDiff: Uma ferramenta para comparação de documentos com base nas suas estruturas sintáticas

Experimentos em aplicações reais

• Aplicamos a ferramenta SDiff em versões consecutivas de documentos extraídos de aplicações reais com as características:

– Número de linhas alto (1 a 5 KLOC).

– Dependências não resolvidas.

• A ferramenta foi capaz de identificar com precisão a maior parte das diferenças.

• Dificuldades encontradas:

– Comparação de blocos de comentário formados por // consecutivos.

– Comparação de macros.

Page 27: Thiago Pinheiro de Araújo Arndt von Staa SDiff: Uma ferramenta para comparação de documentos com base nas suas estruturas sintáticas

• Fizemos alguns testes para avaliar o desempenho da ferramenta quando submetida a diferentes tamanhos documentos.

Estatísticas da execução

Page 28: Thiago Pinheiro de Araújo Arndt von Staa SDiff: Uma ferramenta para comparação de documentos com base nas suas estruturas sintáticas

Conclusão

• O objetivo deste trabalho foi projetar um mecanismo de comparação de documentos capaz de respeitar suas propriedades estruturais e sintáticas.

• Os principais benefícios obtidos do ponto de vista do usuário foram:

– Capacidade de identificar elementos movidos ou modificados.

– Precisão sintática nas diferenças.

– Ignorar diferenças irrelevantes para o usuário como identação ou formatação.

• A contribuição mais significativa deste trabalho é a aplicação de heurísticas para inferir operações mais específicas que uma simples inserção ou remoção de elementos.

Page 29: Thiago Pinheiro de Araújo Arndt von Staa SDiff: Uma ferramenta para comparação de documentos com base nas suas estruturas sintáticas

Trabalhos futuros

• Melhorias no mecanismo de comparação:

– Identificar movimentações entre níveis.

– Criar heurísticas para detectar união, separação, clones e refactors.

– Extensão para tratar de documentos não-textuais.

• Melhorias na ferramenta SDiff:

– Implementar componentes que tratem outros tipos de documentos (Ex: Java, Lua, XML, HTML, Javascript, C#, etc).

– Criar um modo de visualização, específico para linguagens de programação:

• Ex: Diagramas de classe, DFDs, etc.

Page 30: Thiago Pinheiro de Araújo Arndt von Staa SDiff: Uma ferramenta para comparação de documentos com base nas suas estruturas sintáticas

Perguntas?

Thiago Pinheiro de Araújo

[email protected]

PUC-Rio – Departamento de Informática