versionamento Ágil com git

21
Versionamento Ágil com Git Como paramos de nos preocupar e aprendemos a amar versionamento ágil Brazil Scrum Gathering São Paulo, 13 de Maio de 2009

Upload: elliando-dias

Post on 26-Jun-2015

1.157 views

Category:

Technology


2 download

DESCRIPTION

Como paramos de nos preocupar eaprendemos a amar versionamento ágil

TRANSCRIPT

Page 1: Versionamento Ágil com Git

Versionamento Ágil com GitComo paramos de nos preocupar e aprendemos a amar versionamento ágil

Brazil Scrum GatheringSão Paulo, 13 de Maio de 2009

Page 2: Versionamento Ágil com Git

Quem?

Tiago M. Jorge

Agile Coach, WebCo Internet

Ronaldo M. Ferraz

Gerente de R&D, WebCo Internet

Page 3: Versionamento Ágil com Git

Por quê? *

Uma dificuldade básica em projetos ágeis é decidir quando e como integrar uma estória.

Se você separar as estórias, pode ter problemas ao integrar depois.

Se não separar, pode ter problemas em tirar uma estória que não possa entrar ao final do sprint.

Em todo caso, você também quer velocidade máxima de desenvolvimento.

Page 4: Versionamento Ágil com Git

Por quê?

Ferramentas tradicionais oferecem pouco suporte a cenários mais sofisticados de versionamento.

Branching e merging geralmente são trabalhosos e pouco confiáveis.

Como, então, suportar um processo ágil de desenvolvimento que, ao mesmo tempo, permita os benefícios de integração contínua e reduza conflitos?

Page 5: Versionamento Ágil com Git

Por quê? *

Agile Manifesto diz:Individuals and interactions over processes and tools

E também diz:That is, while there is value in the items on the right, we value the items on the left more.

Em outras palavras, processos que apóiam agilidade podem, e devem, ser considerados.

Page 6: Versionamento Ágil com Git

Agenda *

Como fazíamos versionamento

O problema dos processos tradicionais

Vantagens de branches separados por estórias

Como o Git se encaixa no processo

Como fazemos versionamento ágil

Situacões encontradas

Desvantagens do processo

Melhorias futuras

Page 7: Versionamento Ágil com Git

Como fazíamos, fase 1

Changes Merges

ChangesMerges

Release

Page 8: Versionamento Ágil com Git

Como fazíamos, fase 1

Subversion

Desenvolvimento direto no trunk

Conflitos diários, vence o primeiro que fizer o commit

Branch estável usando tags

Histórico linear mas sem especificidade

Page 9: Versionamento Ágil com Git

Como fazíamos, fase 2

Trunk

RC

Stable

Changes Changes

Changes Changes

Merges Merges

Changes

Changes

Page 10: Versionamento Ágil com Git

Como fazíamos, fase 2

Git

Um branch para o desenvolvimento primário

Branches ocasionais para desenvolvimento secundário

Dois branches estáveis (release candidate, stable) com maior controle

Redução de conflitos

Histórico linear com mais especificidade

Page 11: Versionamento Ágil com Git

Problemas com o tradicional *

Processos

Um branch único:

Favorece conflitos repetidos e freqüentes quebras do build

Atrapalha o desenvolvimento paralelo entre times

Atrapalha o desenvolvimento paralelo de estórias

Não suporta uma code base continuamente releasable

Page 12: Versionamento Ágil com Git

Problemas com o tradicional

Ferramentas

CVS não é realmente um RCS

Subversion

Branching é pesado (cópia do branch original)

Merging é limitado e trabalhoso

Comerciais

Geralmente bem limitados (vide locking strategies, por exemplo)

Page 13: Versionamento Ágil com Git

Branches separados (prós) *

Paralelismo no desenvolvimento“Não temos uma equipe de seis pessoas, e sim três equipes de duas.”

Granularidade em releases (depende ativamente da granularidade das estórias)

Histórico impoluto e correto de desenvolvimento

Fácil identificação da proveniência de bugs

Page 14: Versionamento Ágil com Git

Como o Git se encaixa

Branches são essencialmente grátis; trabalho em pequenas unidades

Merging extremamente poderoso (por padrão, 3-way recursive; podendo resolver múltiplos branches simultaneamente)

Versionamento distribuído (commits locais, todo desenvolvedor tem o repositório inteiro, desenvolvimento ubíquo)

Page 15: Versionamento Ágil com Git

Como fazemos atualmenteStory #1

Changes Changes

Story #2

Master

Changes Changes

Story #3

Changes Changes

Merges

Stable

QA

Merges

Page 16: Versionamento Ágil com Git

Como fazemos atualmente

Git

Um branch por estória, derivado do branch lógico mais próximo

Um branch para integração contínua (master) e um branch stable, com a versão do código que está em produção

Integração de estórias após o done do time

Integração contínua síncrona para a estória e assíncrona para o branch master

Page 17: Versionamento Ágil com Git

Como fazemos atualmente

Tags regulares para QA baseados no master

Tags lineares para deploy

Histórico absoluto de desenvolvimento e produção de features

Controle granular do que é releasable

Page 18: Versionamento Ágil com Git

Situações encontradas *

Positivas

Branch permanente para aumento de testes

Migração paralela para o Rails 2.3

Remoção de estórias incompletas

Negativas

Desenvolvimento de um feature distante do dia-a-dia depende de rebases constantes

Page 19: Versionamento Ágil com Git

Desvantagens do processo *

Curva de aprendizado mais íngreme (tanto do processo quanto do Git)

Depende de estórias pequenas

Funciona melhor com estórias auto-contidas

Integração final acontece menos vezes dentro do sprint

Page 20: Versionamento Ágil com Git

Melhorias futuras

Deploy contínuo e automatizado em QA

Uso de tags assinados para garantia de versões releasable

Page 21: Versionamento Ágil com Git

Questões?

?