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