Modultests in der Software-Qualitätssicherung: Mit Unit-Tests den Fehlern auf der Spur
Mithilfe von Modultests, oft auch Unit-Tests oder Komponententests genannt, testet man einzelne Komponenten von Computerprogrammen. Man untersucht dabei die Einzelteile auf ihre korrekte Funktionalität, bevor sie ihren Platz im Gesamtkonzept einer Software einnehmen. Mithilfe dieser Tests kann man relativ schnell und unkompliziert prüfen, ob die Komponenten so arbeiten wie vom Entwickler vorgesehen. Modultests zählen zu den effektivsten Wegen, möglichst viele Fehler im Code schon frühzeitig aufzudecken.
Modultests spielen eine wichtige Rolle bei der Qualitätssicherung von Software. Vor allem in der agilen Software-Entwicklung setzt man verstärkt auf diese Methode, meist strebt man eine sehr häufige Ausführung von Komponententests an. Auch deshalb werden sie automatisiert durchgeführt. Entsprechende Programme führen auf Knopfdruck beliebig viele Modultests aus. Üblicherweise ist das verwendete Testprogramm in der gleichen Sprache wie das Testobjekt selbst geschrieben.
Modultests spielen eine wichtige Rolle bei der Qualitätssicherung von Software. Vor allem in der agilen Software-Entwicklung setzt man verstärkt auf diese Methode, meist strebt man eine sehr häufige Ausführung von Komponententests an. Auch deshalb werden sie automatisiert durchgeführt. Entsprechende Programme führen auf Knopfdruck beliebig viele Modultests aus. Üblicherweise ist das verwendete Testprogramm in der gleichen Sprache wie das Testobjekt selbst geschrieben.
Wofür nutzt man Modultests?
Man spricht häufig auch von Unit-Tests, da man die kleinsten Einheiten (engl. „units“) der Software überprüft. Und die kleinsten sinnvoll zu testenden Systemteile sind die Module.
Es empfiehlt sich, diese schon im frühen Entwicklungsprozess zu überprüfen, denn in der Modultestphase lassen sich Fehler relativ schnell und kostengünstig korrigieren. In späteren Phasen sind diese Prozesse mit höheren Kosten verbunden. Modultests beschäftigen sich vorrangig mit funktionalen Eigenschaften. Typischerweise führt der Entwickler die Tests selbst durch. Er stellt mit ihnen die Korrektheit von Funktionalitäten sicher.
Es empfiehlt sich, diese schon im frühen Entwicklungsprozess zu überprüfen, denn in der Modultestphase lassen sich Fehler relativ schnell und kostengünstig korrigieren. In späteren Phasen sind diese Prozesse mit höheren Kosten verbunden. Modultests beschäftigen sich vorrangig mit funktionalen Eigenschaften. Typischerweise führt der Entwickler die Tests selbst durch. Er stellt mit ihnen die Korrektheit von Funktionalitäten sicher.
Testumgebung bei Modultests
Eine wichtige Eigenschaft von Modultests ist ihre Isoliertheit. Der Test führt nur eine konkrete Funktion aus, während man alle äußeren Einflüsse wie die Kommunikation mit anderen Systemen zunächst außen vor lässt. Wechselwirkungen mit anderen Komponenten sind ausgeschlossen. So ist es möglich, auftretende Fehler eindeutig auf den isoliert getesteten Baustein zurückzuführen.
Man testet in einer sogenannten Stand-Alone-Umgebung. Diese spezielle Testumgebung muss man zunächst schaffen – was sich als relativ komplex und sehr zeitaufwändig erweist, möchte man dies manuell umsetzen. Da ein Modul kein selbstständig ausführbares Teil ist, benötigt man zum Testen einen sogenannten Test-Harnisch (engl. „test harness“). Erst zusammen mit diesem Test-Harnisch bildet das Testobjekt ein ausführbares Programm. Um eine realistische Testumgebung zu schaffen, setzt man Hilfsobjekte (Stubs) ein, die als Platzhalter dienen, wenn das zu testende Modul andere Komponenten zur Interaktion benötigt.
Man testet in einer sogenannten Stand-Alone-Umgebung. Diese spezielle Testumgebung muss man zunächst schaffen – was sich als relativ komplex und sehr zeitaufwändig erweist, möchte man dies manuell umsetzen. Da ein Modul kein selbstständig ausführbares Teil ist, benötigt man zum Testen einen sogenannten Test-Harnisch (engl. „test harness“). Erst zusammen mit diesem Test-Harnisch bildet das Testobjekt ein ausführbares Programm. Um eine realistische Testumgebung zu schaffen, setzt man Hilfsobjekte (Stubs) ein, die als Platzhalter dienen, wenn das zu testende Modul andere Komponenten zur Interaktion benötigt.
Test-Frameworks für Modultests
Das Ziel von Modultests ist es, Fehler innerhalb einzelner Komponenten nachzuweisen. Will man die Korrektheit des Codes über den gesamten Entwicklungszeitraum sicherstellen, wird man Unit-Tests ständig ausführen. Daher ist Automatisierung hier ein wichtiges Stichwort. Es gibt spezielle Software-Test-Frameworks (auch Modultestsoftware genannt - engl. Unit test frameworks), die der Durchführung von Modultests dienen. Für fast alle Programmiersprachen steht eine passende Modultest-Software zur Verfügung. Diese liest den Quelltext aus und überprüft ihn auf Fehler. Die oben beschriebene Testumgebung stellen die Tools automatisch her. Der Entwickler konzentriert sich auf das Definieren von Testfällen. Der Name der Modultest-Software orientiert sich meist an der Form „ProgrammierspracheUnit“. So gibt es beispielsweise JUnit für die Programmiersprache Java, CUnit für die Programmiersprache C oder JSUnit für die Programmiersprache JavaScript. In manchen Programmiersprachen ist das Testframework schon fester Bestandteil der Standard-Bibliothek, wie beispielsweise Unittest in Python. Eine ausführliche Liste mit verfügbaren Test-Frameworks für einzelne Programmiersprachen finden Sie hier.
Video: Modultest Beispiel in der Praxis
Im nachfolgenden englischsprachigen Video wird noch einmal zusammenfassend erklärt, was Unit Testing ist und wann man dieses einsetzt. Darüber hinaus wird anhand einer App ein Modultest Beispiel anhand eines Code-Abschnittes erklärt. Das Beispiel zeigt, wie man mit einem Unit Test ein Testfall erstellt und so gezielt einen Fehler aufspüren kann.