Trunk-based development
Innehållsförteckning
Vad är trunk-based development?
Trunk-based development (TBD) är en strategi för programvaruutveckling där ingenjörer oftare sammanfogar mindre ändringar i huvudkodbasen och arbetar utifrån trunk-kopian i stället för att arbeta med långlivade feature branches. Denna utvecklingsmodell används ofta som en del av ett arbetsflöde för utveckling med kontinuerlig integration.
Varför använda trunk-based development
Med många ingenjörer som arbetar i samma kodbas är det viktigt att ha en strategi för källkontroll och hur individer arbetar tillsammans. För att undvika att överskrida varandras ändringar skapar ingenjörerna sina egna kopior av kodbasen, så kallade grenar. I analogi med ett träd kallas masterkopian ibland för huvudlinjen eller stammen. Processen att införliva ändringarna i en individs kopia i den huvudsakliga huvudstammen kallas sammanslagning.
För att förstå trunk-based development är det bra att först titta på den alternativa strategin, feature branch development.
I feature branch development sammanfogar enskilda programutvecklare eller team av ingenjörer inte sin nya gren förrän en funktion är klar, och ibland arbetar de i veckor eller månader åt gången på en separat kopia.
Källa: Optimizely Optimizely
Den här långa tidsperioden kan göra det svårt att sammanfoga eftersom trunk- eller mastergrenen sannolikt har ändrats på grund av att andra ingenjörer har sammanfogat sina kodändringar och versionshanteringen blir svår. Denna feature branch kan leda till en lång kodgranskningsprocess när man vill skapa en release-gren som ska distribueras, vilket ofta resulterar i att många olika pull requests måste analyseras för att lösa sammanfogningskonflikter.
Fördelar med trunk-based development
Trunk-based development innebär en mer kontinuerlig leverans av mjukvaruutveckling, och grenarna är kortlivade och slås samman så ofta som möjligt. Grenarna är mindre eftersom de ofta bara innehåller en del av en feature. Dessa kortlivade utvecklingsgrenar gör sammanslagningsprocessen enklare eftersom det finns mindre tid för avvikelser mellan huvudstammen och grenkopiorna.
Källa: Optimizely Optimizely
Trunk-based development är alltså en metod för att snabbt släppa nya funktioner och små ändringar och samtidigt undvika långdragna buggfixar och "merge hell". Det är en alltmer populär devops-metod bland agila utvecklingsteam och kombineras ofta med feature flags eller feature toggles för att säkerställa att alla nya funktioner kan rullas tillbaka snabbt och enkelt om några buggar upptäcks.
Trunk-based development och feature flags
Att använda sig av feature flags (som Martin Fowler var en av pionjärerna bakom), eller att förpacka nya funktioner i kod som kan slås på och av på distans, är en vanlig utvecklingsprocess som programvaruingenjörer använder sig av för att implementera trunk-based development och samtidigt minska risken för att införa buggar i koden.
Eftersom trunk-based development innebär att man arbetar i en enda branch i produktionsmiljön ger feature flags ett sätt att införa nya funktioner och ändringar i koden på ett kontrollerat sätt, och gör det snabbt möjligt att stänga av dem om några buggar upptäcks.
Feature flags kan också användas för att långsamt rulla ut funktioner till en liten del av projektets användarbas i stället för att ha en stor lansering, vilket bidrar till att begränsa sprängningsradien för potentiellt buggig källkod.
Trunk-based development och Optimizely Feature Experimentation
Optimizely Feature Experimentation erbjuder ett komplett utbud av utvecklarverktyg som feature flags, utrullning av funktioner, feature variables och A/B-testning som möjliggör trunk-based development och lansering av ny kod snabbt, samtidigt som risken minimeras.
Och för utvecklare som vill komma igång med bara feature flags, erbjuder Optimizely Rollouts obegränsad funktion för feature flags i ett dussin av de mest populära språken och biblioteken där ute.