Desenvolvimento de Sistemas pgina 1 Prof. Hugo Estevam Longo
Controle de Verso Introduo Muitos problemas de desenvolvimento de software so causados por falta de controle de verso. Faa uma avaliao rpida da situao da sua equipe de desenvolvimento: 1. Algum j sobrescreveu o cdigo de outra pessoa por acidente e acabou perdendo as alteraes? 2. Tem dificuldades em saber quais as alteraes efetuadas em um programa, quando foram feitas e quem fez? 3. Tem dificuldade em recuperar o cdigo de uma verso anterior que est em produo? 4. Tem problemas em manter variaes do sistema ao mesmo tempo?
Se alguma das perguntas acima teve um sim como resposta, ento sua equipe necessita urgentemente de um sistema para controle de verso! No h mais desculpa para no usar uma ferramenta assim. Atualmente, esto disponveis diversas opes, e as melhores so open source. Alm disso, h dois tipos de controle de verso que podem ser escolhidos: centralizado (Subversion e TFS, por exemplo) e distribudo (Exemplos: Mercurial e o Git). Este resumo pretende responder a algumas perguntas relacionadas com controle de verso e ajudar a se informar melhor e decidir baseada nas necessidades reais. 1. Para que serve um sistema de controle de verso? 2. Como funciona o controle de verso? 3. Quais as semelhanas e diferenas entre o centralizado e o distribudo? Para que Serve o Controle de Verso? O Controle de verso apoia o desenvolvimento de diversas maneiras: Histrico. Registra toda a evoluo do projeto, cada alterao sobre cada arquivo. Com essas informaes sabe-se quem fez o que, quando e onde. Alm disso, permite reconstruir uma reviso especfica do arquivo sempre que desejado; Colaborao. O controle de verso possibilita que vrios desenvolvedores trabalhem em paralelo sobre os mesmo arquivos sem que um sobrescreva o cdigo de outro, o que traria reaparecimento de defeitos e perda de funcionalidades; Variaes no Projeto. Mantm linhas diferentes de evoluo do mesmo projeto. Por exemplo, mantendo uma verso 1.0 enquanto a equipe prepara uma verso 2.0.
Enfim, controle de verso fundamental para o desenvolvimento de software. Todos os ambientes de desenvolvimento modernos, tais como o Visual Studio, Eclipse e NetBeans, j possuem plugins para integrao com algum sistema de controle de verso. Como Funciona o Controle de Verso? O controle de verso composto de duas partes: o repositrio e a rea de trabalho. O repositrio armazena todo o histrico de evoluo do projeto, registrando toda e qualquer alterao feita em cada item versionado. Processo de Desenvolvimento de Sistemas Desenvolvimento de Sistemas pgina 2 Prof. Hugo Estevam Longo O desenvolvedor no trabalha diretamente nos arquivos do repositrio. Ao invs disso, usa uma rea/cpia de trabalho que contm a cpia dos arquivos do projeto e que monitorada para identificar as mudanas realizadas. Essa rea individual e isolada das demais reas de trabalho.
Estrutura de um controle de verso composta por repositrio e rea de trabalho. A comunicao entre elas se d atravs de operaes de commit e update.
A sincronizao entre a rea de trabalho e o repositrio feita atravs dos comandos de commit e update. O commit envia um pacote contendo uma ou mais modificaes feitas na rea de trabalho (origem) ao repositrio (destino). O update faz o inverso, isto , envia as modificaes contidas no repositrio (origem) para a rea de trabalho (destino). Cada commit gera uma nova reviso no repositrio, contendo as modificaes feitas, data e autor. Uma reviso funciona como uma "foto" de todos os arquivos e diretrios em um determinado momento da evoluo do projeto. As "fotos" antigas so mantidas e podem ser recuperadas e analisadas sempre que desejado. O conjunto dessas revises justamente o histrico do projeto. Tanto o controle de verso centralizado quanto o distribudo possuem repositrios e reas de trabalho. A diferena est em como cada uma dessas partes est arranjada. Controle de Verso Centralizado O controle de verso centralizado segue a topologia em estrela, havendo apenas um nico repositrio central mas vrias cpias de trabalho, uma para cada desenvolvedor. A comunicao entre uma rea de trabalho e outra passa obrigatoriamente pelo repositrio central. Processo de Desenvolvimento de Sistemas Desenvolvimento de Sistemas pgina 3 Prof. Hugo Estevam Longo
No controle de verso centralizado h um nico repositrio e vrias cpias de trabalho que se comunicam apenas atravs do repositrio central. Controle de Verso Distribudo So vrios repositrios autnomos e independentes, um para cada desenvolvedor. Cada repositrio possui uma rea de trabalho acoplada e as operaes commit e update acontecem localmente entre os dois. Processo de Desenvolvimento de Sistemas Desenvolvimento de Sistemas pgina 4 Prof. Hugo Estevam Longo
No controle de verso distribudo cada desenvolvedor possui um repositrio prprio acoplado a uma rea de trabalho. A comunicao entre eles continua sendo atravs de commit e update.
Um repositrio pode se comunicar com qualquer outro atravs de duas operaes bsicas: pull epush: Pull (Puxar). Atualiza o repositrio local (destino) com todas as alteraes feitas em outro repositrio (origem). Push (Empurrar). Envia as alteraes do repositrio local (origem) para um outro repositrio (destino). Processo de Desenvolvimento de Sistemas Desenvolvimento de Sistemas pgina 5 Prof. Hugo Estevam Longo
Um repositrio recebe e envia revises com qualquer outro atravs de operaes pull e push sem a necessidade de uma topologia pr-definida.
A sincronizao entre os desenvolvedores acontece de repositrio a repositrio e no existe, em princpio, um repositrio mais importante que o outro, embora o papel de um repositrio central possa ser usado para convencionar o fluxo de trabalho. Resumo das Operaes Bsicas dos Controles de Verso Centralizado e Distribudo
Centralizado Distribudo Descrio checkout clone criao da cpia de trabalho/repositrio commit commit envia alteraes para o repositrio, criando uma reviso Processo de Desenvolvimento de Sistemas Desenvolvimento de Sistemas pgina 6 Prof. Hugo Estevam Longo update update atualiza a cpia/rea de trabalho em uma reviso pull importa revises feitas em outro repositrio push envia revises locais para outro repositrio Sincronizao de Mudanas Concorrentes Uma das responsabilidades do controle de verso possibilitar o trabalho paralelo e concorrente de vrios desenvolvedores sobre os mesmos arquivos, evitando que um sobrescreva o cdigo de outro, o que resultaria no reaparecimento de defeitos e perda de funcionalidades. Em parte, isto conseguido atravs da rea de trabalho, que fornece a impresso de que o desenvolvedor o nico dono de todo o projeto. Mas s a rea de trabalho no resolve todo o problema. Ainda necessrio um jeito de sincronizar os esforos dos membros da equipe. A sincronizao feita combinando-se revises concorrentes em uma nica resultante. Essa operao conhecida como merge (mesclagem) e, apesar de parecer complexa, acontece sem conflitos na maioria das vezes alis, essa a ideia. As sees a seguir mostraro como acontece a sincronizao do trabalho de dois desenvolvedores nos controles de verso centralizado e distribudo. Sincronizao no Controle de Verso Centralizado
(1) Duas cpias de trabalho so criadas a partir do comando checkout. As duas iniciam no mesmo estado.
Processo de Desenvolvimento de Sistemas Desenvolvimento de Sistemas pgina 7 Prof. Hugo Estevam Longo
(2) Os dois desenvolvedores executam modificaes nas suas cpias de trabalho, mas Aline publica antes no repositrio.
(3) Roberto tenta publicar suas alteraes, mas o controle de verso recusa justificando que as alteraes foram baseadas em arquivos desatualizados. No caso, um ou mais arquivos alterados por Roberto j haviam sido alterados por Aline antes.
Processo de Desenvolvimento de Sistemas Desenvolvimento de Sistemas pgina 8 Prof. Hugo Estevam Longo
(4) Na atualizao da cpia de trabalho, o controle de verso j mescla automaticamente as revises.
(5) Aps conferir se a atualizao e a mesclagem produziram o resultado desejado, Roberto envia as mudanas ao repositrio. Enquanto isso, Aline j trabalha em outra tarefa, executando novas alteraes.
Processo de Desenvolvimento de Sistemas Desenvolvimento de Sistemas pgina 9 Prof. Hugo Estevam Longo
(6) O commit de Aline pode ser aceito sem problema se nenhuma das revises que vieram depois da atualizao da cpia de trabalho tiver alterado os mesmos arquivos que Aline. uma situao possvel de acontecer, mesmo que no seja comum. Sincronizao no Controle de Verso Distribudo
(1) Roberto clona o repositrio de Aline. Agora, ambos partem do mesmo ponto.
Processo de Desenvolvimento de Sistemas Desenvolvimento de Sistemas pgina 10 Prof. Hugo Estevam Longo
(2) Aline e Roberto publicam suas alteraes nos seus respectivos repositrios, sem interferir no repositrio um do outro.
(3) Roberto sincroniza seu repositrio com as revises publicadas por Aline. Sua rea de trabalho no afetada pela sincronizao.
(4) A mesclagem entre as revises de Aline e Roberto feita explicitamente na rea de trabalho de Roberto atravs de um comando merge. Enquanto isso, Aline j gera outra reviso no seu repositrio. Processo de Desenvolvimento de Sistemas Desenvolvimento de Sistemas pgina 11 Prof. Hugo Estevam Longo
(5) Aps conferir se a mesclagem produziram o resultado desejado, Roberto envia as mudanas ao seu repositrio. Paralelamente, Aline publica mais uma vez no seu repositrio.
(6) Roberto envia suas revises ao repositrio de Aline, que as combina com o histrico de revises j existente. 5. Diferentes verses de projeto Muitos projetos precisam de variaes especficas. Um caso tpico para customizaes feitas para atender determinados clientes que precisam de adaptaes particulares. Outro caso comum a criao de um ramo para experimentaes no projeto, sem comprometer a linha principal de desenvolvimento. Processo de Desenvolvimento de Sistemas Desenvolvimento de Sistemas pgina 12 Prof. Hugo Estevam Longo
O controle de verso oferece funcionalidades que facilitam a coordenao de ramos diferentes de desenvolvimento em um mesmo projeto. Consideraes Finais Controle de verso resolve diversos problemas intrnsecos ao desenvolvimento de software. uma prtica de engenharia de software comprovadamente eficaz. Por isso, faz parte das exigncias para melhorias do processo de desenvolvimento de certificaes tais como CMMi, MPS-Br e SPICE. Existem vrias ferramentas disponveis para controle de verso. Nesta disciplina usaremos o controle de verso centralizado do Subversion. Para quem deseja usar o controle de verso em trabalhos pessoais e divulgao do seu conhecimento, pode utilizar o controle de verso distribudo GitHub.