Michael HönnigMichael Hönnig
Unit-Tests sind in den meisten Java-Projekten schon selbstverständlich. Doch womit testet man eigentlich seine Unit-Tests? Die Code-Coverage alleine ist kein guter Maßstab, besagt diese doch noch nichts über die Wahrscheinlichkeit aus, mit der fehlerhafte Ergebnisse erkannt werden. Sollen doch sogar schon Unit-Tests ganz ohne Asserts geschrieben worden sein! Die Unzulänglichkeit von Unit-Tests kann mit so genannten Mutationstests aufgedeckt werden. Einige Werkzeuge für solche Tests werden hier kurz vorgestellt. Mutationstests verändern die "Class under Test" (CUT) auf verschiedene Art und Weise. Z.B. werden "+" durch "-" ausgetauscht, "<" durch "<=" oder aus einem numerischen Literal 1 wird 0. Gute Unit-Tests sollten bei diesen Mutanten fehlschlagen. Je nachdem wie viele Mutationen erkannt werden entsteht so ein Qualitätsmaßstab für die Unit-Tests. Nicht geprüft wird dabei selbstverständlich, ob von den Unit-Tests überhaupt alle Anforderungen abgedeckt sind. An Werkzeugen für Mutations-Tests habe ich folgende gefunden:
Name/URL Lizenz Mutation Anmerkungen
JesTer BSD-ähnlich Source-Code
Judy proprietär Source-Code
µJava ? Source-Code nur bis Java 1.4, Eclipse-Plugin vorhanden (muJava)
Jumble GPL2 Byte-Code auch Java 6, JUnit4, Eclipse-Plugin vorhanden
Am interessantesten erscheint mir Jumble, welches zum einen auch die aktuelle Java- und JUnit- Version unterstützt (wenn auch derzeit nur selbstgebaut aus dem Subversion-Repository), und zum anderen sehr schnell ist, weil es Mutationen auf der Eben des JVM Byte-Code erstellt. Zu Jumble wird es daher in Kürze einen konkreteren Artikel geben.