Ein Feature-Toggle in der Softwareentwicklung bietet eine Alternative zur Pflege mehrerer Feature-Branches im Quellcode . Eine Bedingung im Code aktiviert oder deaktiviert ein Feature zur Laufzeit . In agilen Umgebungen wird der Toggle in der Produktion verwendet, um das Feature bei Bedarf für einzelne oder alle Benutzer zu aktivieren. Feature-Toggles erleichtern somit häufige Releases . Erweiterte Rollout-Strategien wie Canary-Releases und A/B-Tests lassen sich einfacher handhaben. [ 1 ] [ 2 ]
Kontinuierliche Bereitstellung wird durch Feature-Toggles unterstützt, selbst wenn neue Releases nicht fortlaufend in der Produktionsumgebung bereitgestellt werden . Das Feature wird in den Hauptzweig integriert, noch bevor es fertiggestellt ist. Die Version wird einmalig in einer Testumgebung bereitgestellt; der Toggle ermöglicht das Aktivieren des Features und dessen Test . Softwareintegrationszyklen verkürzen sich, und eine produktionsreife Version kann bereitgestellt werden. [ 3 ]
Die dritte Anwendung dieser Technik besteht darin, Entwicklern die Veröffentlichung einer Produktversion mit unfertigen Funktionen zu ermöglichen. Diese unfertigen Funktionen werden ausgeblendet (aktiviert), sodass sie in der Benutzeroberfläche nicht sichtbar sind. Der Aufwand für das Zusammenführen von Funktionen in und aus dem Produktivzweig wird dadurch reduziert , was die Erstellung vieler kleiner, inkrementeller Softwareversionen ermöglicht . [ 4 ]
Ein Feature Toggle wird auch Feature Switch , Feature Flag , Feature Gate , Feature Flipper oder Conditional Feature genannt .
Durchführung
Feature-Toggles sind im Wesentlichen Variablen , die innerhalb von bedingten Anweisungen verwendet werden. Die Codeblöcke innerhalb dieser Anweisungen können daher je nach Wert des Feature-Toggles ein- oder ausgeschaltet werden. Dies ermöglicht Entwicklern, den Ablauf ihrer Software zu steuern und Funktionen zu überspringen, die noch nicht für die Bereitstellung bereit sind. Ein Codeblock hinter einer Laufzeitvariablen ist in der Regel weiterhin vorhanden und kann bedingt ausgeführt werden, manchmal sogar innerhalb desselben Anwendungslebenszyklus. Ein Codeblock hinter einer Präprozessor-Direktive oder auskommentierter Codeblock ist hingegen nicht ausführbar. Ein Feature-Flag-Ansatz kann jede dieser Methoden nutzen, um Codepfade in verschiedenen Entwicklungsphasen zu trennen.
Feature-Toggles dienen hauptsächlich dazu, Konflikte zu vermeiden, die beim Zusammenführen von Softwareänderungen kurz vor der Veröffentlichung auftreten können. Dies kann jedoch zu sogenannten Toggle-Schulden führen . Toggle-Schulden entstehen durch ungenutzten Code, der nach der dauerhaften Aktivierung eines Features in der Software verbleibt und zusätzlichen Aufwand verursacht. Dieser Codeabschnitt muss sorgfältig entfernt werden, um andere Teile des Codes nicht zu beeinträchtigen.
Management und Instandhaltung
Feature-Toggles erfordern in der Regel ein Lebenszyklusmanagement, das über die zu ihrer Implementierung verwendeten bedingten Anweisungen hinausgeht. Eine Studie, die Material von Anwendern und Entwicklern aus 38 Unternehmen auswertete, identifizierte 17 Vorgehensweisen für die Verwendung von Feature-Toggles, die in die Kategorien Management, Initialisierung, Implementierung und Bereinigung unterteilt wurden. Zu den häufig genannten Vorgehensweisen gehörten das Erfassen von Metadaten für jeden Toggle, das Definieren eines Standardwerts, das Protokollieren von Änderungen an Toggles und die Verwendung spezieller Tools für deren Verwaltung. [ 5 ]
Untersuchungen zu Google Chrome ergaben, dass Feature-Toggles zwar schnelle Releases, Trunk-basierte Entwicklung und A/B-Tests unterstützen, aber auch zusätzlichen Wartungsaufwand erfordern, wenn sie über längere Zeit im Quellcode verbleiben. [ 6 ] Spätere Arbeiten zur Feature-Toggle-Struktur stellten ebenfalls fest, dass Toggles die Codekomplexität erhöhen, toten Code einführen und die Wartbarkeit beeinträchtigen können, wenn sie nach Erfüllung ihres Zwecks nicht entfernt oder organisiert werden. [ 7 ]
Es gibt zwei Haupttypen von Feature-Toggles. Der eine ist ein Release-Toggle, bei dem der Entwickler je nach Funktion vor der Produktveröffentlichung entscheidet, ob er beibehalten oder entfernt wird. Der andere ist ein Business-Toggle, der beibehalten wird, weil er im Vergleich zum älteren Code einen anderen Anwendungsfall erfüllt.
Funktionsumschalter können in folgenden Szenarien verwendet werden: [ 1 ]
- Hinzufügen einer neuen Funktion zu einer Anwendung.
- Erweiterung einer bestehenden Funktion in einer Anwendung.
- Eine Funktion ausblenden oder deaktivieren.
- Erweiterung einer Schnittstelle.
Funktionsumschalter können wie folgt gespeichert werden: [ 8 ]
- Zeileneinträge in einer Datenbank
- Eine Eigenschaft in einer Konfigurationsdatei
- Ein Eintrag in einem externen Feature-Flag-Dienst.
Funktionsgruppen
Funktionsgruppen bestehen aus Funktionsumschaltern, die zusammenarbeiten. Dies ermöglicht dem Entwickler die einfache Verwaltung einer Gruppe zusammengehöriger Umschalter. [ 9 ]
Kanarienvogel-Veröffentlichung
Eine Canary-Version (auch Canary-Launch oder Canary-Deployment genannt) ermöglicht es Entwicklern, Funktionen schrittweise von einer kleinen Gruppe von Nutzern testen zu lassen. Feature-Flags sind eine alternative Methode für Canary-Launches [ 10 ] und erlauben die gezielte Testung nach geografischen Standorten oder sogar Nutzerattributen [ 11 ] . Falls die Leistung einer Funktion nicht zufriedenstellend ist, kann sie ohne negative Auswirkungen zurückgesetzt werden [ 12 ] . Der Begriff leitet sich von der Verwendung von Kanarienvögeln ab, die Bergleute vor giftigen Gasen warnen .
Annahme
Martin Fowler erklärt, dass ein Release-Toggle, eine spezielle Art von Feature-Toggle, „die letzte Option sein sollte, wenn es darum geht, Funktionen in die Produktion zu überführen“. Stattdessen ist es ratsam, die Funktion in kleinere Teile zu zerlegen, die jeweils implementiert und sicher in das veröffentlichte Produkt eingeführt werden können, ohne weitere Probleme zu verursachen. [ 2 ]
Das Umschalten von Funktionen wird von vielen großen Websites wie Flickr, [ 13 ] Disqus, [ 14 ] Etsy, [ 15 ] Reddit, [ 16 ] Gmail [ 17 ] und Netflix [ 18 ] sowie von Software wie Google Chrome Canary oder Microsoft Office verwendet. [ 19 ]
Siehe auch
- Softwarekonfigurationsmanagement
- Software-Produktlinie
- Vergleich von Open-Source-Konfigurationsverwaltungssoftware
Referenzen
- ^ a b „ALM Rangers – Softwareentwicklung mit Feature Toggles“ . msdn.microsoft.com . Juli 2015.
- ^ a b Martin Fowler (29. Oktober 2010). „FeatureFlag“ . Martinfowler.com . Abgerufen am 6. März 2026 .
- ^ Wie GitHub Feature Flags nutzt, um schnell und sicher zu liefern , infoq, 2021-05-09.
- ^ Programmierung von JavaScript-Anwendungen . Archiviert vom Original am 15.09.2016 . Abgerufen am 14.09.2016 .
- ^ Mahdavi-Hezaveh, Rezvan; Dremann, Jacob; Williams, Laurie (2021). „Softwareentwicklung mit Feature Toggles: Praktiken aus der Praxis“. Empirical Software Engineering . 26 (1). doi : 10.1007/s10664-020-09901-z .
- ^ Rahman, Md Tajmilur; Querel, Louis-Philippe; Rigby, Peter C.; Adams, Bram (2016). Feature Toggles: Praktikerpraktiken und eine Fallstudie . Proceedings of the 13th International Conference on Mining Software Repositories. ACM. S. 201–211 . doi : 10.1145/2901739.2901745 .
- ^ Mahdavi-Hezaveh, Rezvan; Ajmeri, Nirav; Grundy, John; Williams, Laurie (2022). „Heuristiken und Metriken zur Strukturierung von Feature-Toggles“. Information and Software Technology . doi : 10.1016/j.infsof.2021.106804 .
- ^ Echagüe, Pato (2014). Feature-Flags verwalten . O'Reilly Media. ISBN 9781492028598Die
- ^ Elliot, Eric (2018). Programmierung von JavaScript-Anwendungen . O'Reilly Media.
- ^ „So führen Sie Canary-Releases/Progressive Delivery mit ConfigCat durch | ConfigCat-Blog“ . configcat.com . 09.02.2022 . Abgerufen am 22.12.2022 .
- ^ „Canary Testing – Using Blue-Green Deployments and Feature Flags“ . unlaunch.io . 26. Februar 2021. Abgerufen am 14. August 2021 .
- ^ „Canary-Releases – Wie und warum man einen Canary-Release durchführt“ . launchdarkly.com . 7. April 2015. Abgerufen am 9. Januar 2017 .
- ^ Harmes, Ross. „Flipping Out - code.flickr.com“ . flickr.net . Abgerufen am 9. Januar 2017 .
- ^ dcramer (9. Juli 2010). „Teilweise Implementierung mit Funktionsumschaltungen“ . Archiviert vom Original am 5. November 2013. Abgerufen am 10. Oktober 2013 .
- ^ „Wie organisiert Etsy Entwicklung und Betrieb?“ . codeascraft.com . 4. Februar 2011 . Abgerufen am 9. Januar 2017 .
- ^ "reddit/reddit" . github.com . Abgerufen am 9. Januar 2017 .
- ^ „Entwicklung des neuen Gmail-Designs“ . googleblog.com . Abgerufen am 9. Januar 2017 .
- ^ „Vorbereitung der Netflix-API für die Bereitstellung“ . netflix.com . Abgerufen am 9. Januar 2017 .
- ^ Wolfe, Mike (30.05.2022). „Office FeatureGates: Wie Microsoft seine Anwendungen innerhalb von 24 Stunden lahmlegen und reparieren kann“ . nolongerset.com . Abgerufen am 27.08.2024 .