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