Resumo:
Em desenvolvimento de software colaborativo, desenvolvedores compartilham código fonte e modificam partes deste código em paralelo, visando aumentar a produtividade. Para isso, times de desenvolvimento, tipicamente globalmente distribuídos, fazem uso de sistemas de controle de versão (SCV), os quais são responsáveis por versionar o código fonte e reconciliar as alterações conflitantes realizadas pelos desenvolvedores em paralelo. Em geral, cada desenvolvedor possui uma cópia local dos arquivos do código fonte do repositório, podendo realizar qualquer tipo modificação e tendo que posteriormente integrar a sua versão local do código fonte com as alteradas pelos outros membros do time de desenvolvimento. O problema é que usualmente os sistemas de controle de versão (por exemplo, GIT e SVN) não dão suporte a detecção antecipada dos conflitos, nem auxiliam os desenvolvedores na resolução dos mesmos. Na prática, um conflito trata-se de alterações divergentes realizadas em um mesmo trecho de código em paralelo por diferentes desenvolvedores. Consequentemente, detectar e resolver conflitos passam a ser duas atividades altamente propensa a erros e que exige bastante esforço do desenvolvedor. Para explorar esta problemática, este trabalho propõe o PACCS, uma ferramenta capaz de: (1) detectar proativamente conflitos; (2) analisar a propagação de conflitos; (3) identificar conflitos sintáticos e semânticos; (4) resolver automaticamente conflitos detectados; (5) apoiar os desenvolvedores na resolução colaborativa dos conflitos; e (6) checar as integrações realizadas e submetidas ao repositório de acordo um conjunto de regras. A ferramenta desenvolvida abordará os requisitos citados anteriormente e possui duas partes: o lado cliente (plugin para o eclipse) e o lado server (gerenciador de alterações entre workspaces). Após a construção da ferramenta será efetuado um comparativo entre desenvolvedores que utilizam a ferramenta versus os que não utilizaram, objetivando aferir as vantagens ou desvantagens da ferramenta. Os resultados demonstraram que (1) ao contrário do que a literatura prega, VCS centralizados tendem produzir um código fonte mais próximo do desejado e (2) a abordagem colaborativa pode ser mais eficiente e necessitar de menos esforço na resolução de conflitos.