Sobes.tech
Middle

Quais são as diferenças entre as abordagens de Desenvolvimento Baseado em Tronco e Ramificação de Funcionalidades?

sobes.tech IA

Resposta da IA

Critério Desenvolvimento Baseado em Trunk (TBD) Ramificação de Funcionalidades (FB)
Rama principal Uma rama principal (trunk/main/master) Várias ramas de longa duração (develop, release, master)
Frequência de fusões Muito frequente (pelo menos uma vez por dia) Rara (após a conclusão de uma funcionalidade)
Tamanho das ramas de funcionalidades Muito curtas (de minutos a horas) De longa duração (dias a semanas)
Integração Integração contínua (CI) é fundamental A integração ocorre com menos frequência, pode ser mais complexa
Risco de conflitos Menos conflitos grandes, mas mais pequenos e frequentes Mais conflitos grandes ao fundir ramas grandes
Tempo de lançamento em produção Rápido e frequente (entrega contínua) Mais lento e menos frequente
Requisitos de testes Alto nível de automação de testes Os testes podem ser realizados mais tarde no ciclo
Tamanho da equipa Melhor para equipas pequenas e médias, mas escalável com disciplina Adequado para equipas grandes

Desenvolvimento Baseado em Trunk:

  • Foco na integração frequente de pequenas mudanças diretamente na rama principal.
  • Requer disciplina rigorosa, testes automatizados e flags de funcionalidades para gerir lançamentos de funcionalidades incompletas.
  • Reduz os riscos associados a fusões grandes.

Ramificação de Funcionalidades:

  • Cada funcionalidade é desenvolvida numa rama separada.
  • A fusão só ocorre após a conclusão da funcionalidade.
  • Pode levar a "afogamento" de mudanças e conflitos complexos ao fundir se as ramas viverem muito tempo.

Exemplo de código para TBD (simplificado):

// O desenvolvimento é feito diretamente em main/trunk
public class FeatureA {
    public void doStuff() {
        // Código da funcionalidade A
    }
}

// Outro desenvolvedor faz commit em main/trunk quase ao mesmo tempo
public class FeatureB {
    public void doOtherStuff() {
        // Código da funcionalidade B
    }
}

Exemplo de código para FB (simplificado):

// O desenvolvedor 1 trabalha na rama feature/A
// git checkout -b feature/A develop
public class FeatureA {
    public void doStuff() {
        // Código da funcionalidade A
    }
}

// O desenvolvedor 2 trabalha na rama feature/B
// git checkout -b feature/B develop
public class FeatureB {
    public void doOtherStuff() {
        // Código da funcionalidade B
    }
}

// Após a conclusão da funcionalidade A, a rama é fundida em develop
// git checkout develop
// git merge feature/A

// Após a conclusão da funcionalidade B, a rama é fundida em develop
// git checkout develop
// git merge feature/B // Podem ocorrer conflitos com o código de feature/A