Post on 18-Apr-2015
Branch & MergeClaudio Leite
Sobre
http://blog.lambda3.com.br/
@claudiobernardo
Agenda
Conceitos
Básicos
Demonstração
O que estratégias de Branch
tentam resolver ?
Estratégias de Branch:
Por Release
Estratégias de Branch:
Por QualidadeEstratégia
s de Branch:
Por Feature
Cenário
“Uma empresa de médio porte está em franco crescimento, aproveitando oportunidades do mercado. Suas aplicações estão se tornando mais complexas e o time de desenvolvedores está crescendo. Nos últimos anos, a empresa tem sofrido com uma demanda crescente por suporte, devido constantes falhas no software em produção. A qualidade do software gerado pelos times é sofrível e essa percepção tem crescido no mercado. A empresa espera continuar crescendo, mas precisa corrigir e evitar novos problemas com a gestão de seu processo de desenvolvimento de software. Recentemente, a empresa ouviu falar sobre as novas tendências no desenvolvimento ágil e os benefícios da abordagem para Modern Apps.”
CONCEITOS BÁSICOS
Controlador de Versão• É um repositório que contém os arquivos necessários para o
desenvolvimento do seu projeto• Mantém Controle sobre quais mudanças ocorreram:
• Quem ?• O que ?• Quando ?• Porque ?
• É um dos princípios básicos do ciclo de desenvolvimento de software e que ajuda para que os desenvolvedores trabalhem colaborativamente
• Usa conceitos básicos como check-out, check-in, get latest, labeling ...
Branch• Branch permite que seja realizado desenvolvimento em paralelo
– Implementando features diferentes em branches diferentes com a mesma base de código
– Mantém diferentes releases em branches diferentes
• Branch == Isolar / Isolamento• Estratégias Comuns:
– Branch por Release– Branch por Feature– Branch por Time– Branch por Qualidade
• Regra Básica: NÃO CRIE BRANCH! Apenas quando necessário (KISS)• Branch não é Label!
Merge• Merge é uma operação de reconciliação de
código.• Possibilidade de Merge automático• Merge permite que você passe as mudanças de
um branch para o outro– Forward Integration– Reverse Integragion Main
R1
R1.1
R2
R2.1
FI for ReleaseFI for Release
O QUE BRANCH TENTA RESOLVER ?
O que Branch Tenta Resolver ?
• Release Code When it is Ready
• Independent Construction of Features
• Suspension of Coding
• Know what code is Released
• Quando o código de Release está Pronto• Construção Independente de Features• Suspensão de Código – Code Freezen• Saber Qual Código foi liberado para Release
BRANCH POR RELEASE
Branch por Release (Staircase)
R1 B
R2 B
R3
Test ProduçãoC1
C2 Test Produção
Test
Bugs
R1 B
R2 B
R3
Test ProduçãoRIC1 C3
C2 Test Produção
Test
C4 RI
RI C5 RI
C6 RI
?
?
Pros & ConsPros :• Modelo mais simples de
ser usado• Modelo mais simples para
manter uma única versão• Mesmo processo para
hotfix ou acertos da release
• Menor gerência de Branches
Cons :• Não é muito flexível quanto
os outros padrões• Quanto mais release ativos,
mais complicado realizar FI• Necessidade de multiplos
ambientes de testes• Não suporta desenvolvimento
em paralelo• Necessidade de recriação de
builds para cada release
BRANCH POR QUALIDADE
Branch por Qualidade (Basic Plan)
Dev
QA
Prod
B
B RI
Branch por Qualidade (Safe Keeping)main
test
prod
B
B RI
B B
Safe Keeping R1
Safe Keeping R2
Bugs no Branch de QA
dev
QA
Prod
B
B RI
FI
L1BUG B
HF
L1
RI
FI
L2
RI
FI
Rx
RI RI
Bugs no Branch de Produção
dev
QA
Prod
B
B RI
FI
L-QA1
Bug
B
HF
RI
FI
RI
FIRI
FI
L-QA2L-QA3
L-QA4
L-QA5
RI
Release 1 Release 2 Release 3
RI
FI
L-QA2
Pros & ConsPros :• Permite maior
Flexibilidade• Facilidade para
trabalhar com multiplos Branches
Cons :• Dependendo da
estrutura elaborada pode ser muito complexa
• Requer uma pessoa dedica para gerenciar sua estrutura e compilação
• Sem documentação, você pode ser perder e não saber mais onde está o seu código.
BRANCH POR FEATURE
Branch por Feature
RI
RI
RI
feature1
feature 2
feature 3
FIFIB FI
mainFI FI FI
feature 4
B
Bug
RI
RI
RI
feature1
feature 2
feature 3
FIFIB FI
mainFI FI FI
feature 4
BBug
Pros & ConsPros :• Separa o desenvolvimento
das features• Permite uma flexibilidade
para escolher o que vai no seu release
• Facilita o debug (problema em uma feature não afeta outra)
• Ajuda no trabalho com features que dependem de um tempo maior de desenvolvimento
Cons :• Pode ficar muito complicado • Os times responsáveis pelas
features devem sempre lembrar de sincronizar com o Branch de DEV
• Pode complicar um pouco a vida de desenvolvedores que estão trabalhando em mais de uma feature
• Exige pelo menos um ambiente de testes por cada feature
• As vezes pode ser necessário mais de um Branch de Integração
BRANCH POR FEATURE VS2012 Demonstração
Obrigado !