Canary Testing
Bei Softwaretests bezieht sich Canary Testing auf das Testen einer neuen Softwareversion oder einer neuen Funktion mit echten Benutzern in einer Live-Umgebung (Produktionsumgebung). Dazu werden einige Codeänderungen an eine kleine Gruppe von Endbenutzern weitergegeben, die normalerweise nicht wissen, dass sie neuen Code erhalten.
Da der neue Code oder Canary nur an einige wenige Benutzer verteilt wird, sind seine Auswirkungen gering. Außerdem können die Änderungen schnell wieder rückgängig gemacht werden, sollte sich der neue Code als fehlerhaft erweisen oder Probleme für die Benutzer verursachen. Canary Testing ist auch als Canary Deployment oder Canary Release bekannt.
Canary Testing verstehen
Das Wort Canary beschreibt die Einführung von Softwarecode bei einer Untergruppe von echten Endbenutzern. Der Begriff stammt ursprünglich aus dem Kohlebergbau und der Redewendung Canary in the coal mine (Kanarienvogel in der Kohlenmine). Da Kanarienvögel eine geringere Toleranz gegenüber giftigen Gasen haben als Menschen, wurden sie eingesetzt, um Bergleute zu warnen, wenn diese Gase im Bergwerk gefährliche Werte erreichten.
Beim Canary Testing dient eine kleine Gruppe von Endanwendern als Testgruppe, die einen neuen Code erhält. Wie der Kanarienvogel im Bergwerk sind sich diese Benutzer nicht bewusst, dass sie eine Rolle spielen, um frühzeitig vor Problemen in der Anwendung zu warnen. Wenn eine Codeänderung Probleme verursacht, alarmiert die Überwachungssoftware das Entwicklungsteam, damit es den Code korrigieren kann, bevor er für eine größere Gruppe von Benutzern freigegeben wird.
Was Canary Testing bringt
Ein Canary Release ist eine gute Möglichkeit, um schrittweise Änderungen am Code vorzunehmen, die mit dem Hinzufügen neuer Funktionen oder der Erstellung einer neuen Version der Software zusammenhängen. Da der Code in der Produktion für die tatsächlichen Benutzer freigegeben wird, kann das Entwicklungsteam schnell beurteilen, ob die Änderungen die gewünschten oder erwarteten Ergebnisse liefern.
Canary Deployment ermöglicht es Entwicklern auch, eine kleine Untergruppe von Benutzern auf neue Funktionen in einer neuen Version zu migrieren. Dadurch, dass nur ein Bruchteil der gesamten Benutzerbasis den neuen Code erhält, werden die Auswirkungen potenzieller Probleme im Zusammenhang mit der neuen Software minimiert. Gleichzeitig ist es für Entwickler einfacher, eine fehlerhafte Version zurückzusetzen und sie verhindern, dass die gesamte Benutzerbasis beeinträchtigt wird.
Wie Canary Testing funktioniert
Wie andere Arten von Softwaretests folgt auch Canary Testing einem systematischen, schrittweisen Prozess. Die Schritte sind:
Schritt 1. Das Entwicklungsteam wählt die Benutzer aus, die als Tester fungieren sollen. Diese Gruppe ist eine kleine Teilmenge der Nutzerbasis, aber groß genug, um Ergebnisse zu erzielen, die eine aussagekräftige statistische Analyse ermöglichen. Die Benutzer wissen nicht, dass sie Teil der Testgruppe sind.
Schritt 2. Das Team richtet eine Testumgebung ein, die parallel zur bestehenden Live-Umgebung arbeitet. Außerdem wird der Load Balancer des Systems so konfiguriert, dass Benutzeranfragen von bestimmten Canary-Testern an die neue Umgebung weitergeleitet werden.
Schritt 3. Die Entwickler initiieren das Canary Testing, indem sie die Anfragen der Testbenutzer an die neue Umgebung weiterleiten. Außerdem überwachen sie die Tester so lange wie nötig, um sicherzustellen, dass die neue Version wie erwartet funktioniert.
Schritt 4. Wenn die neue Version die vordefinierten Einsatzkriterien erfüllt, kann die neue Softwarefunktion oder -version für alle Benutzer freigegeben werden. Wenn sich jedoch herausstellt, dass die neue Version viele Fehler enthält, die Leistung der Anwendung beeinträchtigt oder andere Probleme für die Benutzer verursacht, werden die Tester zur ursprünglichen Version der Software zurückgeleitet.
Schritt 5. Das Team behebt die entdeckten Fehler und gibt die Software anschließend für die breite Öffentlichkeit frei.
Canary Testing planen
Bei der Planung eines Canary-Einsatzes müssen mehrere Parameter berücksichtigt werden, darunter:
Anzahl der Benutzer und Stufen. Die Gesamtzahl der Benutzer, die am Canary Testing beteiligt sind, und die Anzahl der Stufen sind wichtige Faktoren, die bei der Planung berücksichtigt werden müssen. Es ist üblich, den Canary-Testcode an fünf oder zehn Prozent der gesamten Benutzerbasis zu leiten. In einigen Fällen wählen Entwicklerteams die Testbenutzergruppe auch auf der Grundlage einer bestimmten geografischen Region aus.
Zeitplan/Dauer. Canary Deployments können einige Minuten oder mehrere Stunden dauern, je nach Anwendung und Testgegenstand. Auch die Aktualisierung der Anwendung für die Tester sowie die Analyse und Veröffentlichung der Testergebnisse kann einige Zeit in Anspruch nehmen. Es ist wichtig, bei der Planung die für alle Aspekte der Tests benötigte Zeit zu berücksichtigen.
Bewertungskriterien. Wie bei jeder anderen Art von Softwaretests lässt sich der Erfolg oder Misserfolg des Canary Testing nur feststellen, wenn die Bewertungskriterien zuvor festgelegt wurden.
Leistungsmetriken. Zur Analyse des Testfortschritts, zur Bewertung der Anwendungsleistung (zum Beispiel Latenz), zur Bestimmung der CPU- und Speicherauslastung und zur Fehlerverfolgung müssen Metriken erfasst werden. Diese Informationen wirken sich direkt auf die Bewertung und den Erfolg des Canary Testing aus.
Canary Deploment
Sobald die Planung abgeschlossen ist, führt das Entwicklungsteam den eigentlichen Einsatz des Canary Testing durch, indem es den neuen Code an die ausgewählte Testgruppe weiterleitet. Das Entwicklungsteam bereitet Konfigurationsdateien vor, erstellt Artefakte und Testskripte.
Als Nächstes erstellt das Team einen Canary-Knoten mit Load Balancing und klont die eigentliche Produktionsumgebung. Für Canary Testing sind mindestens zwei Produktionsumgebungen erforderlich, von denen eine die ursprüngliche Anwendung ohne die Codeänderungen (Baseline) ist.
Canary Testing analysieren
Das Routing des Canary-Codes an die ausgewählte Benutzerbasis führt zu Traffic sowohl auf dem Baseline- als auch auf dem Testknoten. Dadurch kann das Entwicklungsteam einen Vergleich durchführen und feststellen, ob die Testversion die erwartete Leistung erbringt, je nach den in der Planungsphase festgelegten Bewertungskriterien. Anhand der Log-Analysen lässt sich feststellen, ob es Engpässe oder Fehler gibt, die vor einer breiteren Veröffentlichung behoben werden müssen.
Vorteile des Canary Testing
Canary Testing erleichtern die Validierung einer neuen Software oder einer neuen Funktion in einer bestehenden Anwendung. Die Leistung des Codes kann genau überwacht werden, bevor er für eine größere Benutzerbasis freigegeben wird. Da Canary Testing nur für eine kleine Anzahl von Benutzern durchgeführt wird, verringert sich das Risiko einer weit verbreiteten schlechten Leistung oder eines schlechten Benutzererlebnisses erheblich. Außerdem können Änderungen oder Funktionen schnell zurückgenommen werden, wenn sich herausstellt, dass sie die Leistung der Anwendung beeinträchtigen, Fehler enthalten oder negatives Nutzerfeedback erzeugen.
Canary Testing ist eine gute Möglichkeit, ein Beta-Programm mit ausgewählten echten Benutzern einzurichten, um deren wertvolles Feedback vor einer größeren Code-Freigabe zu sammeln. In einigen Fällen kann das QA-Team die erste Gruppe sein, die die neuen Funktionen testet. Sie können die Tests in der gleichen Umgebung wie die Endbenutzer durchführen, um Fehler zu finden, die in der Produktion auftreten und die im Staging-Programm möglicherweise noch nicht entdeckt wurden.
Nachteile des Canary Testing
Canary Testing bietet zwar zahlreiche Vorteile für Entwicklungsteams, ist aber auch mit gewissen Herausforderungen verbunden. Zum einen ist es schwierig, Canary Testing für mobile Anwendungen durchzuführen, da es nur eine einzige Umgebung gibt: das persönliche Computergerät des Benutzers. Eine Möglichkeit, dieser Einschränkung entgegenzuwirken, sind Feature Flags, mit denen eine Funktion aus der Ferne nur für eine kleine Gruppe von Benutzern aktiviert wird. Es ist auch sinnvoll, die Endbenutzer zu ermutigen, die automatische Updates zu aktivieren, damit sie regelmäßige Updates erhalten, die es den Entwicklern ermöglichen, Canary Testing oder eine aktualisierte Version einfach auszurollen.
Canary Testing kann auch eine Herausforderung darstellen, wenn mehrere neue Funktionen schnell veröffentlicht werden. Um all diese Funktionen zu testen, sind mehrere Umgebungen erforderlich, was schwer zu managen ist. Feature Flags sind auch hier eine gute Möglichkeit, dieses Problem zu lösen.
Canary Testing umfasst oft mehrere Produktionsrechner, was die Komplexität noch erhöht. Auch die Migration von Benutzern und die Überwachung des neuen Systems können komplizierte und zeitaufwändige Aufgaben sein, wenn sie manuell durchgeführt werden. Eine Automatisierung kann die Komplexität und den Zeitaufwand für Analysen und Fehlerbehebungen verringern.
Automatisierte Testwerkzeuge erleichtern auch die Erstellung neuer Tests, die Identifizierung der Testbenutzer und die Analyse der Testergebnisse. Entwicklungsteams können vordefinierte Testfälle erstellen, um gezielte Tests durchzuführen und die Testergebnisse zu sichern.
Andere Methoden zum Testen von Softwareänderungen
Canary Deployment ist nur eine Technik zur Aktualisierung von Software, die derzeit in einer Produktionsumgebung verwendet wird. Zu den anderen Methoden für das Deployment von Software-Updates gehören:
Grundlegende Bereitstellung. Bei dieser auch als Re-Create-Ansatz bekannten Strategie werden alle Systeme gleichzeitig mit der neuen Software aktualisiert. Es ist die einfachste Verteilungsstrategie für Softwareentwicklungsteams, aber auch die riskanteste. Wenn das Upgrade fehlerhaft ist, ist die gesamte Benutzerbasis betroffen. Die Beseitigung einer fehlerhaften Version kann zu Unterbrechungen führen, insbesondere wenn die Fehler erst entdeckt werden, nachdem alle Benutzer aktualisiert worden sind.
Inkrementelle oder rollierende Updates. Diese Strategie ähnelt der grundlegenden Bereitstellungsstrategie, mit dem Unterschied, dass die Benutzerbasis in kleinere Gruppen aufgeteilt wird, die das Update in Phasen erhalten. Bei Problemen kann das Deployment-Team das Update stoppen, bevor sie sich auf die gesamte Benutzerbasis auswirkt.
Blaue/grüne Bereitstellung. Bei der Blue/Green-Bereitstellung wird die neue Version der Software neben der alten Version bereitgestellt. Sie erfordert doppelt so viele Ressourcen wie die inkrementelle Bereitstellungsstrategie und kann im Gegensatz zum Canary Testing zu Ausfallzeiten führen.
Allerdings verringert diese Methode auch die Auswirkungen einer fehlerhaften Version, da die Benutzer schnell wieder auf die unveränderte Version umgestellt werden können. Sie ist auch eine gute Wahl, wenn der Code gründlich getestet wurde und das zu erwartende Risiko eines Fehlers als gering eingeschätzt wird.
A/B-Tests. Diese Methode wird verwendet, um bestimmte Funktionen zu testen, indem sie auf der Grundlage bestimmter Metriken an bestimmte Benutzer ausgerollt werden. A/B-Testing-Metriken können bestimmte Nutzungsarten, Lokalisierungen, Browser, Bildschirmgrößen oder Betriebssysteme berücksichtigen.
Unternehmen können diese und andere Ansätze kombinieren, um ihre Pipeline für Continuous Deployment und Continuous Integration (CI/CD) zu optimieren.