Close

Softwaretests für Continuous Delivery

Erfahre mehr über die Vorteile von Softwaretests und ihre Rolle bei Continuous Delivery.


Softwaretests sind ein organisatorischer Prozess innerhalb der Softwareentwicklung, bei dem geschäftskritische Software auf Richtigkeit, Qualität und Leistung überprüft wird. Softwaretests werden verwendet, um sicherzustellen, dass sich die Geschäftssysteme und Produktfunktionen wie erwartet verhalten.

Softwaretests können entweder als manueller oder automatisierter Prozess eingerichtet werden.

  • Manuelle Softwaretests werden von einem Team oder von Einzelpersonen durchgeführt, die ein Softwareprodukt manuell ausführen und sicherstellen, dass es sich wie erwartet verhält.
  • Automatisierte Softwaretests bestehen aus vielen verschiedenen Tools, die unterschiedliche Fähigkeiten haben – von isolierten Überprüfungen der Richtigkeit des Codes bis hin zur Simulation eines vollständigen, von Menschen gesteuerten manuellen Tests.

Die unterschiedlichen Arten von Softwaretests

Hier findest du einen Vergleich zwischen verschiedenen Arten von Softwaretests, beispielsweise Unit-Tests, Integrationstests, Funktionstests und Akzeptanztests.

Exploratives Testen

Erfahre, was exploratives Testen überhaupt ist und lerne seine Geschichte kennen. Entdecke die Vor- und Nachteile von explorativem Testen und erfahre, wann du es am besten nutzen kannst.

Einführung in die Codeabdeckung

Erfahre, wie du mit der Codeabdeckung beginnst, wie du das richtige Tool findest und wie die Berechnung funktioniert.

Tutorial zu Integrationstests

In diesem Tutorial erfährst du, wie du Integrationstests mit Bitbucket Pipelines durchführst.

Die Vorteile von Softwaretests


Softwaretests sparen Unternehmen Zeit und Geld, da die Kosten für Softwareentwicklung und -wartung damit gesenkt werden. Softwaretests bauen Stabilitätsgarantien in die Entwicklung neuer Funktionen ein. Tests stellen sicher, dass ein Feature wie erwartet funktioniert und Benutzer nicht auf Fehler stoßen.

Die Entwicklungszeit für neue Funktionen wird reduziert, indem eine Reihe von Testfällen vorgegeben wird, mit denen die neue Funktion übereinstimmen muss, um als vollständig und lieferbar zu gelten. Dies gibt den Entwicklern ein festes Ziel vor, auf das sie hinarbeiten können, was eine genauere Schätzung des Zeitrahmens ermöglicht und die Einführung neuer Bugs verringert. Sobald diese Testfälle vorhanden sind, werden die Gesamtkosten für die Wartung gesenkt. Die Tests können für eine bereits ausgelieferte Funktion durchgeführt werden, um sicherzustellen, dass sie sich weiterhin wie erwartet verhält.

Ebenen von Softwaretests


Es gibt mehrere grundlegende Ebenen innerhalb von Softwaretests, die jeweils die Softwarefunktionalität von einem bestimmten Standpunkt innerhalb des Entwicklungsprozesses aus untersuchen. Nachfolgend sind die einzelnen Testarten und deren praktischer Nutzen beschrieben.

Unit-Tests

Die Grundlage von Softwaretests sind Unit-Tests. Mit Unit-Tests werden Prüfungen der Richtigkeit von Eingaben und Ausgaben für einzelne Codeeinheiten instrumentalisiert. Die Maßeinheit ist in diesem Fall eine eigenständige Codefunktion oder -methode.

Während des Unit-Tests werden die Funktionen von Produktionscode in einer Testumgebung mit simulierter Eingabe ausgeführt. Die Ausgabe der Funktion wird dann mit der erwarteten Ausgabe für diese Eingabe verglichen. Wenn die Ausgabe mit den Erwartungen übereinstimmt, ist der Test bestanden. Wenn nicht, zählt es als Fehlversuch. Unit-Tests sind eine gute Möglichkeit, Funktionen für abgeleitete Daten zu validieren.

Ein Beispiel für eine hypothetische User Story eines Unit-Tests wäre so etwas wie: "Funktion 2VAL, bei 2 Werten x und y gibt immer x+y zurück". Der Unit-Test würde dann 2VAL mit zwei Werten ausführen und bestätigen, dass die Ausgabe x+y war. Unit-Tests sind ideal, um die Richtigkeit von Code zu bestätigen, der mit monetären Werten arbeitet.

Die verschiedenen Ebenen von Softwaretests: Unit-Tests, Integrationstests, Funktionstests und exploratives Testen

Integrationstests

Wenn ein Softwaretestfall mehr als eine Einheit umfasst, gilt dies als Integrationstest. Bei der Entwicklung eines Softwaretestfalls kann sich ein Unit-Test schnell zu einem Integrationstest entwickeln. Oft wird ein Unit-Test erstellt, der gegen eine Codeabhängigkeit von Drittanbietern arbeitet. Die Abhängigkeit selbst muss nicht getestet werden und die Integration wird simuliert oder vorgetäuscht.

Funktionale oder End-to-End-Tests

Testfälle, die eine vollständige Benutzererfahrung simulieren, werden als Funktionstests oder End-to-End-Tests bezeichnet. End-to-End-Tests arbeiten mit Tools, die echtes menschliches Nutzerverhalten simulieren. Allgemeine Schritte in einem End-to-End-Test:

  • Klicke auf diesen Button.
  • Lies diesen Text.
  • Sende dieses Formular.

Aufgrund des Gesamtkontexts der Ausführung überprüfen End-to-End-Tests die Richtigkeit auf allen Ebenen eines Software-Stacks.

Exploratives Testen

Beim explorativen Testen wird den Testern eine vage definierte Aufgabe zugewiesen, die mit der getesteten Software erreicht werden soll. Dies bedeutet, dass du sehr viel über die Art und Weise lernen kannst, wie Menschen dein Produkt im echten Leben wirklich verwenden. Bei explorativen Tests können Benutzer auch motiviert werden, indem beispielsweise Belohnungen für die meisten gefundenen Probleme, den besten Fehler oder den unerwarteten Umgang mit dem Produkt angeboten werden.

Einer der Vorteile von explorativen Softwaretests besteht darin, dass jeder mitmachen kann, da es keine genauen Vorgaben gibt, wie Benutzer das Produkt erkunden. Exploratives Testen verläuft nicht nach dem Zufallsprinzip, muss aber auch nicht nach einem festen Skript wie bei manuellen Tests durchgeführt werden.

Softwaretests für Continuous Delivery


Continuous Delivery nutzt eine Reihe von Softwareteststrategien zur Erstellung einer nahtlosen Pipeline, die automatisch abgeschlossene Codeaufgaben liefert. Eine optimale Einrichtung würde es einem Entwickler ermöglichen, kürzlich fertiggestellten Code zur Evaluierung in die Continuous-Delivery-Pipeline zu übertragen. Die Pipeline würde dann den neu gepushten Code durch die Testebenen führen. Wenn der Code den Test besteht, wird er automatisch zusammengeführt und in der Produktion bereitgestellt. Besteht der Code die Tests jedoch nicht, wird er abgelehnt und der Entwickler wird automatisch über die zu korrigierenden Schritte informiert.

Gängige Programmiersprachen für die Softwareentwicklung verfügen über eigene Testökosysteme. Es gibt viele Tools, die Dienstprogramme zur Unterstützung der Instrumentierung und Entwicklung von Testsuiten bereitstellen. Diese Tools werden normalerweise über einen Paketmanager installiert, der speziell für die im Projekt verwendete Programmiersprache vorgesehen ist.

Neben der Testinstrumentierung stehen auch Tools für die Testausführung und -entwicklung zur Verfügung. Verschiedene Testausführungsprogramme können installiert werden, um Ausgabedaten aus einer Testsuite bereitzustellen. Eine gängige Praxis besteht darin, die "Testabdeckung" während eines Projekts zu messen. Ein Codeabdeckungstool kann verwendet werden, um anzugeben, wie viel von einer Codebasis angemessen abgedeckt ist.

Sobald eine Testsuite entwickelt wurde und korrekt bei einem lokalen Projekt funktioniert, ist es im Allgemeinen einfach, sie in eine CD-Pipeline zu integrieren. Die meisten gehosteten CD/CI-Systeme enthalten Anleitungen zur Integration einer Testsuite in die Pipeline.

So werden Tests Bestandteil der CD-Pipeline


Eine echte, wertschöpfende CD-Pipeline basiert auf einer leistungsstarken Testgrundlage. Diese Testgrundlage beginnt mit manuellen Testfällen, die sich zu automatisierten Lösungen entwickeln.

Lege bei jedem Schritt der Pipeline Wert auf Qualität

Jeder – ob Entwickler oder Tester – ist dafür verantwortlich, Kunden qualitativ hochwertigen Code bereitzustellen. Jede Codezeile macht das Kundenerlebnis entweder besser oder schlechter. Die Testsuite einer CD-Pipeline ist ein facettenreiches Tool zur Entwicklung von qualitativ hochwertigem und korrektem Code. Während der Produktdesignphase kann die Testsuite für präventive Überlegungen zur Entwicklung einer Funktion berücksichtigt werden. Die Testsuite wird hauptsächlich zur Optimierung des Entwicklungsprozesses verwendet, kann aber auch in Staging- und Produktionsumgebungen ausgeführt werden, um dort ebenfalls Qualität zu garantieren.

Biete Entwicklern die Möglichkeit, die Qualität von Funktionen nachzuweisen

Die herkömmliche Testmethodik besagt, dass Tests ein separater Prozess sind, der nicht dem gleichen Takt wie die Entwickler folgt. Wenn Entwickler nicht in die Qualitätssicherung einbezogen werden, kann dies zu einer mangelnden Empathie gegenüber Kunden seitens des Entwicklerteams führen. Auch kann die mangelnde Beteiligung an der Qualitätssicherung zur Folge haben, dass Probleme in der Codebasis länger auftreten, wodurch deren Behebung höhere Kosten verursacht. Diese Methodik ist auch in Bezug auf die Kosten für organisatorische Mitarbeiter teuer, da sie zur Einstellung eines separaten QS-Teams führen kann, das für die Qualität zuständig ist.

Continuous Delivery trägt dazu bei, dass Entwickler ein stärkeres Bewusstsein und mehr Empathie in Hinblick auf die Endbenutzererfahrung entwickeln. Entwickler haben die Aufgabe, eine Testabdeckung für die von ihnen produzierten Funktionen bereitzustellen und sie von der Entwicklung bis zur Produktion zu überwachen. Dies gibt ihnen die Möglichkeit, die Verantwortung für die Qualität eines Features zu übernehmen und diese nachzuweisen.

Integriere Feedback von Kunden

Mit Continuous Delivery lassen sich Softwareprojekte schnell bereitstellen und aktualisieren. Auf diese Weise kann Feedback von Kunden umgehend in ein nächstes Release eingebunden werden. Wenn ein Benutzer ein Problem meldet, kann auf die CD-Pipeline-Testsuite zurückgegriffen werden, um den Umfang möglicher Problemvektoren einzugrenzen. Entwickler- und Testteams, die schnell auf Kundenfeedback reagieren, sind erfolgreicher.

Möchtest du deine eigene Continuous-Delivery-Umgebung erstellen? Wir helfen dir beim Einstieg.

Erstelle eine solide Softwareteststrategie


Bei der Entwicklung einer Softwareteststrategie sollten die Produkt-, Benutzer- und Geschäftsstrategien insgesamt im Auge behalten werden. Es muss überlegt werden, mit welchen Testabdeckungszielen der höchste Mehrwert erzielt wird.

In einer idealen Welt würde für ein Softwareprojekt eine 100 %-ige Testabdeckung angestrebt, die garantiert, dass der Code fehlerfrei ist und wie erwartet funktioniert. Leider ist dies in der realen Geschäftswelt mit Zeitplänen und Budgetbeschränkungen nicht sonderlich realistisch.

Abhängig von der Art der lieferbaren Software sollten auch unterschiedliche Teststrategien in Betracht gezogen werden. Wenn es sich bei der Software um eine GUI-gesteuerte Anwendung handelt, liefern End-to-End-Tests auf hohem Niveau wertvolle Ergebnisse. Bei Headless-Softwareprojekte ohne UI würde auf End-to-End-Tests verzichtet und ein Mehrwert mit Unit-Tests erzielt.

Eine allgemeine Gesamtstrategie für GUI-basierte Benutzeranwendungen lautet wie folgt:

  1. Verwende End-to-End-Tests für die wichtigsten Userflows wie Login, Registrierung, Checkout usw.
  2. Arbeite mit Unit-Tests bei allen Codefunktionen mit vertraulichen Daten, beispielsweise bei Geldtransaktionstools.
  3. Führe Integrationstests für alle Integrationspunkte mit Produkten von Drittanbietern durch, um sicherzustellen, dass die Daten zu den Drittanbietern fließen und etwaige Fehler korrekt weitergegeben werden.

Verbessere deine Softwaretests mit Continuous Delivery


Das Streben nach einem Continuous Delivery-Workflow hat viele geschäftliche Vorteile. Die organisatorischen Kosten für die Einstellung und Verwaltung separater Teams für Qualitätssicherung, Release-Management und Testentwicklung können mit dem Einsatz eines CD-Workflows drastisch gesenkt werden.

Continuous Delivery fördert eine insgesamt höhere Produktqualität im Vergleich zu der Qualität, die mit herkömmlichen QS-Test-Workflows erreicht wird. CD-Tests spornen Entwickler an, die Verantwortung für die Endbenutzererfahrung und die Qualität der von ihnen veröffentlichten Funktionen zu übernehmen. CD legt einen Rahmen fest, der die unternehmensweite Fokussierung auf und die Diskussion über die Qualität von Releases erleichtert.

Die Implementierung einer robusten Softwareteststrategie ist die Grundlage für Continuous Delivery und die Automatisierung ist der Schlüssel zu einer erfolgreichen Continuous-Delivery-Pipeline.

Bist du bereit, deine Softwaretests zu optimieren? Erfahre mehr über das Testen in einer CD-Umgebung. In unseren DevOps-Testtutorials kannst du dir zudem anschauen, wie du mit den Tools von Atlassian und Drittanbietern einen Testschritt in deinen Workflow integrierst.

Claire Maynard
Claire Maynard

Claire gehört zum Marketingteam von Atlassian und hat schon viele Projekte in den Bereichen Wachstum, Performance und Produktmarketing umgesetzt. Aktuell ist sie für die Marken-, Inhalts- und Go-to-Market-Strategie für Confluence Cloud zuständig. In ihrer Freizeit liebt es Claire zu surfen oder zu joggen, neue Restaurants in San Francisco auszuprobieren oder Städte auf der ganzen Welt zu bereisen.


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

Blog lesen

Abbildung: Karte

Kostenlos loslegen

Melde dich für unseren DevOps-Newsletter an

Thank you for signing up