White Box-Tests

White Box-Tests
6 MIN
12 Sep. 2023

Tests sind in der Softwareentwicklung unerlässlich, um die Lieferung qualitativ hochwertiger und fehlerfreier Softwareprodukte zu gewährleisten. Tester verwenden verschiedene Softwaretesttechniken, um verschiedene Probleme, Bugs und Fehler in Softwareprodukten zu identifizieren. Eine davon ist das White-Box-Testing. Sie befasst sich mit der Bewertung der internen Struktur der Software und der Implementierungsdetails.

In diesem Artikel werden wir die grundlegenden Aspekte von White-Box-Tests behandeln.

Was ist White Box Testing?

White-Box-Tests sind eine Software-Testtechnik, die das interne Design des Systems, die Struktur des Quellcodes, die verwendeten Datenstrukturen und die Arbeitsdetails testet. Ihr Hauptziel ist die Verbesserung von Softwaredesign, E/A-Fluss, Benutzerfreundlichkeit und Sicherheit. Sie wird auch als Transparenzprüfung, Strukturprüfung und Glaskastenprüfung bezeichnet.

Die Umsetzung dieser Testtechnik erfordert, dass die Tester mit dem Systemcode, seiner Architektur und den Implementierungsdetails vertraut sind. Auf der Grundlage dieses Wissens erstellen sie Testfälle und führen sie aus, um die Korrektheit des Systems auf Code-Ebene zu überprüfen. Daher werden diese Tests auch als codebasierte Tests bezeichnet.

Im Allgemeinen führen die Entwickler White-Box-Tests durch. Sie müssen den Quellcode und die Funktionsweise der Software vollständig verstehen. In einigen Fällen kann sie jedoch auch von Qualitätssicherungsexperten (QA) und Testern durchgeführt werden, die komplexen Code verstehen.

Diese Testtechnik wird „White Box“ genannt, weil die Entwickler oder Tester das Innenleben des Systems von außen betrachten.

Es wird auf den ersten beiden Ebenen des Softwaretests angewandt – dem Unit-Test und dem Integrationstest. Beim Unit-Testing wird jedes Softwaremodul einzeln geprüft. Beim Integrationstest werden die zu testenden Module logisch miteinander verbunden und ihre Interaktion oder Kommunikation getestet.

Eigenschaften

  • Zugang zum Quellcode: White-Box-Tests ermöglichen den Zugriff auf den Quellcode der Software. Dies hilft bei der Überprüfung der einzelnen Funktionen und Module.
  • Analyse der Codeabdeckung: Die Codeabdeckung ist eine Metrik, die den Umfang des während der Tests ausgeführten Codes bestimmt. Bei White-Box-Tests wird die Codeabdeckung analysiert und nicht getestete Bereiche des Quellcodes aufgedeckt.
  • Erkennung von Logikfehlern: hilft bei der Erkennung von Logikfehlern wie Endlosschleifen und falschen bedingten Anweisungen.
  • Code-Optimierung: Zeigt Leistungsprobleme, verbesserungsbedürftige Bereiche des Codes und andere Probleme auf. Entwickler oder Tester arbeiten daran, diese Probleme zu beheben und den Quellcode zu optimieren.
  • Sicherheitstests: Entwickler oder Tester haben Zugang zum Quellcode der Software und kennen ihr Innenleben. Daher können sie Sicherheitsschwachstellen erkennen.

Was wird bei White-Box-Tests überprüft?

Beim White-Box-Testing wird der Software-Quellcode ausgewertet, um die folgenden Parameter zu überprüfen:

  • Interne Sicherheitsschwachstellen.
  • Jedes Objekt, jede Funktion und jede Quellcodeanweisung einzeln.
  • Funktionsweise der bedingten Zyklen.
  • Beschädigte, unvollständige und schlecht strukturierte Codepfade.
  • Eingabe- und Ausgabefluss.

Kurz gesagt, diese Testtechnik verifiziert den Software-Workflow. Dabei werden eine Reihe von Eingaben gemacht und die erwarteten mit den tatsächlichen Ergebnissen verglichen. Wenn die tatsächliche Ausgabe nicht mit der erwarteten Ausgabe übereinstimmt, führt dies zu einem Fehler oder einer Störung.

Wie führt man White-Box-Tests durch?

Im Allgemeinen verifizieren Entwickler oder Tester Anwendungen mit dieser Softwaretesttechnik in zwei Schritten:

  1. Quellcode-Analyse – der grundlegende Schritt ist das Verstehen und Analysieren des Quellcodes der Anwendung. Tester oder Entwickler, unabhängig davon, wer die Tests durchführt, sollten ein detailliertes Verständnis der inneren Funktionsweise der Anwendung und der Struktur des Quellcodes haben. Darüber hinaus sollten sie die Einführung sicherer Kodierungspraktiken in Erwägung ziehen, indem sie die Sicherheit zu einem vorrangigen Faktor machen.

Dies wird ihnen helfen, effektive Testfälle zu erstellen, um potenzielle Sicherheitslücken aufzudecken und einen maximalen Prozentsatz an Testabdeckung zu gewährleisten.

  1. Erstellen und Ausführen von Testfällen – Tester oder Entwickler erstellen und führen mehrere kleine Testfälle aus, um einzelne Anwendungsprozesse zu testen. Dadurch wird sichergestellt, dass der Quellcode den richtigen Fluss und die richtige Struktur hat. Dieser Schritt erfordert jedoch sehr detaillierte Kenntnisse des Quellcodes. Daher wird sie in der Regel von Entwicklern durchgeführt.

Beispiel für White-Box-Tests

Wir wissen jetzt, dass der Zweck von White-Box-Tests darin besteht, die Struktur des Codes zu überprüfen, z. B. Schleifenanweisungen, bedingte Anweisungen, Entscheidungszweige usw. Wir werden es anhand eines einfachen Beispiels verstehen:

Test (a, b)
{
int n;
wenn (n % 2 ==0)
{
print("Ungerade Zahl")
}
sonst
{
print("Ungerade Zahl")
}
}

Um diesen Code zu überprüfen, haben wir die folgenden zwei Testfälle:

  • n = 25
  • n = 50

Für den ersten Testfall, n = 25, gilt die „wenn“-Bedingung nicht. Der Programmablauf bewegt sich daher zum ‚else‘-Block und gibt die darin enthaltene Anweisung aus. Im zweiten Testfall, n = 50, ist die „if“-Bedingung wahr und die darin enthaltene Anweisung wird ausgeführt.

Auf diese Weise durchlief das White-Box-Testing jede Zeile des Quellcodes der Anwendung und deckte mögliche Fehler auf Code-Ebene auf.

White-Box-Prüftechniken

Die verschiedenen Arten von White-Box-Testing-Techniken sind wie folgt:

1. Abdeckung der Erklärung

Bei dieser Technik müssen Sie jede Anweisung im Quellcode mindestens einmal durchgehen und testen. Infolgedessen wird der gesamte Quellcode geübt.

Die Anweisungsabdeckung bestimmt den Prozentsatz des Quellcodes, der von einer bestimmten Gruppe von Testfällen bearbeitet wird. Die Formel zur Deckung der Aussagen lautet:

Erfassungsgrad = (Anzahl der abgegebenen Erklärungen / Gesamtzahl der Erklärungen) * 100

2. Erfassungsbereich der Entscheidung/Filiale

Das beste Beispiel für eine Verzweigung (Entscheidungspunkt) in der Programmierung ist die „if“-Anweisung. Sie hat zwei Zweige – Wahr und Falsch. Die Technik der Verzweigungsabdeckung stellt sicher, dass jede Verzweigung im Quelltext mindestens einmal ausgeführt wird.

Die Verzweigungsabdeckung ist der Prozentsatz der Verzweigungen oder Entscheidungspunkte, die während des Tests ausgeführt werden.

Zweigabdeckung = (Anzahl der implementierten Zweige / Gesamtzahl der Zweige) * 100%

3. Bedingung Abdeckung

Beim Bedingungstest wird jede Bedingung sowohl auf TRUE als auch auf FALSE getestet. Um eine 100%ige Zustandsabdeckung zu erreichen, muss also jede Bedingung sowohl für TRUE als auch für FALSE Ergebnisse angewendet werden. Für n Bedingungen gibt es 2n Testskripte.

Das primäre Ziel der Bedingungsabdeckung ist es, die Ausgabe jeder Bedingung im Quellcode zu bestimmen. Es werden jedoch nur die Bedingungen mit logischen Operanden getestet, deren Ergebnis entweder wahr oder falsch ist.

4. Prüfung unter mehreren Bedingungen

Ihr Ziel ist es, alle möglichen Kombinationen der einzelnen Zustände in der Verzweigung zu testen. Lassen Sie uns dies anhand eines Beispiels erläutern.

wenn (A||B)  
drucken C

Die Testfälle für den obigen Code werden sein:

A=TRUE, B=TRUE

A=TRUE, B=FALSE

A=FALSE, B=TRUE

A=FALSCH, B=FALSCH

Unser Beispiel hat 2 Bedingungen – A und B und 4 Testfälle. Wenn es 3 Ausdrücke gäbe, wäre die Anzahl der Testfälle 8.

Für eine 100%ige Abdeckung benötigen wir also 2n Testskripte. Das ist sehr anstrengend und es ist sehr schwierig, eine 100%ige Abdeckung zu erreichen.

5. Pfadprüfung

Pfad-Tests stellen sicher, dass alle möglichen Pfade im Quellcode mindestens einmal ausgeführt werden. Dabei wird ein Kontrollflussdiagramm mit Hilfe von Quellcode oder einem Flussdiagramm erstellt. Später wird die zyklomatische Komplexität bestimmt, die sich auf unabhängige Pfade bezieht. Daher erstellen die Tester minimale Testfälle für solche unabhängigen Pfade.

Abdeckung der Fahrten = (Anzahl der durchgeführten Fahrten / Gesamtzahl der Fahrten im Programm) x 100 %

6. Prüfung von Schleifenzyklen

Zyklen sind gängige Programmkonstrukte und werden in den meisten großen Programmen verwendet. Zyklustests sind unerlässlich, da die Wahrscheinlichkeit von Fehlern am Anfang oder Ende eines Zyklus hoch ist. Daher werden bei der Durchführung von Tests Fehler oder Bugs in einem bestimmten Zyklus aufgedeckt. Der Hauptfehler, der bei den Zyklen auftritt, sind falsche Indizes.

Arten von White-Box-Tests

Hier sind die verschiedenen Arten von White-Box-Tests:

Unit-Testing: Dies ist die erste Stufe des Softwaretests. Es testet jedes Anwendungsmodul, eine sogenannte Unit, einzeln auf seine Korrektheit. Stellt sicher, dass jede Komponente die erwartete Leistung erbringt.

Integrationstests: Diese kommen nach den Einheitstests. Sie kombiniert die einzelnen getesteten Komponenten logisch und bestätigt das Zusammenspiel zwischen ihnen. Ihr Ziel ist es, Fehler im Zusammenspiel der Komponenten zu erkennen.

White-Box-Penetrationstests: Die Tester haben vollen Zugriff auf den Quellcode der Anwendung sowie auf Netzwerk-, IP- und Serverdaten, einschließlich Passwörtern und Karten. Das Hauptziel von Penetrationstests ist das Aufspüren von Bereichen des Quellcodes mit Sicherheitsschwächen.

White-Box-Mutationstests: Wie der Name schon sagt, hängen die Mutationstests von Änderungen ab. Die Tester nehmen geringfügige Änderungen am Quellcode vor, um sicherzustellen, dass bei der Ausführung der Testfälle keine Fehler gefunden werden. Wenn die Testfälle erfolgreich sind, deutet dies auf einen Fehler im Quellcode hin. Wenn die Testfälle jedoch fehlschlagen, ist der Quellcode fehlerfrei.

Vor- und Nachteile von White-Box-Tests

Lassen Sie uns nun die Vor- und Nachteile von White-Box-Tests klären.

Vorteile

  • White-Box-Tests sind umfassend und detailliert, da sie jede Zeile des Quellcodes ausführen.
  • Identifiziert potenzielle versteckte Schwachstellen, Bugs und Sicherheitslücken. Um sie zu beheben, müssen einige Zeilen des Quellcodes entfernt werden, was zu einer Optimierung des Codes führt.
  • Stellt sicher, dass der Quellcode mit den Codierungsstandards übereinstimmt und die Leistung optimiert.
  • Selbst wenn keine grafische Benutzeroberfläche zur Verfügung steht, beginnt das Testen schon früh im Lebenszyklus der Softwareentwicklung (SDLC).
  • Testfälle lassen sich leicht automatisieren.
  • Die Transparenz des Quellcodes hilft dabei, die genaue Art der für die Prüfung benötigten Eingabedaten zu bestimmen.
  • Prüfer oder Entwickler können Testfälle erstellen, um eine maximale Testabdeckung zu gewährleisten.

Benachteiligungen

  • White-Box-Tests erfordern tiefgreifende Programmierkenntnisse, um den Quellcode des Systems zu verstehen und zu analysieren und Testfälle zu erstellen.
  • Sie konzentriert sich in erster Linie auf die Prüfung der internen Funktionsweise des Systems.
  • Große Anwendungen erfordern viel Zeit für White-Box-Tests, da sie lange Quellcodes haben.
  • Eine kleine Änderung am Quellcode erfordert das erneute Schreiben von Testfällen.
  • Die Wahrscheinlichkeit, dass dies zu Produktionsfehlern führt, ist hoch.

White Box Testing Tools

Hier finden Sie eine Liste einiger häufig verwendeter White-Box-Tools:

  1. Veracode: bietet eine Reihe von Tools, die helfen, Fehler in Anwendungen zu identifizieren und zu beheben, die mit verschiedenen Programmiersprachen wie .NET, C++, Java usw. entwickelt wurden. Es kann auch Desktop- und mobile Anwendungen testen, um die Sicherheit zu gewährleisten.
  2. EclEmma: Es ist ein kostenloses Code Coverage Tool für Java-Anwendungen. Es wurde entwickelt, um Tests durchzuführen und die Ergebnisse in der Eclipse Workbench zu analysieren.
  3. JSUnit: JSUnit ist Teil von JUnit, einem Unit Testing Framework für Java-Anwendungen. JSUnit ist ein quelloffenes Unit-Testing-Tool für JavaScript-Tests. Es ist unter der GNU General License 2.0 verfügbar.
  4. NUnit: Es handelt sich um ein in C# entwickeltes Test-Framework zur Durchführung datengesteuerter Tests für .NET-Anwendungen. Es unterstützt die gleichzeitige Ausführung von Tests ohne manuelle Eingriffe.
  5. CppUnit: Es ist auch Teil von JUnit als JSUnit. Es ist für Unit-Tests in C++ verfügbar.

Der Unterschied zwischen White- und Blackbox-Tests

Die folgende Tabelle verdeutlicht die wichtigsten Unterschiede zwischen der Prüfung von schwarzen und weißen Schränken:

White Box-TestsBlack-Box-Tests
Erfordert Kenntnisse über die interne Struktur und Funktionsweise der Anwendung.Es sind keine internen Kenntnisse der Anwendung erforderlich.
Wir können viele detaillierte Aspekte der Anwendung testen.Wir testen die End-to-End-Funktionalität der Anwendung.
Diese Tests werden von Entwicklern oder QA-Fachleuten mit guten Kenntnissen der Programmierung und Anwendungsarchitektur durchgeführt.Die Blackbox-Tests werden von einem unabhängigen Qualitätskontrollteam durchgeführt.
Gilt für niedrigere Testebenen – Einheitstests und Integrationstests.Sie gilt für höhere Testebenen – Systemtests und Akzeptanztests, bei denen wir die Anwendung als Ganzes testen müssen.

Schlussfolgerung

White-Box-Tests sind eine Softwaretesttechnik, die von den Testern ein umfassendes Verständnis der inneren Funktionsweise und der Codestruktur einer Anwendung erfordert. Sie zeigt daher strukturelle und sicherheitstechnische Lücken auf. Das Hauptziel besteht darin, die Funktionalität und Korrektheit der Anwendung auf der Code-Ebene zu überprüfen.

Diese Testtechnik ist zwar zeit- und arbeitsaufwendig, aber die einzige Möglichkeit, um sicherzustellen, dass Sie jede Zeile Ihres Quellcodes testen. Wenn sie richtig durchgeführt werden, können White-Box-Tests die Qualität der Software erheblich verbessern.