Pós-Graduação em Ciência da Computação – UFPE
Defesa de Dissertação de Mestrado Nº 1.995

Aluno: Matheus Barbosa de Oliveira
Orientador: Prof. Paulo Henrique Monteiro Borba
Co-orientador: Rodrigo Bonifacio de Almeida
Título: Detecção de conflitos semânticos via análise estática de 
subistituição de atribuição
Data: 23/02/2022
Hora/Local: 9h – Virtual – Interessados em assistir entrar em contato com o aluno
Banca Examinadora:
Prof. Márcio de Medeiros Ribeiro  (UFPE / Centro de Informática)
Prof. Eduardo Figueiredo (UFMG /  Departamento de Ciência da Computação)
Prof. Paulo Henrique Monteiro Borba (UFPE / CIn)


RESUMO:

O processo de desenvolvimento de software atual, exceto em casos especiais, 
é feito de forma colaborativa. Na medida que novos requisitos são 
levantados, novas tarefas são definidas e alocadas a desenvolvedores 
diferentes. Os desenvolvedores, no que lhes concerne, adicionam suas 
modificações em repositórios ou versões separadas e isoladas do código, e 
posteriormente essas modificações precisam ser integradas em um repositório 
ou versão central. Esse processo de integração de código é propenso a 
erros, especialmente se as alterações em diferentes ramos entrarem em 
conflito.
Alguns desses conflitos são mais simples e podem ser detectados pelas 
ferramentas atuais de controle de versão como o Git, no entanto, ainda 
necessitam de intervenção humana para resolvê-los, o que afeta a 
produtividade da equipe. Mas esse não é o único problema, existem também os 
conflitos semânticos que requerem a compreensão do comportamento do 
software, que está além dos recursos da maioria das ferramentas de 
mesclagem existentes. Isso faz com que esses conflitos dificilmente sejam 
percebidos por revisões ou detectados em testes e chegam até o usuário 
final como defeito no software.
Esse tipo de conflito ocorre quando, no código integrado, as mudanças 
introduzidas pela versão de um dos desenvolvedores interferem de forma 
inesperada com as mudanças introduzidas pela versão de outro 
desenvolvedor,  fazendo  com  o  que  um  contrato  pretendido  por  uma   
das versões deixe de ser cumprido. Sendo assim, se fazem necessárias 
ferramentas que possam detectar conflitos desse tipo no processo de 
integração, de modo a evitar bugs e facilitar a resolução dos mesmos.
Nesse sentido, esse trabalho propõe uma análise de substituição de 
atribuição (Override an Assignment (OA)), que visa detectar interferências 
entre as alterações introduzidas por dois desenvolvedores diferentes, onde 
caminhos de gravação, sem atribuições intermediárias, para um alvo comum 
indicam interferência. Também foi realizada a implementação e avaliação de 
duas abordagens (interprocedural e intraprocedural) para a análise proposta.

Para avaliar as implementações da análise proposta foi usado um conjunto de 
72 cenários de integração de código, em que ambas versões integradas 
modificaram o mesmo método. Esses cenários foram extraídos de projetos 
open-source Java, minerados por uma ferramenta de mineração de cenários de 
integração do Github.

Palavras-chave: Substituir atribuição, conflitos de integração de código, 
desenvolvimento colaborativo.

Comentários desativados