Close

So unterstützt automatisiertes Testen DevOps

Die Testautomatisierung hilft Entwicklerteams dabei, Produkte schneller und zuverlässiger zu erstellen, zu testen und auszuliefern.

Porträt von Krishna Sai
Anton Hristov

Produktmanager bei mabl


Anfang der Nullerjahre begannen Unternehmen mit der Einführung agiler Praktiken und eines beschleunigten Entwicklungslebenszyklus, für den häufiges Kundenfeedback typisch war. Dies führte später zur Einführung von Tools, die Continuous Integration und Continuous Delivery ermöglichten, bei denen Entwicklungs-, Test-, Konfigurierungs- und Bereitstellungsprozesse automatisiert wurden.

Schlüsselfunktionen wie Entwicklung, Testen und Auslieferung an die Produktion wurden jedoch von separaten Teams ausgeführt, die in ihren eigenen isolierten Umgebungen arbeiteten. Dies führte zu Ineffizienzen und brachte den Softwareentwicklungszyklus ins Stocken. Die Entwicklung führte aber auch zu DevOps, den Unternehmensphilosophien, Praktiken und Tools, die kleine, funktionsübergreifende Teams (oder "Squads") unterstützen, die für die gesamte Continuous Delivery und die Qualität von Produktaktualisierungen verantwortlich sind.

Zunächst vereinheitlichte DevOps nur das Entwickler- und IT-Operations-Team, während Tests weiterhin von einem separaten Team weitgehend manuell durchgeführt wurden. Dadurch konnten die Herausforderungen bei der Bereitstellung und Überwachung von Cloud-Anwendungen besser bewältigt werden. Außerdem führte die Konstellation auch zur Schaffung vollautomatischer CI/CD-Pipelines. Allerdings ließen sich damit keine deutlich schnelleren Release-Zyklen erreichen, weil die Tests isoliert abliefen und es sich dabei oft um einen zeitaufwendigen, manuellen Prozess handelte.

Um Engpässe bei Tests zu beheben, stellen Unternehmen nun von zentralisierten QA-Teams auf die Einbettung von QA im gesamten Entwicklerteam um.

Was bedeutet Testautomatisierung?


Bei der Testautomatisierung wird ein Softwareprodukt wie eine Webanwendung automatisch überprüft und validiert. So wird sichergestellt, dass es festgelegte Qualitätsstandards für das Codeformat, die Funktionalität (Geschäftslogik) und die Benutzererfahrung erfüllt.

Testpraktiken beinhalten typischerweise die folgenden Phasen:

  • Unit-Test: Überprüft einzelne Codeeinheiten, beispielsweise eine Funktion, damit sie wie erwartet funktioniert
  • Integrationstest: Stellt sicher, dass mehrere Codeausschnitte ohne unbeabsichtigte Folgen zusammenarbeiten können
  • End-to-End-Test: Überprüft, ob die Anwendung die Erwartungen des Benutzers erfüllt
  • Exploratives Testen: Verfolgt einen unstrukturierten Ansatz zur Überprüfung zahlreicher Bereiche einer Anwendung aus der Benutzerperspektive, um funktionale oder visuelle Probleme aufzudecken

Die verschiedenen Testarten werden oft als Pyramide dargestellt. Auf dem Weg zur Spitze der Pyramide verringert sich die Anzahl der verschiedenen Testtypen und die Kosten für das Erstellen und Ausführen von Tests steigen.

Pyramide für exploratives Testen

In der Vergangenheit wurden alle Tests innerhalb der Pyramide manuell durchgeführt. Dies war ein langsamer, teurer und fehleranfälliger Prozess, bis automatisierte Testtools entwickelt wurden.

Heute laufen fast alle Unit-Tests komplett automatisch ab und ihre Automatisierung wird als Best Practice angesehen. Integrationstests sind ebenfalls weitgehend automatisiert. Ist dies nicht der Fall, werden sie in der Regel
zugunsten manueller End-to-End-Tests übersprungen. Die derzeitigen Initiativen im Bereich Testautomatisierung konzentrieren sich hauptsächlich auf die Automatisierung der End-to-End-Schicht der Testpyramide, wodurch der Bedarf an Integrationstests sinkt.

Zwar gibt es seit über einem Jahrzehnt Automatisierungstools, doch erfordern viele von ihnen Programmierkenntnisse und führen häufig zu unzuverlässigen, brüchigen Tests, deren Fehlerbehebung und Wartung bei zunehmendem Wachstum äußerst kostspielig sind. Viele Teams erstellen am Ende ihre eigenen benutzerdefinierten Frameworks für die Testautomatisierung, deren steile Lernkurve es schwierig und zeitaufwendig macht, neue Teammitglieder an Bord zu holen. Benutzerdefinierte Frameworks müssen letztendlich auch gepflegt und verbessert werden, um mit dem sich ändernden Technologie-Stack Schritt halten zu können. Infolgedessen wurden die meisten End-to-End-Tests noch manuell ausgeführt – bis jetzt.

Während Unternehmen ihre DevOps-Praktiken verfeinern, ist die Testautomatisierung über den gesamten Lebenszyklus hinweg wichtig, um die wichtigsten Vorteile von DevOps nutzen zu können. Dazu zählt etwa die Fähigkeit, Produkte schneller und zuverlässiger zu erstellen, zu testen und auszuliefern, die Incident Response zu optimieren und die Zusammenarbeit und Kommunikation zwischen Teams zu verbessern. Dass ein Release-Build mehrere Tage beim QA-Team verbleibt, bis Entwickler Feedback erhalten und erkannte Probleme beheben können, ist heutzutage keine Option mehr. QA-Teams müssen ihre Tätigkeit auf den DevOps-Zyklus ausrichten und sicherstellen, dass Testfälle automatisiert werden und eine Codeabdeckung von nahezu 100 % erreicht wird. Umgebungen müssen standardisiert werden und das Deployment auf ihren QA-Boxen sollte automatisiert werden. Aufgaben vor dem Testen, Bereinigungen, Aufgaben nach dem Testen usw. sollten automatisch ausgeführt werden und auf den Continuous-Integration-Zyklus ausgerichtet sein.

Es gibt jetzt Tools mit wenig Programmieraufwand wie mabl, mit denen zuverlässige und automatisierte End-to-End-Tests in jeder Phase der CI/CD-Pipeline integriert werden können. So lassen sich Probleme viel früher im Entwicklungslebenszyklus erkennen. Tatsache ist: Je frühzeitiger Probleme bei einem Release erkannt werden, desto schneller und kostengünstiger können sie behoben werden.

Automatisiertes Testen in DevOps


In der Praxis bedeutet dies, dass Entwickler eher Unit-Tests schreiben, um zu überprüfen, ob der Code wie erwartet funktioniert, während Mitarbeiter der Qualitätssicherung und Produktinhaber automatisierte UI-Tests erstellen, die das gesamte Benutzererlebnis überprüfen. Mitarbeiter der Qualitätssicherung organisieren zudem explorative Tests, bei denen das Team verschiedene Anwendungsbereiche manuell auf Probleme untersucht.

Eine Best Practice von DevOps besteht darin, automatisierte Tests so frühzeitig und oft wie möglich innerhalb der CI/CD-Pipeline durchzuführen. Dies beinhaltet die Ausführung von automatisierten UI-Tests in der Produktion, um proaktiv nach Problemen mit der Benutzererfahrung zu suchen. Anwendungen hängen heutzutage von zahlreichen Services mit mehreren beweglichen Teilen ab. Die synthetische Transaktionsüberwachung kann mithilfe von Tests in der Produktion Probleme mit Services von Drittanbietern erkennen, bevor Benutzer diese bemerken.

Symbol: miteinander verbundene Ringe
Zugehöriges Material

Kostenlos loslegen

Werkzeugsymbol
Zugehöriges Material

Verbessere DevOps-Praktiken durch Tests

Einstieg in automatische Tests


Es gibt keine Universallösung, du solltest aber einige wichtige Dinge beachten, wenn du eine Testautomatisierungsstrategie für dein Team definierst:

Häufigkeit der Releases

Je häufiger die Releases stattfinden, desto mehr musst du in die Testautomatisierung und insbesondere in End-to-End-Tests investieren, die bei jedem Deployment ausgeführt werden sollten. Wenn du keine häufigen Release-Zyklen hast und diese beschleunigen möchtest, kannst du zunächst mehr Unit-Tests durchführen und einfache automatisierte UI-Smoke-Tests erstellen, um bei jedem Build eine schnelle Zustandsprüfung durchzuführen. Du kannst dann schrittweise in die Erstellung von umfangreicher automatisierten End-to-End-Tests investieren. Diese erlauben dir, Releases schneller auf Regressionen zu überprüfen.

Verfügbarkeit von Tools

Moderne Testautomatisierungstools verbessern die Fähigkeit deines Teams erheblich, kontinuierlich hochwertige Software auszuliefern. Berücksichtige bei der Bewertung von Testtools folgende Aspekte: einfache Testerstellung, Zuverlässigkeit, Wartungsbedarf und Integration in deinen CI/CD-Stack.

Du solltest auch nachvollziehen, wie steil die Lernkurve für ein bestimmtes Tool ist und welche Fähigkeiten dafür erforderlich sind. Je benutzerfreundlicher deine Lösung ist, desto schneller kann dein Team intensiver damit arbeiten. Außerdem können mehr Mitglieder deines Teams darauf zugreifen, was zu einer höheren Testabdeckung führen und zur Förderung einer Kultur der Qualität beitragen kann. Eine effektive Möglichkeit zur Bewertung von Testlösungen besteht darin, das gesamte Team einige Testfallszenarien mit den Testlösungen automatisieren zu lassen, die weit oben auf deiner Auswahlliste stehen.

Produktreife

Wenn dein Team mit zahlreichen bestehenden Kunden und einer ausgereiften Codebasis an einem Produkt arbeitet, verfügst du wahrscheinlich bereits über einen etablierten Release-Rhythmus und eingeführte Testpraktiken. Beim Wechsel deines Team zur Continuous Integration oder vollständigen CI/CD sollte unbedingt darauf geachtet werden, die Testautomatisierung als wichtigen Bestandteil der Pipeline-Automatisierung einzubeziehen. Eine schnelle Bereitstellung und schnelles Feedback sind nicht aufrechtzuerhalten, wenn Tests nicht frühzeitig oder während der gesamten Entwicklung automatisiert werden.

Wenn dein Team hingegen ein neues Produkt entwickelt, ist dies eine ideale Gelegenheit, um von Anfang an automatisierte Tests durchzuführen. Lege gleich zu Beginn ein Ziel für die Abdeckung durch Unit-Tests fest und konzentriere dich auf die Definition von End-to-End-Testfällen für jede Funktion. Warte am besten, bis ein Feature kurz vor dem Release steht, bevor du automatisierte End-to-End-Tests hinzufügst. So kannst du Testfehler aufgrund von fehlerhaften Änderungen an der Benutzeroberfläche vermeiden.

CI/CD-Umgebungen und Testdaten

Das Erstellen automatisierter Tests ist an sich schon eine Herausforderung. Doch ist es häufig der Mangel an unberührten Umgebungen mit Testdaten, der Teams daran hindert, Tests früher in der CI/CD-Pipeline zu automatisieren. Daher sollte mit dem Team frühzeitig über die Teststrategie gesprochen und vereinbart werden, dass die erforderliche Testinfrastruktur eingerichtet wird. Beispielsweise müssen Entwickler Unterstützung für Testbenutzerkonten implementieren und eine Umgebung mit Testdaten über eine API laden können. Der Aufbau einer Infrastruktur für die frühzeitige Bereitstellung kurzlebiger Testumgebungen wird den Release-Review- und Feedback-Zyklus erheblich beschleunigen.

QA-Testdiagramm

Wie verändert automatisiertes Testen die Rolle der QA?


So unterstützt automatisiertes Testen DevOps


Automatisiertes Testen wird jetzt als Best Practice für DevOps angesehen. Die Implementierung automatisierter Tests in einem großen Teil deiner Entwicklungspipeline mag zunächst einschüchternd wirken. Du kannst aber zunächst nur ein einziges End-to-End-Szenario automatisieren und diesen Test nach einem bestimmten Zeitplan ausführen. Neue Tools machen zudem automatisiertes Testen einfacher als je zuvor und die Ergebnisse lassen sich auf jeden Fall sehen. Denn schließlich möchten wir unsere Benutzer zufriedenstellen, oder?

Die Einführung automatisierter Tests hilft dabei, die folgenden DevOps-Vorteile zu nutzen:

  • Geschwindigkeit ohne Qualitätseinbußen: Erziele eine hohe Produktgeschwindigkeit, die Entwickler freuen wird und es ihnen ermöglicht, den Benutzern schneller einen Mehrwert zu bieten.
  • Verbesserte Teamzusammenarbeit: Die gemeinsame Verantwortung für Qualität fördert eine bessere Zusammenarbeit zwischen Teammitgliedern.
  • Zuverlässigkeit: Verbessere die Zuverlässigkeit von Releases, indem du die Abdeckung durch Testautomatisierung erhöhst. Probleme in der Produktion sollten dadurch eher die Ausnahme als der Normalfall sein.
  • Skalierung: Liefere konsistente Qualitätsergebnisse mit reduziertem Risiko, indem du die Entwicklung auf mehrere kleine Teams verteilst, die autark arbeiten.
  • Sicherheit: Handle schnell, ohne die Sicherheit und Compliance zu beeinträchtigen, indem du automatisierte Compliance-Richtlinien, detaillierte Kontrollen und Konfigurationsmanagementtechniken nutzt.
  • Erhöhte Kundenzufriedenheit: Eine verbesserte Zuverlässigkeit und schnelle Reaktionen auf Benutzerfeedback erhöhen die Benutzerzufriedenheit und führen zu mehr Produktempfehlungen.

Fazit


Der Einsatz von Testautomatisierung, um das volle Potenzial von DevOps auszuschöpfen, wird letztendlich Engpässe reduzieren und die Effizienz steigern. Dies wiederum wirkt sich nicht nur direkt auf die Zufriedenheit von Mitarbeitern und Kunden aus, sondern letztlich auch auf das Geschäftsergebnis.

Beginne die Automatisierung deiner Tests mit Bitbucket Pipelines oder einem der vielen Tools und Ressourcen zur Testautomatisierung, die auf Atlassian Marketplace verfügbar sind.

Anton Hristov
Anton Hristov

Anton Hristov ist Produktmanager bei mabl und verfügt über mehr als 10 Jahre Erfahrung in der Softwareentwicklung, -prüfung und -bereitstellung. Die Arbeit an der Schnittstelle zwischen Menschen, Technologie und Design bereitet ihm besondere Freude. Anton begeistert sich insbesondere dafür, Einblicke aus Daten zu gewinnen und Menschen dabei zu helfen, ihr volles Potenzial auszuschöpfen. Das spiegelt sich auch in den Produkten wider, an denen er mitwirkt.


Diesen Artikel teilen
Nächstes Thema

Lesenswert

Füge diese Ressourcen deinen Lesezeichen hinzu, um mehr über DevOps-Teams und fortlaufende Updates zu DevOps bei Atlassian zu erfahren.

Abbildung: DevOps

DevOps-Community

Abbildung: DevOps

DevOps-Lernpfad

Abbildung: Karte

Kostenlos loslegen

Melde dich für unseren DevOps-Newsletter an

Thank you for signing up