Trunk-basierte Entwicklung
Was ist stammbasierte Entwicklung?
Stamm-basierte Entwicklung (TBD) ist eine Softwareentwicklungsstrategie, bei der Ingenieure kleinere Änderungen häufiger in die Hauptcodebasis einfließen lassen und mit der Stammkopie arbeiten, anstatt an langlebigen Funktionszweigen zu arbeiten. Dieses Entwicklungsmodell wird oft als Teil eines kontinuierlichen Integrationsworkflows eingesetzt.
Warum trunk-basierte Entwicklung
Wenn viele Ingenieure an der gleichen Codebasis arbeiten, ist es wichtig, eine Strategie für die Quellcodekontrolle und die Zusammenarbeit der einzelnen Personen zu haben. Um zu vermeiden, dass die Änderungen der anderen überschrieben werden, erstellen die Ingenieure ihre eigenen Kopien der Codebasis, die sogenannten Branches. In Anlehnung an einen Baum wird die Masterkopie manchmal auch als Mainline oder Stamm bezeichnet. Der Prozess, bei dem die Änderungen der einzelnen Kopien in den Hauptstamm eingearbeitet werden, wird als Merging bezeichnet.
Um die trunk-basierte Entwicklung zu verstehen, ist es sinnvoll, zunächst einen Blick auf die alternative Strategie, die Feature-Branch-Entwicklung, zu werfen.
Bei der Feature-Branch-Entwicklung führen einzelne Softwareentwickler oder Teams von Ingenieuren ihren neuen Zweig erst dann zusammen, wenn ein Feature fertiggestellt ist, und arbeiten manchmal wochen- oder monatelang an einer separaten Kopie.
Diese lange Zeitspanne kann den Prozess des Zusammenführens erschweren, da sich der Stamm- oder Masterzweig wahrscheinlich geändert hat, weil andere Ingenieure ihre Codeänderungen zusammengeführt haben und die Versionskontrolle schwierig wird. Dieses Feature-Branching kann zu einem langwierigen Code-Review-Prozess führen, wenn es darum geht, einen Release-Branch für den Einsatz zu erstellen, was oft dazu führt, dass viele verschiedene Pull Requests analysiert werden müssen, um Merge-Konflikte zu lösen.
Vorteile der trunk-basierten Entwicklung
Bei der trunk-basierten Entwicklung wird ein kontinuierlicherer Ansatz für die Softwareentwicklung verfolgt, und die Zweige sind kurzlebig und werden so oft wie möglich zusammengeführt. Die Zweige sind kleiner, weil sie oft nur einen Teil eines Features enthalten. Diese kurzlebigen Entwicklungszweige erleichtern den Prozess des Zusammenführens, weil weniger Zeit für Abweichungen zwischen dem Hauptstamm und den Zweigkopien bleibt.
Die stammbasierte Entwicklung ist also eine Methode, um neue Funktionen und kleine Änderungen schnell zu veröffentlichen und gleichzeitig langwierige Fehlerbehebungen und die "Merge-Hölle" zu vermeiden. Sie ist eine immer beliebtere Devops-Praxis in agilen Entwicklungsteams und wird oft mit Feature Flags oder Feature Toggles kombiniert, um sicherzustellen, dass neue Funktionen schnell und einfach zurückgenommen werden können, wenn Fehler entdeckt werden.
Trunk-basierte Entwicklung und Feature Flags
Die Praxis des Feature Flags (Pionierarbeit von Martin Fowler), d.h. die Einbettung neuer Funktionen in Code, der aus der Ferne ein- und ausgeschaltet werden kann, ist ein gängiger Entwicklungsprozess, den Softwareingenieure anwenden, um die trunk-basierte Entwicklung umzusetzen und gleichzeitig das Risiko von Fehlern im Code zu verringern.
Da bei der trunk-basierten Entwicklung in der Produktionsumgebung in einem einzigen Zweig gearbeitet wird, bieten Feature Flags eine Möglichkeit, neue Funktionen und Änderungen kontrolliert in den Code einzubringen und sie schnell wieder abzuschalten, wenn Fehler entdeckt werden.
Feature Flags können auch dazu verwendet werden, Features langsam an einen kleinen Teil der Nutzer/innen eines Projekts auszurollen , anstatt sie auf einen Schlag einzuführen, wodurch der Radius eines potenziell fehlerhaften Quellcodes begrenzt wird.
Trunk-basierte Entwicklung und Optimizely
Optimizely ist die weltweit führende Plattform für Progressive Delivery und Experimentation. Optimizely Feature Experimentation bietet eine ganze Reihe von Entwicklertools wie Feature Flags, Feature Rollouts, Feature Variablen und A/B-Testing, die eine trunk-basierte Entwicklung und die schnelle Einführung neuen Codes ermöglichen und gleichzeitig das Risiko minimieren.
Und für Entwickler, die nur mit Feature Flags anfangen wollen, bietet Optimizely Rollouts unbegrenzte Funktionen für ein Dutzend der beliebtesten Sprachen und Bibliotheken. Beginne noch heute mit der trunk-basierten Entwicklung und beschleunige deine Produktentwicklung mit Optimizely!