Sobes.tech
Middle

Wat is het verschil tussen Trunk-Based Development en Feature Branching?

sobes.tech AI

Antwoord van AI

Criteria Trunk-gebaseerde ontwikkeling (TBD) Feature Branching (FB)
Hoofdtak Eén hoofdtak (trunk/main/master) Meerdere langdurige takken (develop, release, master)
Frequentie van samenvoegingen Zeer vaak (minimaal één keer per dag) Zelden (na voltooiing van een functie)
Grootte van functietakken Zeer kortlevend (van enkele minuten tot uren) Langdurig (van dagen tot weken)
Integratie Continue integratie (CI) is essentieel Integratie gebeurt minder vaak, kan complexer zijn
Risico op conflicten Minder grote conflicten, maar meer kleine en frequente Meer grote conflicten bij het samenvoegen van grote takken
Tijd tot productie Snel en frequent (continue levering) Langzamer en minder frequent
Testvereisten Hoog niveau van automatisering van tests Tests kunnen later in de cyclus worden uitgevoerd
Teamgrootte Beter geschikt voor kleine en middelgrote teams, schaalbaar met discipline Geschikt voor grote teams

Trunk-gebaseerde ontwikkeling:

  • Focus op frequente integratie van kleine wijzigingen direct in de hoofdtak.
  • Vereist strikte discipline, geautomatiseerde tests en feature-flagging voor het beheren van onvoltooide functies.
  • Vermindert risico's verbonden aan grote merges.

Feature Branching:

  • Elke functie wordt ontwikkeld in een aparte tak.
  • Samenvoegen gebeurt alleen na voltooiing van de functie.
  • Kan leiden tot "verdrinking" van wijzigingen en complexe conflicten bij het samenvoegen als takken lang leven.

Voorbeeld code voor TBD (vereenvoudigd):

// Ontwikkeling wordt direct gedaan in main/trunk
public class FeatureA {
    public void doStuff() {
        // Code van functie A
    }
}

// Een andere ontwikkelaar commit bijna gelijktijdig in main/trunk
public class FeatureB {
    public void doOtherStuff() {
        // Code van functie B
    }
}

Voorbeeld code voor FB (vereenvoudigd):

// Ontwikkelaar 1 werkt in tak feature/A
// git checkout -b feature/A develop
public class FeatureA {
    public void doStuff() {
        // Code van functie A
    }
}

// Ontwikkelaar 2 werkt in tak feature/B
// git checkout -b feature/B develop
public class FeatureB {
    public void doOtherStuff() {
        // Code van functie B
    }
}

// Na voltooiing van functie A, wordt tak samengevoegd in develop
// git checkout develop
// git merge feature/A

// Na voltooiing van functie B, wordt tak samengevoegd in develop
// git checkout develop
// git merge feature/B // Mogelijke conflicten met code van feature/A