Agiles Branchen und Mergen
Grafik: Flickr/Jawspeak - CC BY 2.0 |
Die Dominanz des als Projektmanagement-Framework angelegten Scrum überdeckt manchmal die Tatsache, dass es auch agile Praktiken in der eigentlichen Software-Entwicklung gibt. Eine die gerade in meinem aktuellen Projekt diskutiert wird und ihren Ursprung im Extreme Programming hat ist der Umgang mit dem Branchen und Mergen, konkret mit Feature- und Task-Branches.
Zur Einführung: als Branchen bezeichnet man das Kopieren (Abzweigen) eines aktuellen Code-Standes von der zentralen Anwendung (dem Master). Dieser Branch wird von einem Entwickler um eine neue Funktion erweitert und danach (sobald die Erweiterung stabil läuft) auf den Master zurückkopiert, wobei die Erweiterung den bisherigen Codestand überschreibt. Diesen Vorgang bezeichnet man als Mergen.
Um diesen Prozess möglichst agil zu halten empfiehlt es sich, das Branchen und Mergen möglichst kleiner Erweiterungen in möglichst kurzen Abständen durchzuführen. Je kleiner die in den Master gemergte Erweiterung ist, desto geringer ist die Wahrscheinlichkeit, dass unbeabsichtigte Seitenauswirkungen enthalten sind. Aus diesem Grund sollte versucht werden so genannte Release Branches (ein Merge pro Release, z.B. nach jedem Sprint) zu vermeiden, da sie tendenziell zu groß sind. Besser sind Feature Branches die etwa einer Story entsprechen (mehrere Merges pro Sprint) und am besten Task-Branches, die einmal pro Tag oder sogar noch öfter gemerged werden können.
Als hilfreich und notwendig haben sich in diesem Zusammenhang zwei Dinge erwiesen: zum einen eine möglichst hohe Abdeckung mit automatisierten Tests, durch die verhindert wird, dass schadhafter Code in den Master gemerged wird, zum anderen die Kennzeichnung von neu eingebrachtem Code durch eine Markierung (Flag), durch die ein neues Feature "an- und abgeschaltet" werden kann. Durch ein derartiges Vorgehen ist es z.B. möglich, dem Kunden im Livebetrieb einen Vorher-Nachher-Vergleich zu geben oder Features kontinuierlich zu entwickeln, sie den (änderungsaversen) Benutzern aber blockweise zur Verfügung zu stellen.