Os sistemas de controle de versão, comumente utilizados no desenvolvimento de software, são ferramentas cujo objetivo é gerenciar as diferentes versões dos documentos produzidos ao longo do processo de desenvolvimento.

Atuando como uma espécie de “máquina do tempo” dos desenvolvedores, as ferramentas de controle de versão permitem retornar múltiplos arquivos de múltiplos autores a qualquer versão anterior.

Dentre as características oferecidas pelas ferramentas de controle de versão destacarei neste post algumas das que conferem vantagem aos projetos desenvolvidos através de métodos ágeis.

Primeiramente, destaco o suporte à colaboração.

As ferramentas de controle de versão permitem que vários desenvolvedores trabalhem em paralelo sobre os mesmos arquivos sem que um sobrescreva o código de outro, facilitando o trabalho em equipe.  Todo o gerenciamento do que foi alterado em cada arquivo por cada um dos usuários fica a cargo da ferramenta de controle de versão.

Isto confere maior agilidade ao processo de desenvolvimento, uma vez que vários usuários podem trabalhar em uma mesma funcionalidade ao mesmo tempo, pois a responsabilidade de realizar o “merge” entre o que foi feito por cada usuário em um documento é feito pela ferramenta de controle de versão.

O suporte à marcação (criação de tags) é também uma vantagem oferecida pelas ferramentas de controle de versão.

A maioria das implementações permite a marcação dos documentos que estão em uma versão estável, de forma que este pode ser resgatado no futuro.  Enquanto em processos convencionais de desenvolvimento  a entrega acontece em etapas avançadas do processo de desenvolvimento, as metodologias ágeis buscam a capacidade de implantar uma nova versão do software ao final de cada iteração. Portanto é preciso que a cada iteração a equipe de desenvolvimento esteja preparada para, em caso de algum problema com uma versão recém implantada, retorná-la para a última versão estável. Este procedimento é facilitado pelo recurso de marcação das ferramentas de controle de versão.

Além da agilidade conferida pelo fato de vários desenvolvedores poderem manipular um mesmo arquivo concomitantemente sem perder informações (primeira vantagem), o uso do controle de versão confere uma maior segurança ao desenvolvimento, uma vez que mantém um histórico com as versões estáveis do software desenvolvido.

O controle de versão traz a possibilidade de se rastrear todo o processo de evolução dos arquivos por elas manipulados.

Ao criar uma nova versão de um documento, as ferramentas de controle de versão tratam de identificá-la unicamente, de forma que esta versão possa ser recuperada a qualquer momento. Além de atribuir um identificador, os softwares de controle de versão também armazenam o responsável pela criação da nova versão e a data em que ela foi criada. Opcionalmente, ao criar uma nova versão de um documento, o usuário pode adicionar um comentário, descrevendo o que foi alterado em relação à versão anterior do arquivo.

Em projetos ágeis é comum que vários membros da equipe de desenvolvimento trabalhem paralelamente em cima de uma mesma funcionalidade. Como consequência, é comum, também, que realizem alterações sobre os mesmos documentos, o que pode gerar conflitos entre as suas versões. Assim a possibilidade de rastrear o que foi alterado em cada versão do documento figura como uma vantagem, uma vez que permite saber o que foi alterado, quem alterou e quando alterou. Estas informações auxiliam na resolução dos conflitos e permitem que se faça uma análise da evolução do documento em questão ao longo do tempo.

Este post abordou algumas das muitas vantagens oferecidas pelas ferramentas de controle de versão.

Vale lembrar que para usufruir de tais vantagens é preciso que estas ferramentas sejam utilizadas de maneira correta. Mas o que é usar o controle de versão de maneira correta? Algumas questões como o controle de acesso, layout do repositório, dentre outras devem ser abordadas com cuidado para que o uso do controle de versão não seja fonte de problemas no processo de desenvolvimento.

Buscaremos em futuros posts abordar estas e outras questões relacionadas às boas práticas a serem adotadas para um controle de versão eficiente.