Beta-Tester berichten nicht immer über alle beobachteten Fehler, insbesondere wenn sie sich nicht sicher sind, was genau sie getan haben, um das Problem zu verursachen. Das bedeutet, dass viele Fehlerberichte der Beta-Tester oft schwer verständlich sind und es erheblicher Anstrengungen bedarf, die eigentliche Ursache zu identifizieren. Das bedeutet, dass die Organisation bei der Auswahl der Beta-Tester auf ein gut strukturiertes System achten sollte, in dem Entwickler des Teams und ausgewählte Nutzer gleichzeitig teilnehmen können, um diese Probleme zu vermeiden.
Die Beta-Testphase eignet sich nicht immer für ein DevOps-Modell, da sie am besten in Organisationen funktioniert, die nur relativ selten Releases durchführen. Wenn kleine Teile der Arbeit täglich Hunderte Male veröffentlicht werden, hat es wenig Wert, dass jeder dieser Teile durch einen Beta-Test läuft. In solchen Fällen können Fehler besser von der gesamten Nutzerbasis identifiziert und gemeldet werden. Für Organisationen, die DevOps anstreben, kann der Beta-Test mehr Risiko in die Veröffentlichung einbringen, als dies zuvor akzeptiert wurde. In einigen Fällen bedeutet dies eine Änderung der Teststrategie, bei der die Entwicklungsteams einen reduzierten Testaufwand haben, da der Beta-Test eine Teilabdeckung der Tests übernimmt. Diese Änderung in den Entwicklungs- und Betriebsmethoden ist notwendig, um mehrere Versionen eines Produkts gleichzeitig laufen zu lassen, was zunehmend erforderlich ist.
Die Einführung von Beta-Tests setzt viele der notwendigen Strukturen in Gang, wie beispielsweise Feature-Toggles, Analytics und Monitoring, die später auch für andere Testpraktiken in der Produktion genutzt werden können, wenn DevOps im Unternehmen reift. Der Grad des Risikos, das durch Beta-Tests eingeführt wird, variiert stark zwischen Organisationen. In einigen Fällen wird die Beta-Version des Codes direkt nach seiner Fertigstellung an die Tester freigegeben, während in anderen Fällen gut getesteter Code veröffentlicht wird, um Feedback von einer breiteren Gruppe von Nutzern zu erhalten.
Ein bemerkenswertes Beispiel für langjährige Beta-Tests bietet Google mit Gmail. Die E-Mail-Plattform trug von 2004 bis 2009 das Etikett "Beta", obwohl sie längst in einem Zustand war, der für eine breite Nutzerbasis stabil und funktional war. Google verwendete das "Beta"-Label weniger als eine technische Kennzeichnung und mehr als eine Marktbotschaft, die auf kontinuierliche Verbesserung hinwies. Der Co-Gründer Larry Page gab zu, dass das Festhalten an der Beta-Bezeichnung über Jahre hinweg "willkürlich" war und eher mit "Marketing und Branding" als mit einem klaren Entwicklungsstatus zu tun hatte.
Auch Tesla wurde in der Vergangenheit für seine Entscheidung kritisiert, die Autopilot-Software seiner Fahrzeuge im Rahmen eines öffentlichen Beta-Tests zu testen. Nach einem Vorfall, bei dem ein Tesla-Fahrzeug mit aktiviertem Autopilot in einen Unfall verwickelt war, wurde die Frage aufgeworfen, ob es verantwortungsvoll ist, ein so kritisches Sicherheitsfeature Beta-Testern auszuliefern. Diese Kritik zeigt, dass Beta-Tests in besonders sicherheitskritischen Bereichen, wie der Automobilindustrie, problematisch sein können.
Diese Beispiele und der Einsatz von Beta-Tests in verschiedenen Bereichen werfen wichtige Fragen auf, die in der eigenen Organisation bedacht werden müssen: Wer ist die Zielgruppe des Beta-Tests? Was ist der Umfang des Tests? Welches Risiko ist mit der Freigabe der Beta-Version verbunden? Diese Überlegungen sind entscheidend, wenn man Beta-Tests in die eigene Teststrategie integriert.
Ein weiterer wichtiger Aspekt ist die Praxis des „Monitoring as Testing“ oder der Nutzung von Produktionsmonitoring als Testalternative. In einem DevOps-Umfeld, das durch schnelle Release-Zyklen geprägt ist, können Probleme erst in der Produktionsumgebung entdeckt und behoben werden. Diese Praxis, die nachträgliches Monitoring als eine Form von Testen versteht, kann das Risiko einer frühzeitigen Identifikation von Problemen minimieren. Es ist jedoch zu beachten, dass diese Strategie reaktiv und nicht proaktiv ist, was bedeutet, dass Probleme erst nach ihrem Auftreten identifiziert werden. Das Monitoring liefert dann schnell das Feedback, um festzustellen, ob das Problem behoben wurde.
Diese Idee geht zurück auf Ed Keyes, der 2007 auf der Google Test Automation Conference argumentierte, dass „fortschrittliches Monitoring nicht von Testen zu unterscheiden ist“. Keyes plädierte für Monitoring, das sowohl funktionale Verifizierung als auch Log-Analyse umfasst, um Probleme zu erkennen, die durch Nutzerinteraktionen oder automatisierte Tests auftreten. Bei dieser Strategie wird weniger in präventive Tests investiert, sondern mehr in die schnelle Erkennung von Fehlern in der Produktionsumgebung.
Monitoring als Testing kann jedoch auch zu einer Umstellung im Testansatz führen, bei dem Monitoring und Testen als komplementäre Praktiken betrachtet werden. In diesem Zusammenhang wurde 2015 auf den DevOps Days von Leon Fayer eine moderatere Position vertreten, bei der Monitoring und Testing gemeinsam als Strategie zur Entdeckung von „unbekannten Unbekannten“ betrachtet werden.
Die Praxis des Monitorings als Testing kann das Testverständnis erheblich erweitern. Durch die aktive Generierung von Events in der Produktionsumgebung können Bugs möglicherweise erkannt und behoben werden, bevor ein Benutzer sie bemerkt. Diese aktive Form des Monitorings führt zu einer engeren Verzahnung von Testing und Monitoring, wodurch die Probleme schneller entdeckt und behoben werden können.
Es ist klar, dass Monitoring und Testing traditionell unterschiedliche Ziele verfolgen: Tests zielen darauf ab, Probleme vor der Veröffentlichung zu finden, während Monitoring nach der Veröffentlichung dazu dient, verbleibende Fehler zu identifizieren. Monitoring als Testing verwischt diese Grenzen und integriert Testing-Elemente direkt in das Monitoring, was zu einer schnelleren Identifikation und Behebung von Fehlern in der Produktion führt.
Die Integration von Monitoring und Testing kann jedoch nicht alle Herausforderungen lösen. Insbesondere in komplexeren Softwareumgebungen, in denen verschiedene Versionen gleichzeitig laufen, sind gründliche Tests und kontinuierliches Monitoring nach wie vor notwendig, um die Qualität und Sicherheit der Software langfristig zu gewährleisten. Die Entscheidung, Beta-Tests oder Monitoring als Testing zu implementieren, hängt stark vom Kontext der Organisation und den spezifischen Anforderungen des Produkts ab.
Wie DevOps das Risikomanagement beeinflusst und warum Tests weiterhin wichtig sind
DevOps ist kein Konzept, das man fürchten muss, sondern eine Chance, die Arbeitsweise von Entwicklungsteams grundlegend zu verbessern. Es geht nicht nur um die Automatisierung von Prozessen oder das Zusammenspiel von Entwicklung und Betrieb, sondern um eine ganzheitliche Veränderung der Kultur in Softwareunternehmen. DevOps ist ein Schlüsselfaktor für Unternehmen, die kontinuierlich neue Software-Features mit hoher Geschwindigkeit und Zuverlässigkeit bereitstellen möchten. Der Versuch, diese Veränderungen ohne die nötige Bereitschaft, Verantwortung zu teilen und Risiken einzugehen, wird jedoch selten erfolgreich sein.
Der zentrale Treiber hinter der Einführung von DevOps in vielen Unternehmen ist der Wunsch, den Softwareentwicklungsprozess zu beschleunigen und gleichzeitig die Qualität der Produkte aufrechtzuerhalten oder sogar zu verbessern. In traditionellen Entwicklungsmodellen sind Tests häufig ein nachgelagerter Schritt, der erst nach der Fertigstellung des Codes stattfindet. DevOps fordert jedoch, dass das Testen in den gesamten Entwicklungsprozess integriert wird. Continuous Integration und Continuous Deployment (CI/CD) erfordern eine ständige Überprüfung des Codes in jeder Phase der Entwicklung. Das bedeutet, dass Tester nicht mehr isoliert arbeiten, sondern von Beginn an in den Entwicklungsprozess eingebunden werden müssen.
Es gibt keinen universellen „Best Practice“-Ansatz, der für alle Organisationen gleichermaßen funktioniert. Jedes Team muss die Praktiken und Werkzeuge wählen, die zu seiner spezifischen Situation passen. Die Theorie und die Werkzeuge aus DevOps bieten jedoch wertvolle Hinweise für Teams, die ihre Prozesse verbessern wollen. Die hohe Frequenz von Deployments, wie sie beispielsweise bei Unternehmen wie Netflix oder IMVU zu beobachten ist, zeigt, wie effektiv DevOps-Praktiken sein können. Bei Netflix etwa werden hunderte von Deployments pro Tag durchgeführt, was eine enorme Flexibilität und Reaktionsgeschwindigkeit ermöglicht, aber auch erhebliche Risiken birgt.
Der Umgang mit diesen Risiken erfordert einen Kulturwandel. Es ist nicht mehr nur der Testverantwortliche, der für die Qualität des Endprodukts sorgt. Alle Beteiligten, vom Entwickler bis zum Betrieb, müssen sich gemeinsam der Herausforderung stellen, Fehler frühzeitig zu identifizieren und zu beheben. Dabei ist das Testen weiterhin von entscheidender Bedeutung, auch wenn es sich durch DevOps verändert. In einer DevOps-Umgebung muss das Testen nicht nur während der Entwicklung, sondern auch im laufenden Betrieb stattfinden. Das bedeutet, dass Software nach der Veröffentlichung weiterhin überwacht und bei Bedarf sofort angepasst werden muss. Die sogenannte „Testing in Production“-Strategie ist in vielen modernen Unternehmen mittlerweile Standard, was eine völlig neue Herangehensweise an Softwarequalität erfordert.
Die Rolle des Testers hat sich also grundlegend gewandelt. Tester müssen nicht nur wissen, wie man Fehler findet, sondern auch, wie man das System überwacht und es kontinuierlich verbessert. Tester müssen auch ein Verständnis für Automatisierung und Continuous Testing entwickeln. In der Praxis bedeutet dies, dass Tester nicht nur in traditionellen Testumgebungen arbeiten, sondern auch in Live-Systemen, wo sie direkt nach der Bereitstellung Fehler oder Performanceprobleme identifizieren können. In vielen Fällen kommen dazu neue Werkzeuge und Technologien zum Einsatz, die es ermöglichen, die Qualität kontinuierlich zu überprüfen, ohne den Entwicklungsprozess zu verlangsamen.
Dennoch darf nicht übersehen werden, dass DevOps und seine Praktiken nicht ohne Risiken sind. Die Geschwindigkeit, mit der Software entwickelt und bereitgestellt wird, kann dazu führen, dass Fehler übersehen oder nicht ausreichend getestet werden. Eine „Fehlerkultur“, wie sie bei Unternehmen wie Amazon oder Google gepflegt wird, ist deshalb notwendig, um mit dieser Geschwindigkeit Schritt zu halten und dennoch die Qualität zu sichern. Chaos-Engineering, bei dem gezielt Fehler in die Produktion eingeführt werden, um die Resilienz des Systems zu testen, ist ein Beispiel für solche Praktiken. Diese Methoden sind jedoch nur dann erfolgreich, wenn alle Beteiligten – vom Entwickler bis zum Tester – bereit sind, Verantwortung zu übernehmen und kontinuierlich an der Verbesserung des Systems zu arbeiten.
Wichtig ist, dass DevOps nicht nur als technische Methodik, sondern als Kulturveränderung verstanden wird. Wer sich dieser Veränderung nicht stellt, wird langfristig Schwierigkeiten haben, mit den Anforderungen der modernen Softwareentwicklung Schritt zu halten. Es geht darum, Vertrauen zwischen den verschiedenen Teams aufzubauen und eine gemeinsame Verantwortung für die Qualität des Produkts zu übernehmen. Nur so lässt sich die Geschwindigkeit, mit der Software entwickelt und ausgerollt wird, mit der Notwendigkeit zur Fehlerreduktion und Qualitätssicherung in Einklang bringen.
Zusammenfassend lässt sich sagen, dass DevOps eine große Chance für Unternehmen darstellt, ihre Softwareentwicklungsprozesse zu optimieren und die Qualität zu steigern. Tester müssen dabei eine zentrale Rolle einnehmen und sich aktiv in den gesamten Entwicklungsprozess integrieren. Dabei darf jedoch nicht außer Acht gelassen werden, dass Geschwindigkeit und Qualität oft in einem Spannungsverhältnis zueinander stehen, das mit Bedacht gemanagt werden muss. Erfolgreiche Unternehmen sind diejenigen, die lernen, wie man dieses Spannungsfeld produktiv nutzt und kontinuierlich an der Verbesserung ihrer Systeme arbeitet.

Deutsch
Francais
Nederlands
Svenska
Norsk
Dansk
Suomi
Espanol
Italiano
Portugues
Magyar
Polski
Cestina
Русский