Branch & Merge Claudio Leite Sobre http://blog.lambda3.com.br/ @claudiobernardo Agenda Conceitos Básicos Demonstração 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 • • Branch == Isolar / Isolamento Estratégias Comuns: – Implementando features diferentes em branches diferentes com a mesma base de código – Mantém diferentes releases em branches diferentes – – – – • • 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 R1.1 R1 FI for Release FI for Release Main R2 R2.1 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) C1 Produção Test B C2 B Test Produção Test Bugs C1 B C3 C2 RI Test C4 B Produção RI Test RI C5 RI C6 Produção Test RI Pros & Cons Pros : • 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) B B RI Branch por Qualidade (Safe Keeping) B B RI B B Bugs no Branch de QA Rx RI L1 B RI L1 BUG B L2 FI RI FI B FI RI RI Bugs no Branch de Produção RI RI Bug L-QA2 L-QA3 L-QA1 B RI FI RI L-QA2 B FI RI L-QA4 FI B Release 1 FI Release 2 FI Release 3 RI L-QA5 Pros & Cons Pros : • 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 B FI FI FI FI FI FI B Bug RI RI RI B FI FI FI Bug FI FI FI B Pros & Cons Pros : • 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 Demonstração BRANCH POR FEATURE VS2012 Obrigado !