Qualitätssicherung wird immer beliebter. Experten schätzen, dass die Zahl der Test-Jobs allein in den USA in den nächsten zehn Jahren um 25 % steigen wird. Wenn Sie das interessiert, fragen Sie sich vielleicht, wie Sie mit dem Lernen über Softwaretests beginnen können.
In diesem Artikel beantworte ich Fragen, die Ihnen beim Einstieg in die Softwaretests helfen. Ich erläutere, was Softwaretesting ist, stelle die wichtigsten Testkonzepte vor und empfehle einige Tools für Softwaretests, die Sie in Betracht ziehen sollten.
Was ist Softwaretesting?
Der Prozess, der alle Lebenszyklusaktivitäten umfasst – statisch wie dynamisch – und sich mit Planung, Vorbereitung und Bewertung einer Komponente oder eines Systems sowie der zugehörigen Arbeitsergebnisse befasst, um sicherzustellen, dass diese die festgelegten Anforderungen erfüllen, ihren Zweck nachweisen und Fehler aufdecken.
ISTQB-Glossar
Softwaretesting spielt eine wichtige Rolle im Softwareentwicklungsprozess: Es validiert, dass die Softwareanwendung wie vorgesehen funktioniert und die Anforderungen und Erwartungen der Endnutzer erfüllt.
Das Ziel besteht darin, Fehler, Defekte und Unstimmigkeiten in der Softwareanwendung zu identifizieren, bevor sie für die Öffentlichkeit freigegeben wird. Das Testen umfasst das Ausführen der Software unter verschiedenen Bedingungen, Konfigurationen und Szenarien, um sicherzustellen, dass sie korrekt und effizient funktioniert.
Falls Sie wissen möchten, wie man im Bereich Softwaretesting startet, finden Sie hier eine Liste von häufigen QA-Interviewfragen (und Antworten!).
Ablauf des Softwaretest-Lebenszyklus
Der Softwaretest-Lebenszyklus (STLC) ist der von Software-Testern befolgte Prozess, um sicherzustellen, dass die zu testende Anwendung die festgelegten Qualitätsstandards und Anforderungen erfüllt. Der STLC besteht typischerweise aus mehreren Phasen, die darauf ausgelegt sind, die Softwareanwendung umfassend zu testen und die gewünschte Qualität zu gewährleisten, bevor sie an die Endnutzer ausgeliefert wird. Die folgenden Phasen umfasst der Softwaretest-Lebenszyklus:

Anforderungsanalyse
In dieser Phase analysieren die Softwaretester die Anforderungen und Spezifikationen. Sie identifizieren die funktionalen und nicht-funktionalen Anforderungen, verstehen den Zweck der Softwareanwendung sowie die Zielgruppe und entwickeln entsprechend Testfälle und Testszenarien.
Testplanung
In dieser Phase legt das Testteam den Umfang des Testens, den Testansatz und die benötigten Ressourcen fest. Der Testplan benennt außerdem Risiken und Einschränkungen im Testprozess und enthält eine Übersicht über den Zeitplan für die Tests.
Testdesign
In dieser Phase entwirft das Testteam die Testfälle und Testszenarien basierend auf den Anforderungen und Spezifikationen. Sie identifizieren zudem die für das Testen benötigten Testdaten und entwickeln Testskripte, um den Testprozess zu automatisieren.
Testdurchführung
Die Tester führen die in der vorangegangenen Phase entworfenen Testfälle und Szenarien aus. Die Testergebnisse werden dokumentiert und etwaige Fehler oder Defekte in der Softwareanwendung werden gemeldet.
Testberichterstellung
In dieser Phase erstellt das Testteam einen Bericht mit den Testergebnissen und den während der Tests gefundenen Defekten. Der Bericht kann außerdem Empfehlungen zur Fehlerkorrektur und zur Verbesserung der Gesamtqualität der Softwareanwendung enthalten.
Testabschluss
Dies ist die letzte Phase, in der das Testteam den Testprozess auswertet und Verbesserungsmöglichkeiten identifiziert. Sie erstellen zudem einen Testabschlussbericht, der den Testprozess und die Testergebnisse zusammenfasst.
Der Softwaretest-Lebenszyklus ist ein fortlaufender Prozess, der eine enge Zusammenarbeit zwischen dem Testteam und dem Entwicklungsteam erfordert, um sicherzustellen, dass die Softwareanwendung die gewünschte Qualität und Funktionalität erreicht.
Arten von Softwaretests
Je nach Kontext und Anforderungen des Projekts kommen in den QA-Teams unterschiedliche Arten von Softwaretests zum Einsatz.
Wir können zwischen manuellen Tests und automatisierten Tests unterscheiden, je nachdem, wie die Tests durchgeführt werden. Je nachdem, was getestet wird, können wir zwischen funktionalem und nicht-funktionalem Test unterscheiden. Je nach angewandter Methode gibt es statische und dynamische Tests. Je nach Ansatz sprechen wir von White-Box- und Black-Box-Testen. Außerdem gibt es exploratives Testen, Smoke- und Sanity-Tests sowie Regressionstests. Alle diese Testarten können sich gegenseitig überschneiden, je nachdem, wie sie eingesetzt werden.
Manuelles Testen
Beim manuellen Testen werden die Tests persönlich durchgeführt, ohne den Einsatz automatisierter Tools oder Skripte. Diese Methode ist anfälliger für Fehler und nimmt in der Regel mehr Zeit in Anspruch.
Automatisiertes Testen
Automatisierte Tests werden von einer Maschine durchgeführt, die im Voraus erstellte Skripte ausführt. Dafür sind mehr technische Kenntnisse erforderlich, zum Beispiel Erfahrung mit einer Programmiersprache und Automatisierungstools wie Selenium. Automatisiertes Testen kann kostspieliger sein als manuelles Testen, und bestimmte Aspekte des Testprozesses lassen sich nicht automatisieren.
Funktionales Testen
Funktionales Testen bedeutet zu überprüfen, was die Anwendung macht. Dabei werden die Funktionen und Fähigkeiten der Software überprüft, um sicherzustellen, dass sie den Anforderungen und Spezifikationen entsprechen.
Nicht-funktionales Testen
Im Gegensatz zum funktionalen Testen konzentrieren sich nicht-funktionale Tests darauf, wie sich die App verhält. Es gibt verschiedene Arten des nicht-funktionalen Testens, je nachdem, was das Hauptziel der Tests ist. In diesem Artikel werde ich nur einige davon behandeln.
Leistungstests: Misst die Reaktionszeit, den Durchsatz und die Skalierbarkeit der Softwareanwendung unter verschiedenen Lastbedingungen. Es wird überprüft, wie gut die Anwendung mit mehreren Benutzern und Transaktionen gleichzeitig zurechtkommt und ob sie auch unter Spitzenlast effizient funktioniert.
Lasttests: Simulieren reale Benutzerlasten und werden durchgeführt, um das Verhalten eines Systems unter normalen und Spitzenbedingungen zu bestimmen. Damit kann festgestellt werden, ob die Infrastruktur für das Hosting der Anwendung ausreicht und wie viele gleichzeitige Benutzer die Anwendung bewältigen kann sowie welcher Hardware- oder Netzwerkausbau nötig ist, damit mehr Nutzer auf die Anwendung zugreifen können.
Stresstests: Testen über die normale Kapazität hinaus – oft bis zum Zusammenbruch –, um das Verhalten zu beobachten. Das Ziel ist sicherzustellen, dass die Software auch bei unzureichenden Rechenressourcen (wie Arbeitsspeicher, Festplattenspeicher, Netzwerkzugriff usw.) nicht abstürzt.
Sicherheitstests: Stellt sicher, dass die Softwareanwendung sicher ist und vor unbefugtem Zugriff geschützt wird. Sicherheitstests prüfen auf Schwachstellen und Lücken in den Sicherheitsmechanismen der Software und identifizieren potenzielle Sicherheitsbedrohungen.
Usability-Tests: Dienen dazu zu prüfen, ob die Anwendung benutzerfreundlich ist. Es wird bewertet, wie einfach Benutzer durch die Software navigieren und die vorgesehenen Funktionen effizient ausführen können.
Zugänglichkeitstests: Als Teilbereich der Usability-Tests werden Zugänglichkeitstests durchgeführt, um sicherzustellen, dass die zu testende Anwendung auch von Menschen mit Behinderungen genutzt werden kann.
Lokalisierungstests: Bei dieser Art des Softwaretests wird geprüft, wie sich die Software für eine bestimmte Region, Sprache oder Kultur verhält. Zu den zu prüfenden Aspekten gehören: korrekt übersetzte Texte, Währungen, Maßeinheiten, erlaubte Sonderzeichen und Telefonnummernformate.
Kompatibilitätstests: Überprüft, ob die Anwendung problemlos in unterschiedlichen Browsern, Datenbanken, Hardwareumgebungen, Betriebssystemen, mobilen Geräten und Netzwerken läuft.
Statisches und dynamisches Testen
Statisches Testen basiert auf der manuellen Überprüfung von Arbeitsergebnissen (z. B. Reviews) oder toolgestützten Bewertungen des Codes (z. B. Code-Reviews) oder anderer Arbeitsergebnisse (statische Analyse). Dabei können – aber nicht nur – Spezifikationen, Geschäftsanforderungen, Akzeptanzkriterien, Quellcode, Testpläne, Testfälle, Testskripte und Benutzeranleitungen geprüft werden.
Dynamisches Testen ist die tatsächliche Ausführung der zu testenden Software. Es kann manuell oder automatisiert erfolgen, oder
White-Box- und Black-Box-Testen
White-Box-Testen ist eine Testart, bei der der Tester Kenntnisse über die interne Struktur des Anwendungscodes besitzt, während Black-Box-Testen ohne Einblick in den Quellcode durchgeführt wird. Für jede dieser Testarten kommen unterschiedliche Testtechniken zum Einsatz, zum Beispiel Äquivalenzklassen- und Grenzwertanalyse sowie Entscheidungs-Tabellen für Black-Box-Tests und Anweisungs- sowie Entscheidungsüberdeckung für White-Box-Tests.
Exploratives Testen
Exploratives Testen ist eine erfahrungsbasierte Testmethode. Sie erfordert minimale Planung, aber maximalen Testdurchlauf.
Die Aktivitäten zur Testgestaltung und -durchführung werden parallel durchgeführt, in der Regel ohne formale Dokumentation der Testbedingungen, Testfälle oder Testskripte.
Dies ist ein nützlicher Ansatz, wenn keine oder nur mangelhafte Spezifikationen vorliegen und die Zeit stark begrenzt ist, oder eignet sich hervorragend als Ergänzung zu automatisierten Tests.
Smoke Testing
Smoke Testing, manchmal auch „Build Verification Testing“ oder „Confidence Testing“ genannt, ist ein Softwaretestprozess, bei dem die Tester überprüfen, ob der bereitgestellte Build stabil ist. Smoke Testing ist eine Validierung, dass mit weiteren Softwaretests fortgefahren werden kann. Es besteht aus einer minimalen Anzahl von Tests, die bei jedem Build ausgeführt werden, um die wichtigsten Softwarefunktionen zu prüfen.
Sanity Testing
Sanity Testing ist eine Art Softwaretest, der nach der Auslieferung eines Software-Builds mit kleineren Änderungen am Code oder an Funktionen durchgeführt wird, um zu bestätigen, dass die Fehler behoben wurden und keine neuen Probleme durch diese Änderungen eingeführt wurden. Das Ziel ist, zu bestätigen, dass die geplante Funktion grob wie erwartet funktioniert.
Regressionstest
Regressionstest ist eine Art Softwaretest, bei dem bestehende Funktionalitäten erneut getestet werden, um zu validieren, dass sie nach Änderungen oder Updates an der Softwareanwendung weiterhin korrekt funktionieren. Regressionstest stellt sicher, dass neue Änderungen oder Updates die bestehende Funktionalität der Softwareanwendung nicht beeinträchtigt haben.
Kompatibilitätstest
Kompatibilitätstests werden durchgeführt, um sicherzustellen, dass die Softwareanwendung auf verschiedenen Plattformen, Geräten und Browsern korrekt funktioniert. Es wird überprüft, ob die Softwareanwendung mit verschiedenen Hardware- und Softwarekonfigurationen kompatibel ist.

Testebenen
Softwaretests können anhand ihres Umfangs und ihrer Zielsetzungen in verschiedene Ebenen unterteilt werden. Die folgenden sind die gängigen Ebenen von Softwaretests:
Modultest
Modultest ist die erste Ebene des Testens und konzentriert sich auf das Testen einzelner Komponenten oder Code-Einheiten in Isolation. Beim Modultest wird überprüft, ob jede Code-Einheit wie erwartet funktioniert und die festgelegten Anforderungen erfüllt.
Integrationstest
Integrationstest konzentriert sich auf das Testen der Interaktionen zwischen verschiedenen Modulen oder Komponenten der Softwareanwendung. Integrationstests überprüfen, ob die Module oder Komponenten wie vorgesehen zusammenarbeiten und die festgelegten Anforderungen erfüllen.
Systemtest
Systemtest ist die Ebene des Testens, bei der die gesamte Softwareanwendung als vollständiges System getestet wird. Systemtests überprüfen, ob die Softwareanwendung die festgelegten Anforderungen erfüllt und sich in verschiedenen Szenarien wie erwartet verhält.
Abnahmetest
Abnahmetest ist die Ebene des Testens, bei der die Softwareanwendung aus Sicht des Endbenutzers getestet wird. Abnahmetests überprüfen, ob die Softwareanwendung die Bedürfnisse und Anforderungen der Endbenutzer erfüllt und sich in der Benutzerumgebung wie erwartet verhält. Gängige Arten von Benutzerakzeptanztests sind Alpha-Tests und Beta-Tests.
Jede Testebene ist wichtig und erfüllt eine bestimmte Aufgabe im Softwaretestprozess. Es sollte auf jeder Ebene getestet werden, um sicherzustellen, dass die Softwareanwendung die gewünschte Qualität und Funktionalität erreicht und sich unter verschiedenen Bedingungen wie erwartet verhält.
Grundsätze des Softwaretestens
Es gibt sieben Hauptprinzipien des Testens, wie sie vom ISTQB definiert wurden:
- Testen zeigt das Vorhandensein von Fehlern, nicht deren Abwesenheit: Sie können nicht garantieren, dass die Anwendung fehlerfrei ist, nur weil sie getestet wurde. Nach dem Testen kann jedoch das Vertrauen in das Produkt steigen.
- Vollständiges Testen ist unmöglich: Die meisten Apps sind unglaublich komplex, daher ist es unmöglich, jede mögliche Kombination und Variation zu testen – insbesondere, da auch die Testzeit und Ressourcen begrenzt sind.
- Frühes Testen: Je früher Fehler und Mängel im Softwareentwicklungsprozess entdeckt werden, desto leichter lassen sie sich beheben. Hier punktet Agile, da Testaktivitäten sehr früh beginnen.
- Fehler häufen sich an bestimmten Stellen: Das bedeutet, dass Bereiche, in denen Fehler gefunden wurden, höchstwahrscheinlich noch mehr Fehler enthalten. Nach dem Pareto-Prinzip können 80 % der Fehler in 20 % der Funktionen gefunden werden.
- Das Pestizid-Paradoxon: Wenn immer wieder dieselben Tests ohne Anpassung durchgeführt werden, werden wahrscheinlich keine neuen Probleme gefunden.
- Testen ist kontextabhängig: Anwendungen werden je nach Kontext unterschiedlich getestet – zum Beispiel wird eine API anders getestet als eine Benutzeroberfläche, und Webanwendungen werden anders getestet als Mobil- oder Desktop-Apps.
- Der Irrtum der Fehlerfreiheit: Kurz gesagt, nur weil Fehler gefunden und behoben wurden, heißt das nicht, dass die Software für ihre Nutzer nützlich ist.
Need expert help selecting the right Testing Software?
We’ve joined up with Crozdesk.com to give all our readers (yes, you!) access to Crozdesk’s software advisors. Just use the form below to share your needs, and they will contact you at no cost or commitment. You will then be matched and connected to a shortlist of vendors that best fit your company, and you can access exclusive software discounts!
Fazit
Softwaretests sind ein sehr komplexes Gebiet, und es gibt viele verschiedene Testarten. Es ist wichtig, die eigene Teststrategie je nach Kontext des getesteten Softwareprodukts anzupassen. Es gibt unzählige Ressourcen zu Softwaretests, darunter Podcasts, Bücher und vieles mehr.
Wenn Ihnen dieser Artikel gefallen hat, abonnieren Sie den Newsletter des QA Lead und erfahren Sie als Erste:r von neuen Beiträgen zu Testing und Qualität.
