Black-Box-Test bezeichnet eine Methode des Software-Tests, bei der die Tests ohne Kenntnisse über die innere Funktionsweise des zu testenden Systems entwickelt werden. Er ist ein Test zur Gütebestimmung eines Computer-Codes. Er beschränkt sich auf funktionsorientiertes Testen, das heißt, für die Ermittlung der Testfälle wird nur die Spezifikation (gewünschte Wirkung), aber nicht die Implementierung des Testobjekts herangezogen, die genaue Beschaffenheit des Codes wird nicht betrachtet, dieser also als Black Box behandelt. Nur nach Außen sicherbares Verhalten fließt in den Test ein.
anders als die Spezifikation sehen. Als weitere nützliche Eigenschaft eignen sich Black-Box-Tests auch als zusätzliche Stütze zum überprüfen der Spezifikation auf Vollständigkeit, da eine unvollständige Spezifikation häufig Fragen bei der Entwicklung der Tests aufwirft.
Weil die Entwickler der Tests keine Kenntnisse über die innere Funktionsweise des zu testenden Systems haben dürfen, ist bei Black-Box-Tests praktisch ein separates Team zur Entwicklung der Tests nötig. In vielen Unternehmen sind dafür sogar spezielle Testabteilungen zuständig.
Vergleich mit White-Box-Tests
Weder sind Black-Box-Tests ein Ersatz für White-Box-Tests, noch umgekehrt. Black-Box-Tests werden eingesetzt, um Fehler gegenüber der Spezifikation aufzudecken, sind aber kaum geeignet, um Fehler in bestimmten Komponenten oder gar die fehlerauslösende Komponente selbst zu identifizieren. Für letzteres benötigt man White-Box-Tests. Zu bedenken ist auch, dass zwei Fehler in zwei Komponenten sich zu einem vorübergehend scheinbar korrekten Gesamtsystem aufheben könnten. Dies kann durch White-Box-Tests leichter aufgedeckt werden, bei Black-Box-Tests nach der nicht auszuschließenden Korrektur nur einer der beiden Fehler jedoch als vermeintliche Regression zu Tage treten.
Im Vergleich zu White-Box-Tests sind Black-Box-Tests wesentlich aufwendiger in der Durchführung, da sie eine größere organisatorische Infrastruktur (eigenes Team) benötigen.
Die Vorteile von Black-Box-Tests gegenüber White-Box-Tests:
- Bessere Verifikation des Gesamtsystems als mit White-Box-Tests
- Überprüfen der Spezifikation
- Kein Testen "um Fehler herum"
Die Nachteile von Black-Box-Tests gegenüber White-Box-Tests:
- Größerer organisatorischer Aufwand
- Soziale Aspekte (siehe unten)
Zudem sei genannt, dass die Unterscheidung Black-Box-Test vs. White-Box-Test teilweise von der Perspektive abhängt. Das Testen einer Teilkomponente ist aus Sicht des Gesamtsystems ein White-Box-Test, da für das Gesamtsystem aus der Außenperspektive keine Kenntnisse über den Systemaufbau und damit die vorhandenen Teilkomponenten vorliegen. Aus Sicht der Teilkomponente wiederum kann der selbe Test unter Umständen als Black-Box-Test betrachtet werden, wenn er ohne Kenntnisse über die Interna der Teilkomponente entwickelt und durchgeführt wird.
Soziale Aspekte
In der Praxis zeigen sich leider immer wieder soziale Aspekte bei der Umsetzung von Black-Box-Tests. Black-Box-Tests liefern messbare Ergebnisse in Zahlen und Fakten, die man einfach ausgedrückt als Produkt von Testumfang und Fehlergrad betrachten kann. Besonders umfangreiche Black-Box-Tests lassen Systeme schlechter aussehen als sie sind, lückenhafte Black-Box-Tests lassen Systeme besser aussehen als sie sind.
Vergleiche zwischen verschiedenen Produkten oder verschiedenen Abteilungen werden in der Praxis dabei gewollt oder ungewollt auf eben diesen subjektiven Ergebnissen angestellt, wobei die Nichteinbeziehung weiterer zu berücksichtigender Faktoren wie unterschiedlicher Spezifikationen in Qualität und Umfang das Ergebnis in einem einseitigen Licht darstellt.
Dies führt häufig zu sozialen Spannungen zwischen Testern und Entwicklern oder Entwicklern unterschiedlicher Abteilungen. Starke soziale Spannungen dieser Art sind jedoch kein Grund, auf Black-Box-Tests zu verzichten, sondern deuten vielmehr auf ein mangelndes Verständnis für Tests und ihre Notwendigkeit, also ein mangelndes Qualitätsbewusstsein hin. Es ist ein Kennzeichen guter Führung in der Software-Entwicklung, diese Spannungen durch Motivation in Bezug auf die Softwarequalität zu reduzieren und die verbleibenden Spannungen positiv zu Gunsten aller Beteiligter zu kanalisieren.
Auswahl der Testfälle
Repräsentatives Testen
Alle Funktionen werden entsprechend der Häufigkeit, mit der sie später im Einsatz sein werden, getestet.
Schwachstellen-orientiertes Testen
Man beschränkt sich auf intensives Testen jener Funktionen, bei denen die Wahrscheinlichkeit eines Auftretens von Fehlern hoch ist (komplexe Algorithmen, Teile mit ungenügender Spezifikation, Teile von unerfahrenen Programmierern, ...).
Schadensausmaß-orientiertes Testen
Man beschränkt sich auf intensives Testen von Funktionen, bei denen Fehler besonders gravierend sind (z.B. Verfälschung oder Zerstörung einer umfangreichen Datei).