Zum Inhalt springen

Modultest

aus Wikipedia, der freien Enzyklopädie
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 17. Februar 2006 um 12:42 Uhr durch 217.11.44.64 (Diskussion) (Visual Basic 6). Sie kann sich erheblich von der aktuellen Version unterscheiden.

Der Modultest (auch Komponententest oder engl. unit test) ist Teil eines Softwareprozesses (z.B. nach dem Vorgehensmodell des Extreme Programming). Er dient zur Validierung der Korrektheit von Modulen einer Software, z.B. von einzelnen Klassen. Als Voraussetzung für Refactoring kommt ihm besondere Bedeutung zu. Nach jeder Änderung sollte durch Ablaufenlassen aller Testfälle nach Programmfehlern gesucht werden. Beim testgetriebenen Entwicklung, auch TestFirst-Programmieren genannt, werden die Modultests parallel zum eigentlichen Quelltext erstellt und gepflegt. Dies ermöglicht bei automatisierten, reproduzierbaren Modultests die Auswirkungen von Änderungen sofort nachzuvollziehen. Der Programmierer entdeckt dadurch sicher ungewollte Nebeneffekte oder Fehler durch seine Änderung.

Ein Komponententest ist ein ausführbares Codefragment, das das sichtbare Verhalten einer Komponente (z.B. einer Klasse) verifiziert und dem Programmierer eine unmittelbare Rückmeldung darüber gibt, ob die Komponente das geforderte Verhalten aufweist oder nicht. Durch diese Rückmeldung wird die Wartbarkeit z.B. durch Refactoring vereinfacht bzw. erst ermöglicht. Komponententests sind ein wesentlicher Bestandteil der Qualitätssicherung in der Softwareentwicklung.

Modultests sind eine geeignete Vorstufe zu Integrationstests, welche wiederum zum Testen mehrerer, von einander abhängiger Komponenten im Zusammenspiel geeignet sind. Im Gegensatz zu Modultests werden Integrationstests meist manuell ausgeführt.

Testframeworks

Testframeworks gibt es mittlerweile für fast jede Programmiersprache. Oft haben die Namen dieser Frameworks die Form xyzUnit (z. B. JUnit für Java, siehe unten).

C

CUnit ist eine einfache Implementation des Frameworks für C. Es ist ein offenes Projekt unter SourceForge.

C++

CppUnit ist die Portierung von JUnit auf C++. Ursprünglich wurde es von Michael Feathers geschrieben, ist jetzt aber ein offenes Projekt unter SourceForge. Da er allerdings den Eindruck hatte, dass CppUnit mittlerweile zu kompliziert zu installieren war, entschied sich Feathers, die abgespeckte Variante CppUnitLite zu schreiben. Weitere Frameworks für Komponententests sind CxxTest und CppTest (beides ebenfalls offene Projekte unter SourceForge) sowie die Boost Test Library.

Delphi

DUnit ist eine Portierung von JUnit für Borland Delphi. In der aktuellen Version "Delphi 2005" wurde es von Borland als fester Bestandteil in die Entwicklungsumgebung aufgenommen.

Java

JUnit wurde für die Programmiersprache Java von Erich Gamma und Kent Beck geschrieben. (weitere Werkzeuge für Modultests: HttpUnit, Cactus, ...)

Lingo (Macromedia Director)

Für die interpretierte Skriptsprache Lingo in Macromedias Autorensystem Director gibt es das Framework LingoUnit, welches ebenfalls unter SourceForge geführt wird.

.NET

NUnit ursprünglich eine 1:1 Portierung von JUnit auf die Plattform .NET, insbesondere für C# und Visual Basic .NET. Wurde mittlerweile mit spezifischen .NET Features erweitert neu geschrieben und unterstützt alle .NET Sprachen.

PHP

PHPUnit ist die Portierung von JUnit auf PHP und wurde von Sebastian Bergmann geschrieben. Es ist Bestandteil von PEAR.

Simpletest (http://www.lastcraft.com) von Marcus Baker ist ebenfalls eine Portierung von JUnit, die um weitere Funktionen wie Mock Objects und Funktionen zum Testen von Web-Seiten erweitert wurde.

PL/SQL

utPLSQL ist ein UnitTest-Framework für PL/SQL welches ebenfalls unter SourceForge geführt wird.

Python

Unittest ist fester Bestandteil der Python Standard Bibliothek

Ruby

Unittest ist in der Standard-Bibliothek als Test::Unit oder RUnit verfügbar.

Smalltalk

Das vermutlich erste Framework zum Erstellen von Komponententests (SUnit) wurde von Kent Beck für die Programmiersprache Smalltalk geschrieben. Die Idee wurde schnell auf andere Programmiersprachen übertragen.

Tcl

Die Tcllib enthält das Modul tcltest für Modultests. Auch andere Test-Frameworks wurden in Tcl geschrieben, bekannt ist etwa DejaGnu, mit dem der gcc-Compiler getestet wird. Zudem kann man in wenigen Zeilen ein "Framework" selbst erstellen:

proc test {command expected} {
  catch {uplevel 1 $command} res
  if {$res ne $expected} {puts "$command->$res, not $expected"}
}

Tests (in eigenen Quelldateien, oder direkt beim Code) sehen dann so aus: man gibt eine Anweisung und das erwartete Ergebnis an. Wenn ein unerwartetes Ergebnis ausgewertet wird, so wird dies angezeigt:

test {expr 3 + 4} 7

Visual Basic 6

Die deutsche Firma Maaß Computertechnik aus Bochum hat das xUnit Framework für Visual Basic 6 implementiert und bietet dieses unter http://www.vbunit.org/ an.

vbUnit ist nicht vollkommen Open Source. In der kostenpflichtigen Version 3 Professional erhält man das Unit Testing Framework für Visual Basic 6 inklusive einem Microsoft Visual Studio 6 Add-on.

Die Basic Version von vbUnit wird unter der GNU Lesser Public Licence (LGPL) angeboten. D.h. dass man zu dieser Version sowohl die kompilierten Komponenten als auch den Quellcode erhält. Der TestRunner und das Add-on für Microsofts Visual Studio 6 in der Professional Version sind kostenpflichtig und nicht Open Source.

Literatur