A Lightweight Technique for Detecting Semantic Conflicts with
Static Analysis
semantic conflicts; static analysis; collaborative
development; interference detection; code integration.
Durante o desenvolvimento colaborativo de software, o uso de branches e merges permitem trabalho paralelo e integração contínua, mas também introduz o risco de conflitos semânticos, situações em que alterações independentemente corretas passam a interferir entre si após a integração, levando a comportamentos inesperados em tempo de execução. Esses conflitos são particularmente desafiadores porque não são detectados por ferramentas tradicionais de merge nem pelos processos padrão de build, o que motiva o desenvolvimento de técnicas estáticas capazes de identificar interferências antes de ir para produção.
Esta tese investiga o uso de técnicas de análise estática para detectar conflitos semânticos diretamente na versão do código resultante do merge, sem executar o programa. Avaliamos se análises estáticas, são capazes de capturar interferências entre as contribuições dos desenvolvedores. Conduzimos um estudo empírico com 99 cenários reais de merge provenientes de 32 projetos Java de código aberto, avaliando múltiplas análises complementares que capturam diferentes formas de interferência. Os resultados mostram que a combinação de múltiplas análises aumenta a cobertura de detecção, mas também leva a um maior número de falsos positivos.
Comparamos nossas análises estáticas leves com outra baseada em grafos de dependência do sistema (SDGs). Os resultados empíricos mostram que ambas as abordagens apresentam comportamento de detecção semelhante no conjunto de dados estudado. Entretanto, enquanto as análises leves executam em segundos, as análises de programa inteiro exigem horas para serem construídas e reportam um número maior de falsos positivos.
De forma geral, esta tese fornece uma avaliação empírica de técnicas de análise estática para detecção de conflitos semânticos, destacando as vantagens práticas e limitações de abordagens leves e pesadas, e oferecendo orientações baseadas em evidências para a seleção de estratégias de análise em contextos reais de desenvolvimento.