SlideShare ist ein Scribd-Unternehmen logo
1 von 21
Downloaden Sie, um offline zu lesen
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
Quem?


Tiago M. Jorge
  Agile Coach, WebCo Internet
Ronaldo M. Ferraz
  Gerente de R&D, WebCo Internet
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.
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?
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.
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
Como fazíamos, fase 1

        Changes    Merges




         Merges    Changes




         Release
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
Como fazíamos, fase 2
  Trunk

       Changes    Changes   Changes

       Changes    Changes   Changes
  RC

             Merges         Merges



  Stable
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
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
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)
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
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)
Como fazemos atualmente
      Story #1

           Changes    Changes

                     Story #2

                     Changes      Changes
                                  Story #3

                                Changes       Changes



      Master

                                             Merges
      QA

                                             Merges
       Stable
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
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
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
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
Melhorias futuras



 Deploy contínuo e automatizado em QA
 Uso de tags assinados para garantia de versões
 releasable
Questões?




            ?

Weitere ähnliche Inhalte

Was ist angesagt?

Uma breve introdução de play framework
Uma breve introdução de play frameworkUma breve introdução de play framework
Uma breve introdução de play frameworkWende Mendes
 
Dapper - Developers-SP - Junho/2017
Dapper - Developers-SP - Junho/2017Dapper - Developers-SP - Junho/2017
Dapper - Developers-SP - Junho/2017Renato Groff
 
MiniCurso de Git e Github - UNIFG PIE
MiniCurso de Git e Github - UNIFG PIEMiniCurso de Git e Github - UNIFG PIE
MiniCurso de Git e Github - UNIFG PIECloves da Rocha
 
A Evolução do Front end
A Evolução do Front endA Evolução do Front end
A Evolução do Front endDouglas Matoso
 
controle versão de banco de dados
controle versão de banco de dadoscontrole versão de banco de dados
controle versão de banco de dadosDaniel Luiz da Silva
 
Arquitetura de Microserviços - Stone Tech Saturday - Março/2017
Arquitetura de Microserviços - Stone Tech Saturday - Março/2017Arquitetura de Microserviços - Stone Tech Saturday - Março/2017
Arquitetura de Microserviços - Stone Tech Saturday - Março/2017Renato Groff
 
Arquiteturas Serverless + Azure Functions - Semana FCI - Mackenzie - Outubro-...
Arquiteturas Serverless + Azure Functions - Semana FCI - Mackenzie - Outubro-...Arquiteturas Serverless + Azure Functions - Semana FCI - Mackenzie - Outubro-...
Arquiteturas Serverless + Azure Functions - Semana FCI - Mackenzie - Outubro-...Renato Groff
 
.NET Core 2.0, .NET Standard 2.0 e ASP.NET Core 2.0: uma visão geral
.NET Core 2.0, .NET Standard 2.0 e ASP.NET Core 2.0: uma visão geral.NET Core 2.0, .NET Standard 2.0 e ASP.NET Core 2.0: uma visão geral
.NET Core 2.0, .NET Standard 2.0 e ASP.NET Core 2.0: uma visão geralRenato Groff
 
Aplicações Web Realtime
Aplicações Web RealtimeAplicações Web Realtime
Aplicações Web RealtimeGabriel Gularte
 
Deixando de ser moleque com PHP
Deixando de ser moleque com PHPDeixando de ser moleque com PHP
Deixando de ser moleque com PHPVinícius Krolow
 
9 erros que desenvolvedores Node.js cometem
9 erros que desenvolvedores Node.js cometem9 erros que desenvolvedores Node.js cometem
9 erros que desenvolvedores Node.js cometemFernando Henriques
 
O novo ASP.NET - Stone Tech Saturday - Março/2017
O novo ASP.NET - Stone Tech Saturday - Março/2017O novo ASP.NET - Stone Tech Saturday - Março/2017
O novo ASP.NET - Stone Tech Saturday - Março/2017Renato Groff
 
Utilizando RabbitMQ com .NET Core e EasyNetQ
Utilizando RabbitMQ com .NET Core e EasyNetQUtilizando RabbitMQ com .NET Core e EasyNetQ
Utilizando RabbitMQ com .NET Core e EasyNetQRobson Rocha de Araújo
 
Integração Contínua com Hudson
Integração Contínua com HudsonIntegração Contínua com Hudson
Integração Contínua com HudsonLuis Reis
 

Was ist angesagt? (20)

Uma breve introdução de play framework
Uma breve introdução de play frameworkUma breve introdução de play framework
Uma breve introdução de play framework
 
Dapper - Developers-SP - Junho/2017
Dapper - Developers-SP - Junho/2017Dapper - Developers-SP - Junho/2017
Dapper - Developers-SP - Junho/2017
 
MiniCurso de Git e Github - UNIFG PIE
MiniCurso de Git e Github - UNIFG PIEMiniCurso de Git e Github - UNIFG PIE
MiniCurso de Git e Github - UNIFG PIE
 
A Evolução do Front end
A Evolução do Front endA Evolução do Front end
A Evolução do Front end
 
Magento: Mitos vs Vantagens
Magento: Mitos vs VantagensMagento: Mitos vs Vantagens
Magento: Mitos vs Vantagens
 
Boas práticas Magento 2
Boas práticas Magento 2Boas práticas Magento 2
Boas práticas Magento 2
 
Blazor #SnetTalks3
Blazor  #SnetTalks3Blazor  #SnetTalks3
Blazor #SnetTalks3
 
Web assembly
Web assemblyWeb assembly
Web assembly
 
controle versão de banco de dados
controle versão de banco de dadoscontrole versão de banco de dados
controle versão de banco de dados
 
Arquitetura de Microserviços - Stone Tech Saturday - Março/2017
Arquitetura de Microserviços - Stone Tech Saturday - Março/2017Arquitetura de Microserviços - Stone Tech Saturday - Março/2017
Arquitetura de Microserviços - Stone Tech Saturday - Março/2017
 
Arquiteturas Serverless + Azure Functions - Semana FCI - Mackenzie - Outubro-...
Arquiteturas Serverless + Azure Functions - Semana FCI - Mackenzie - Outubro-...Arquiteturas Serverless + Azure Functions - Semana FCI - Mackenzie - Outubro-...
Arquiteturas Serverless + Azure Functions - Semana FCI - Mackenzie - Outubro-...
 
.NET Core 2.0, .NET Standard 2.0 e ASP.NET Core 2.0: uma visão geral
.NET Core 2.0, .NET Standard 2.0 e ASP.NET Core 2.0: uma visão geral.NET Core 2.0, .NET Standard 2.0 e ASP.NET Core 2.0: uma visão geral
.NET Core 2.0, .NET Standard 2.0 e ASP.NET Core 2.0: uma visão geral
 
Curso de ReactJS
Curso de ReactJSCurso de ReactJS
Curso de ReactJS
 
Aplicações Web Realtime
Aplicações Web RealtimeAplicações Web Realtime
Aplicações Web Realtime
 
Deixando de ser moleque com PHP
Deixando de ser moleque com PHPDeixando de ser moleque com PHP
Deixando de ser moleque com PHP
 
9 erros que desenvolvedores Node.js cometem
9 erros que desenvolvedores Node.js cometem9 erros que desenvolvedores Node.js cometem
9 erros que desenvolvedores Node.js cometem
 
O novo ASP.NET - Stone Tech Saturday - Março/2017
O novo ASP.NET - Stone Tech Saturday - Março/2017O novo ASP.NET - Stone Tech Saturday - Março/2017
O novo ASP.NET - Stone Tech Saturday - Março/2017
 
Utilizando RabbitMQ com .NET Core e EasyNetQ
Utilizando RabbitMQ com .NET Core e EasyNetQUtilizando RabbitMQ com .NET Core e EasyNetQ
Utilizando RabbitMQ com .NET Core e EasyNetQ
 
Integração Contínua com Hudson
Integração Contínua com HudsonIntegração Contínua com Hudson
Integração Contínua com Hudson
 
Node js
Node jsNode js
Node js
 

Ähnlich wie Versionamento Ágil com Git

Docker, jenkins e gradle para tomar o controle de sua entrega
Docker, jenkins e gradle para tomar o controle de sua entregaDocker, jenkins e gradle para tomar o controle de sua entrega
Docker, jenkins e gradle para tomar o controle de sua entregaHumberto Streb
 
Os pecados mortais de escalabilidade em Drupal e seus efeitos nos negócios - ...
Os pecados mortais de escalabilidade em Drupal e seus efeitos nos negócios - ...Os pecados mortais de escalabilidade em Drupal e seus efeitos nos negócios - ...
Os pecados mortais de escalabilidade em Drupal e seus efeitos nos negócios - ...Taller Negócio Digitais
 
Rogue Snail Talk - Usando Git na Game Jam - WGJ
Rogue Snail Talk - Usando Git na Game Jam - WGJRogue Snail Talk - Usando Git na Game Jam - WGJ
Rogue Snail Talk - Usando Git na Game Jam - WGJNathália Cruz de Oliveira
 
Rogue Snail Talk - Usando Git na Game Jam - WGJ
Rogue Snail Talk - Usando Git na Game Jam - WGJRogue Snail Talk - Usando Git na Game Jam - WGJ
Rogue Snail Talk - Usando Git na Game Jam - WGJNathália Cruz de Oliveira
 
Migração SVN para GIT
Migração SVN para GITMigração SVN para GIT
Migração SVN para GITDenis Santos
 
Automação de testes para equipes agile
Automação de testes para equipes agileAutomação de testes para equipes agile
Automação de testes para equipes agileAlini Rebonatto
 
Workshop de Introdução ao Git GitHub
Workshop de Introdução ao Git GitHubWorkshop de Introdução ao Git GitHub
Workshop de Introdução ao Git GitHubGilson Junior
 
Git e boas praticas!
Git e boas praticas!Git e boas praticas!
Git e boas praticas!Vitor Silva
 
genesis - Acelerando o desenvolvimento de aplicações desktop
genesis - Acelerando o desenvolvimento de aplicações desktopgenesis - Acelerando o desenvolvimento de aplicações desktop
genesis - Acelerando o desenvolvimento de aplicações desktopMichel Graciano
 
TDC2016POA | Trilha Infraestrutura - Produção nove vezes ao dia - Como um tim...
TDC2016POA | Trilha Infraestrutura - Produção nove vezes ao dia - Como um tim...TDC2016POA | Trilha Infraestrutura - Produção nove vezes ao dia - Como um tim...
TDC2016POA | Trilha Infraestrutura - Produção nove vezes ao dia - Como um tim...tdc-globalcode
 
Git github tortoise git
Git github tortoise gitGit github tortoise git
Git github tortoise gitmaxrosan
 
Tdc Future 2021 - simples soluções grandes resultados - Márcio Rogério Nizzola
Tdc Future 2021 - simples soluções grandes resultados - Márcio Rogério NizzolaTdc Future 2021 - simples soluções grandes resultados - Márcio Rogério Nizzola
Tdc Future 2021 - simples soluções grandes resultados - Márcio Rogério NizzolaDextra Sistemas / Etec Itu
 
Gerência de configuração ágil
Gerência de configuração ágilGerência de configuração ágil
Gerência de configuração ágilClaudia Melo
 
Mini curso gerenciamento de configuração e mudança com GIT + Eclipse - I...
Mini curso gerenciamento de configuração e mudança com GIT + Eclipse  -  I...Mini curso gerenciamento de configuração e mudança com GIT + Eclipse  -  I...
Mini curso gerenciamento de configuração e mudança com GIT + Eclipse - I...Jadson Santos
 
Usando Git na Unity - Gaming For All 2021
Usando Git na Unity - Gaming For All 2021Usando Git na Unity - Gaming For All 2021
Usando Git na Unity - Gaming For All 2021Erik Cruz
 
Como DDD e Strategic Design estão nos ajudando a modernizar um Legado
Como DDD e Strategic Design estão nos ajudando a modernizar um LegadoComo DDD e Strategic Design estão nos ajudando a modernizar um Legado
Como DDD e Strategic Design estão nos ajudando a modernizar um LegadoLuiz Costa
 

Ähnlich wie Versionamento Ágil com Git (20)

Branches-Intro
Branches-IntroBranches-Intro
Branches-Intro
 
Docker, jenkins e gradle para tomar o controle de sua entrega
Docker, jenkins e gradle para tomar o controle de sua entregaDocker, jenkins e gradle para tomar o controle de sua entrega
Docker, jenkins e gradle para tomar o controle de sua entrega
 
Os pecados mortais de escalabilidade em Drupal e seus efeitos nos negócios - ...
Os pecados mortais de escalabilidade em Drupal e seus efeitos nos negócios - ...Os pecados mortais de escalabilidade em Drupal e seus efeitos nos negócios - ...
Os pecados mortais de escalabilidade em Drupal e seus efeitos nos negócios - ...
 
Rogue Snail Talk - Usando Git na Game Jam - WGJ
Rogue Snail Talk - Usando Git na Game Jam - WGJRogue Snail Talk - Usando Git na Game Jam - WGJ
Rogue Snail Talk - Usando Git na Game Jam - WGJ
 
Go git - Presentation @Navita
Go git - Presentation @NavitaGo git - Presentation @Navita
Go git - Presentation @Navita
 
Rogue Snail Talk - Usando Git na Game Jam - WGJ
Rogue Snail Talk - Usando Git na Game Jam - WGJRogue Snail Talk - Usando Git na Game Jam - WGJ
Rogue Snail Talk - Usando Git na Game Jam - WGJ
 
Migração SVN para GIT
Migração SVN para GITMigração SVN para GIT
Migração SVN para GIT
 
Automação de testes para equipes agile
Automação de testes para equipes agileAutomação de testes para equipes agile
Automação de testes para equipes agile
 
Workshop de Introdução ao Git GitHub
Workshop de Introdução ao Git GitHubWorkshop de Introdução ao Git GitHub
Workshop de Introdução ao Git GitHub
 
Git e boas praticas!
Git e boas praticas!Git e boas praticas!
Git e boas praticas!
 
Escalando apps com React e Type Script e SOLID
Escalando apps com React e Type Script e SOLIDEscalando apps com React e Type Script e SOLID
Escalando apps com React e Type Script e SOLID
 
genesis - Acelerando o desenvolvimento de aplicações desktop
genesis - Acelerando o desenvolvimento de aplicações desktopgenesis - Acelerando o desenvolvimento de aplicações desktop
genesis - Acelerando o desenvolvimento de aplicações desktop
 
TDC2016POA | Trilha Infraestrutura - Produção nove vezes ao dia - Como um tim...
TDC2016POA | Trilha Infraestrutura - Produção nove vezes ao dia - Como um tim...TDC2016POA | Trilha Infraestrutura - Produção nove vezes ao dia - Como um tim...
TDC2016POA | Trilha Infraestrutura - Produção nove vezes ao dia - Como um tim...
 
Git github tortoise git
Git github tortoise gitGit github tortoise git
Git github tortoise git
 
Tdc Future 2021 - simples soluções grandes resultados - Márcio Rogério Nizzola
Tdc Future 2021 - simples soluções grandes resultados - Márcio Rogério NizzolaTdc Future 2021 - simples soluções grandes resultados - Márcio Rogério Nizzola
Tdc Future 2021 - simples soluções grandes resultados - Márcio Rogério Nizzola
 
Gerência de configuração ágil
Gerência de configuração ágilGerência de configuração ágil
Gerência de configuração ágil
 
Mini curso gerenciamento de configuração e mudança com GIT + Eclipse - I...
Mini curso gerenciamento de configuração e mudança com GIT + Eclipse  -  I...Mini curso gerenciamento de configuração e mudança com GIT + Eclipse  -  I...
Mini curso gerenciamento de configuração e mudança com GIT + Eclipse - I...
 
Usando Git na Unity - Gaming For All 2021
Usando Git na Unity - Gaming For All 2021Usando Git na Unity - Gaming For All 2021
Usando Git na Unity - Gaming For All 2021
 
Apresentação git
Apresentação gitApresentação git
Apresentação git
 
Como DDD e Strategic Design estão nos ajudando a modernizar um Legado
Como DDD e Strategic Design estão nos ajudando a modernizar um LegadoComo DDD e Strategic Design estão nos ajudando a modernizar um Legado
Como DDD e Strategic Design estão nos ajudando a modernizar um Legado
 

Mehr von elliando dias

Clojurescript slides
Clojurescript slidesClojurescript slides
Clojurescript slideselliando dias
 
Why you should be excited about ClojureScript
Why you should be excited about ClojureScriptWhy you should be excited about ClojureScript
Why you should be excited about ClojureScriptelliando dias
 
Functional Programming with Immutable Data Structures
Functional Programming with Immutable Data StructuresFunctional Programming with Immutable Data Structures
Functional Programming with Immutable Data Structureselliando dias
 
Nomenclatura e peças de container
Nomenclatura  e peças de containerNomenclatura  e peças de container
Nomenclatura e peças de containerelliando dias
 
Polyglot and Poly-paradigm Programming for Better Agility
Polyglot and Poly-paradigm Programming for Better AgilityPolyglot and Poly-paradigm Programming for Better Agility
Polyglot and Poly-paradigm Programming for Better Agilityelliando dias
 
Javascript Libraries
Javascript LibrariesJavascript Libraries
Javascript Librarieselliando dias
 
How to Make an Eight Bit Computer and Save the World!
How to Make an Eight Bit Computer and Save the World!How to Make an Eight Bit Computer and Save the World!
How to Make an Eight Bit Computer and Save the World!elliando dias
 
A Practical Guide to Connecting Hardware to the Web
A Practical Guide to Connecting Hardware to the WebA Practical Guide to Connecting Hardware to the Web
A Practical Guide to Connecting Hardware to the Webelliando dias
 
Introdução ao Arduino
Introdução ao ArduinoIntrodução ao Arduino
Introdução ao Arduinoelliando dias
 
Incanter Data Sorcery
Incanter Data SorceryIncanter Data Sorcery
Incanter Data Sorceryelliando dias
 
Fab.in.a.box - Fab Academy: Machine Design
Fab.in.a.box - Fab Academy: Machine DesignFab.in.a.box - Fab Academy: Machine Design
Fab.in.a.box - Fab Academy: Machine Designelliando dias
 
The Digital Revolution: Machines that makes
The Digital Revolution: Machines that makesThe Digital Revolution: Machines that makes
The Digital Revolution: Machines that makeselliando dias
 
Hadoop - Simple. Scalable.
Hadoop - Simple. Scalable.Hadoop - Simple. Scalable.
Hadoop - Simple. Scalable.elliando dias
 
Hadoop and Hive Development at Facebook
Hadoop and Hive Development at FacebookHadoop and Hive Development at Facebook
Hadoop and Hive Development at Facebookelliando dias
 
Multi-core Parallelization in Clojure - a Case Study
Multi-core Parallelization in Clojure - a Case StudyMulti-core Parallelization in Clojure - a Case Study
Multi-core Parallelization in Clojure - a Case Studyelliando dias
 

Mehr von elliando dias (20)

Clojurescript slides
Clojurescript slidesClojurescript slides
Clojurescript slides
 
Why you should be excited about ClojureScript
Why you should be excited about ClojureScriptWhy you should be excited about ClojureScript
Why you should be excited about ClojureScript
 
Functional Programming with Immutable Data Structures
Functional Programming with Immutable Data StructuresFunctional Programming with Immutable Data Structures
Functional Programming with Immutable Data Structures
 
Nomenclatura e peças de container
Nomenclatura  e peças de containerNomenclatura  e peças de container
Nomenclatura e peças de container
 
Geometria Projetiva
Geometria ProjetivaGeometria Projetiva
Geometria Projetiva
 
Polyglot and Poly-paradigm Programming for Better Agility
Polyglot and Poly-paradigm Programming for Better AgilityPolyglot and Poly-paradigm Programming for Better Agility
Polyglot and Poly-paradigm Programming for Better Agility
 
Javascript Libraries
Javascript LibrariesJavascript Libraries
Javascript Libraries
 
How to Make an Eight Bit Computer and Save the World!
How to Make an Eight Bit Computer and Save the World!How to Make an Eight Bit Computer and Save the World!
How to Make an Eight Bit Computer and Save the World!
 
Ragel talk
Ragel talkRagel talk
Ragel talk
 
A Practical Guide to Connecting Hardware to the Web
A Practical Guide to Connecting Hardware to the WebA Practical Guide to Connecting Hardware to the Web
A Practical Guide to Connecting Hardware to the Web
 
Introdução ao Arduino
Introdução ao ArduinoIntrodução ao Arduino
Introdução ao Arduino
 
Minicurso arduino
Minicurso arduinoMinicurso arduino
Minicurso arduino
 
Incanter Data Sorcery
Incanter Data SorceryIncanter Data Sorcery
Incanter Data Sorcery
 
Rango
RangoRango
Rango
 
Fab.in.a.box - Fab Academy: Machine Design
Fab.in.a.box - Fab Academy: Machine DesignFab.in.a.box - Fab Academy: Machine Design
Fab.in.a.box - Fab Academy: Machine Design
 
The Digital Revolution: Machines that makes
The Digital Revolution: Machines that makesThe Digital Revolution: Machines that makes
The Digital Revolution: Machines that makes
 
Hadoop + Clojure
Hadoop + ClojureHadoop + Clojure
Hadoop + Clojure
 
Hadoop - Simple. Scalable.
Hadoop - Simple. Scalable.Hadoop - Simple. Scalable.
Hadoop - Simple. Scalable.
 
Hadoop and Hive Development at Facebook
Hadoop and Hive Development at FacebookHadoop and Hive Development at Facebook
Hadoop and Hive Development at Facebook
 
Multi-core Parallelization in Clojure - a Case Study
Multi-core Parallelization in Clojure - a Case StudyMulti-core Parallelization in Clojure - a Case Study
Multi-core Parallelization in Clojure - a Case Study
 

Versionamento Ágil com Git

  • 1. 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
  • 2. Quem? Tiago M. Jorge Agile Coach, WebCo Internet Ronaldo M. Ferraz Gerente de R&D, WebCo Internet
  • 3. 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.
  • 4. 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?
  • 5. 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.
  • 6. 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
  • 7. Como fazíamos, fase 1 Changes Merges Merges Changes Release
  • 8. 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
  • 9. Como fazíamos, fase 2 Trunk Changes Changes Changes Changes Changes Changes RC Merges Merges Stable
  • 10. 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
  • 11. 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
  • 12. 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)
  • 13. 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
  • 14. 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)
  • 15. Como fazemos atualmente Story #1 Changes Changes Story #2 Changes Changes Story #3 Changes Changes Master Merges QA Merges Stable
  • 16. 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
  • 17. 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
  • 18. 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
  • 19. 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
  • 20. Melhorias futuras Deploy contínuo e automatizado em QA Uso de tags assinados para garantia de versões releasable