Eines meiner Lieblingsmottos ist: „Arbeite klüger, nicht härter.“ Das gilt natürlich auch für Softwaretests. Das bedeutet, dass ich einen Weg finden möchte, mit minimalem Aufwand den größten Nutzen zu erzielen.
Sprechen wir also über Black-Box-Testing-Techniken und darüber, wie sie eingesetzt werden können, um Testfälle zu erstellen und die wichtigsten Fehler in der zu testenden Anwendung zu finden.
Was ist Black-Box-Testing?
Beginnen wir damit zu verstehen, was Black-Box-Testing ist—im Gegensatz zum White-Box-Testing. Dabei handelt es sich um eine Art Softwaretest, bei dem der Tester keinen Zugriff auf die interne Struktur der zu testenden App hat. Stattdessen kann er lediglich die Eingaben und Ausgaben des Systems nutzen und die Funktionalität der Software anhand der Anforderungsspezifikationen prüfen.
Beachte, dass das Black-Box-Testing nur die externe Funktionalität der Software abdeckt und nicht die interne Funktionsweise des Quellcodes überprüft. Deshalb wird es manchmal auch als „verhaltensorientiertes Testen“ bezeichnet. Es sollte also in Kombination mit White-Box-Testing eingesetzt werden, das den Fokus auf das Testen des internen Codes legt. Auf diese Weise kann man sich sicherer sein, dass die Software umfassend getestet und so fehlerfrei wie möglich ist.
5 Arten von Black-Box-Testing-Techniken
Wir verwenden diese Black-Box-Testing-Techniken, um die Testabdeckung zu erhöhen und gleichzeitig die Anzahl der Testfälle zu reduzieren. Durch die Identifizierung der richtigen Testdaten können wir die geringste Anzahl an Tests mit der größten Abdeckung erstellen.
Die Techniken, über die ich spreche, lassen sich für alle Testebenen anwenden—einschließlich Unit-Tests, Integrationstests und Systemtests sowie für funktionale und nicht-funktionale Tests.
1. Äquivalenzklassenbildung
Die Äquivalenzklassenbildung ist eine Technik im Softwaretest, bei der die möglichen Eingaben in eine Reihe von Äquivalenzklassen oder Partitionen unterteilt werden. Ziel ist es, aus jeder Klasse ein repräsentatives Set von Eingaben zu finden und zu testen. Alle Elemente, die zu einer Äquivalenzklasse gehören, sollten das gleiche Ergebnis liefern—das Testen eines einzelnen Werts aus dieser Menge sollte daher ausreichen.
Das hilft dabei, die Zahl der zu erstellenden und durchzuführenden Testfälle zu verringern und gleichzeitig eine gute Abdeckung sicherzustellen. Die Klassen werden basierend auf funktionalen oder nicht-funktionalen Anforderungen definiert und können Kriterien wie Datentypen, Wertebereiche oder Beziehungen zwischen Eingabewerten berücksichtigen.
Beim Definieren der Äquivalenzklassen solltest du auch die ungültigen Bereiche abdecken, um die negativen Testszenarien zu berücksichtigen. Nach meiner Erfahrung treten die meisten Defekte bei ungültigen Eingaben und nicht bei positiven auf.
Schauen wir uns ein Beispiel an:
Du hast ein optionales Feld, das nur Ganzzahlen zwischen 1 und 10 erlaubt. Es ergeben sich folgende Äquivalenzklassen:
- kein Wert (gültige Partition)
- Werte zwischen 1 und 10 (gültige Partition)
- Werte kleiner als 1 (ungültige Partition)
- Werte größer als 10 (ungültige Partition)
Somit benötigst du nur 4 Testfälle—je einen für jede Partition. Es bringt keinen Mehrwert, dieselbe Partition mit mehreren Werten zu testen—wenn du zum Beispiel Wert 5 geprüft hast, bekommst du für 4, 8 und so weiter das gleiche Ergebnis.
2. Grenzwertanalyse
Die Grenzwertanalyse ist eine Technik im Softwaretest, bei der die Eingabewerte am oder nahe dem „Rand“ des Eingabebereichs des Programms identifiziert und getestet werden. Die Idee dahinter ist, dass diese Werte eher zu Fehlern oder unerwartetem Verhalten führen können, da es sich oft um Sonderfälle oder Randfälle handelt, für die das Programm möglicherweise nicht korrekt ausgelegt wurde.
Beispielsweise sind beim Testen eines Programms, das einen Ganzzahlbereich zwischen 1 und 100 akzeptiert, die Grenzwerte 1, 100 sowie die Werte, die knapp außerhalb liegen, wie 0 und 101.
Es gibt zwei Arten von Grenzwerttests:
- Innerer Grenzwerttest: konzentriert sich auf die Eingabewerte, die direkt innerhalb des Grenzen des Eingabebereichs liegen, etwa die minimal und maximal erlaubten Werte.
- Äußerer Grenzwerttest: beschäftigt sich mit Eingabewerten, die knapp außerhalb des erlaubten Bereichs liegen, zum Beispiel Werte, die etwas über oder unter dem Minimum beziehungsweise Maximum liegen.
Die Grenzwertanalyse ist eine wichtige Technik, um Fehler zu finden und sicherzustellen, dass ein Programm für alle Eingaben korrekt funktioniert, nicht nur für solche im mittleren Bereich des Eingabebereichs. Dies hilft dabei, Fehler zu identifizieren und zu beheben, die sonst möglicherweise unentdeckt bleiben würden.
3. Entscheidungstabellentest
Beim Entscheidungstabellentest prüfen wir die Logik und das Verhalten einer Software, wenn mehrere Bedingungen vorliegen. Es handelt sich um eine Möglichkeit, die Beziehungen zwischen Eingaben und Ausgaben in tabellarischer Form darzustellen. Die Tabelle enthält typischerweise Spalten für Bedingungen und Zeilen für die unterschiedlichen Kombinationen. Für jede Zeile muss ein spezifischer Testfall erstellt werden. Die erwartete Ausgabe für den Testfall sollte ebenfalls in der Tabelle enthalten sein.
Stellen wir uns ein Beispiel für eine Softwareanforderung vor, bei der diese Technik angewendet werden kann: Eine App, die die Kosten eines Kaufs auf Basis des Artikels, der Stückzahl und der Versandmethode berechnet:

In diesem Beispiel sind Artikel, Menge und Versandmethode die Eingaben und die Kosten die Ausgabe. Die Tabelle zeigt alle möglichen Kombinationen der Eingaben sowie die jeweilige zugehörige Ausgabe. Mithilfe dieser Tabelle können Sie schnell die Testfälle und die erwarteten Ergebnisse identifizieren, was das Testen und Überprüfen der verfügbaren Kombinationen erleichtert.
Der Entscheidungstabellentest ist besonders nützlich, wenn ein Programm mehrere Eingaben und Bedingungen hat, die miteinander auf komplexe Weise interagieren. Indem man die Eingaben und Bedingungen in eine Tabelle aufteilt, wird es einfacher, alle möglichen Kombinationen und Varianten zu erkennen und zu testen.
4. Statustransitionstests
Der Statustransitionstest ist eine Black-Box-Testtechnik, bei der das Verhalten eines Programms getestet wird, wenn es zwischen verschiedenen Zuständen oder Modi wechselt. Ein Zustand ist eine Bedingung oder eine Gruppe von Bedingungen, in denen das Programm existieren kann, und eine Transition ist der Übergang von einem Zustand in einen anderen. Die Idee hinter dem Statustransitionstest ist es, alle möglichen Zustände und Übergänge, die ein Programm durchlaufen kann, zu identifizieren und dann Testfälle zu erstellen, um zu prüfen, ob das Programm sich in jedem Zustand korrekt verhält und gültige Übergänge zwischen den Zuständen vornimmt.
Ein Beispiel für einen Statustransitionstest wäre eine E-Commerce-Website, auf der Kunden Produkte in ihren Warenkorb legen, zur Kasse gehen, ihre Zahlungs- und Versandinformationen eingeben und schließlich eine Bestellung aufgeben können. Die Zustände in diesem Beispiel wären:
- Produkte durchsuchen
- Artikel in den Warenkorb legen
- Zur Kasse gehen
- Zahlungs- und Versanddaten eingeben
- Bestellbestätigung
Die Übergänge zwischen diesen Zuständen wären:
- Produkte durchsuchen -> Artikel in den Warenkorb legen
- Artikel in den Warenkorb legen -> Zur Kasse gehen
- Zur Kasse gehen -> Zahlungs- und Versanddaten eingeben
- Zahlungs- und Versanddaten eingeben -> Bestellbestätigung

Diese Technik hilft dabei, alle möglichen Wege, die ein Nutzer durch das System nehmen kann, zu identifizieren und zu testen und so Fehler in spezifischen Abläufen aufzudecken und zu beheben. Statustransitionstests sind besonders nützlich für die Prüfung von Systemen mit komplexen Interaktionen, wie Finanzsystemen, E-Commerce-Systemen oder Systemen zur Steuerung physischer Geräte.
5. Paarweise Tests
Paarweise Tests sind eine Black-Box-Testtechnik, mit der Tests erstellt werden, um alle möglichen Paare von Kombinationen von Eingabewerten für eine bestimmte Menge von Parametern abzudecken. Sie wird eingesetzt, wenn die Anzahl der möglichen Eingaben hoch ist, was es extrem schwierig machen würde, alle möglichen Kombinationen daraus zu testen.
Nehmen wir zum Beispiel eine App mit drei Feldern: A, B und C. Jedes Feld kann einen von drei Werten annehmen: 1, 2 oder 3.
Mit herkömmlichen Testmethoden müssten wir 27 (3^3) mögliche Kombinationen von Eingaben einzeln testen, um alle Kombinationen abgesichert zu haben. Das wäre extrem zeitaufwändig und ineffizient.

Beim paarweisen Testen kann man Anwendungsfälle identifizieren, die alle möglichen einzigartigen Kombinationen von Eingaben abdecken. Das würde ungefähr so aussehen:

Wie Sie sehen, wurde die Anzahl der Tests drastisch reduziert, von 27 auf 9. Die Testabdeckung hat sich dabei nicht geändert – wir stellen immer noch sicher, dass alle möglichen Wertkombinationen berücksichtigt werden.
Es gibt mehrere Tools für paarweises Testen. Nachfolgend habe ich einige Beispiele aufgelistet:
- AllPairs: Ein Tool zum Erstellen von paarweisen Testfällen basierend auf benutzerdefinierten Parameterlisten und Einschränkungen. Es ist sowohl als Open-Source- als auch als kommerzielle Version verfügbar.
- PICT (Pairwise Independent Combinatorial Testing): Ein Tool, das einen genetischen Algorithmus verwendet, um paarweise Testfälle zu generieren. Es ist als Open-Source-Tool verfügbar.
- SmartBear TestComplete: Ein kommerzielles Testautomatisierungstool mit integrierter Unterstützung für paarweises Testen.
- Pairwise Test Case Generator: Ein Open-Source-Tool, das auf GitHub verfügbar ist und zum Generieren von paarweisen Testfällen verwendet werden kann.
- Paarweise Testfälle können auch mithilfe von Excel oder OpenOffice Calc generiert werden, indem Makros oder Plugins zur Generierung Ihrer Testfälle verwendet werden.
Dies sind nur einige Beispiele, es könnten noch weitere Tools verfügbar sein. Ich empfehle, die verschiedenen Optionen zu recherchieren und zu bewerten, um herauszufinden, welches Tool am besten zu Ihren individuellen Anforderungen passt.
Abschließende Gedanken
Diese Techniken zu verwenden, ist eine hervorragende Möglichkeit, in jeder Phase des Softwareentwicklungszyklus eine gute Abdeckung zu erreichen. Noch besser wird es, wenn Sie weitere Testarten wie exploratives Testen, Fehlervermutungs-Testing, Kompatibilitätstests, Usability-Tests usw. in Ihren Testprozess integrieren.
Wenn die resultierenden Testfälle am Ende in die Regressionstest-Suite aufgenommen werden, sollten Sie eine Automatisierung in Betracht ziehen – für UI-Tests können Sie Tools wie Selenium, Cypress und Appium verwenden, für API-Tests können Integrations-Tests vom Entwicklungsteam geschrieben werden, oder Sie nutzen Tools wie Postman.
Wenn Sie diesen Artikel nützlich fanden, empfehle ich Ihnen, den QA Lead Newsletter zu abonnieren. Dort erfahren Sie alles über neue Inhalte und Tutorials zu Qualitätssicherung und Testen.
