White-Box-Test
Ein White-Box-Test ist eine Softwaretestmethodik, die den Quellcode eines Programms verwendet, um Tests und Testfälle für die Qualitätssicherung (Quality Assurance, QA) zu entwerfen. Beim White-Box-Test ist die Codestruktur dem Tester bekannt und wird von ihm verstanden, im Gegensatz zum Blackbox-Test, einer Methodik, bei der die Codestruktur dem Tester nicht bekannt ist, und dem Graybox-Test, einem Ansatz für Qualitätssicherungstests, bei dem der Tester eine gewisse Codestruktur bekannt ist und eine andere nicht.
Beim White-Box-Testen werden das interne Framework und die Komponenten einer Anwendung unter die Lupe genommen, um die interne Struktur und das Design der Software zu testen. Aus diesem Grund wird White-Box-Testing auch als transparentes oder Glasbox-Testing bezeichnet. Dieser Testtyp kann bei Unit-, System- und Integrationstests angewendet werden.
Beim White-Box-Test werden in der Regel mögliche Ausführungspfade durch den Code nachverfolgt und es wird herausgefunden, welche Eingabewerte die Ausführung dieser Pfade erzwingt. Der Tester, bei dem es sich in der Regel um den Entwickler handelt, der den Code geschrieben hat, verifiziert den Code entsprechend seinem Design - daher ist die Vertrautheit mit dem Code wichtig für denjenigen, der den Test initiiert.
Der Code wird getestet, indem Eingabewerte durch den Code laufen, um festzustellen, ob die Ausgabe dem entspricht, was zu erwarten ist. Tester können die kleinste Anzahl von Pfaden ausarbeiten, die zum Testen des gesamten Codes erforderlich sind, oder den gesamten Code abdecken. Statische Analysewerkzeuge helfen bei dieser Aufgabe.
White-Box-Tests allein können Probleme, die durch Abweichungen zwischen den tatsächlichen Anforderungen oder der Spezifikation verursacht werden, nicht ermitteln, aber sie können helfen, Designschwächen im Code zu identifizieren. Beispiele hierfür sind Kontrollflussprobleme (zum Beispiel geschlossene oder unendliche Schleifen oder nicht erreichbarer Code) und Datenflussprobleme.
Die statische Codeanalyse (durch ein Tool) kann ebenfalls diese Arten von Problemen finden, hilft dem Tester/Entwickler aber nicht, den Code in dem Maße zu verstehen, wie es das persönliche Design von White-Box-Testfällen erreicht. Zu den Tools, die beim Testen von White-Box-Testfällen helfen, gehören die Testtools von Veracode, Googletest, Junit und RCUNIT.
Vor- und Nachteile
Zu den Vorteilen des White-Box-Tests gehören:
- Gründliches Testen;
- unterstützt automatisierte Tests;
- Tests und Testskripte können wiederverwendet werden;
- das Testen wird in früheren Entwicklungsstadien unterstützt;
- optimiert den Code, indem unnötiger Code entfernt wird;
- hilft bei der Suche nach Fehlern oder Schwächen im Code.
Zu den Nachteilen gehören:
- Testfälle sind oft nicht repräsentativ dafür, wie die Komponente verwendet wird;
- White-Box-Tests sind oft zeitaufwendig, komplex und teuer;
- es werden Tester mit internen Kenntnissen über die Software benötigt;
- wird die Software häufig implementiert, ist die Methode kosten- und zeitintensiv.
White-Box-Tests versus Blackbox-Tests
Der Blackbox-Test ist die dem White-Box-Test entgegengesetzte Form des Tests. Beim Blackbox-Testing kennt man das Innenleben der Anwendung nicht. Blackbox-Tests entwerfen Testfälle, die alle für die Komponente spezifizierten Anforderungen abdecken, und verwenden anschließend ein Monitoring Tool für die Codeabdeckung, um aufzuzeichnen, wie viel des Codes ausgeführt wird, wenn die Testfälle ausgeführt werden.
Im Gegensatz zu White-Box-Tests benötigen Blackbox-Tests keine Entwickler, die am Code gearbeitet haben. Die Tester müssen lediglich mit den Funktionen der Software vertraut sein. Weitere Unterschiede zwischen Blackbox- und White-Box-Tests bestehen darin, dass Blackbox-Tests auf Anforderungsspezifikationen und nicht auf Design- und Strukturspezifikationen basieren. Blackbox-Tests können sowohl auf System- und Akzeptanztests als auch auf Unit- und Integrationstests angewandt werden.
Graybox-Tests werden häufig für interne Softwarestrukturen verwendet, bei denen es sich eigentlich nicht um Quellcode handelt.