Zum Hauptinhalt springen

Mutationstests für JUnit-Tests

Michael Hönnig
Autor
Michael Hönnig
Bis Herbst 2027 nur für Beratungsaufträge mit geringem Stundenumfang verfügbar – remote, auf Deutsch und Englisch.

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/URLLizenzMutationAnmerkungen
JesTerBSD-ähnlichSource-Code
JudyproprietärSource-Code
µJava?Source-Codenur bis Java 1.4, Eclipse-Plugin vorhanden (muJava)
JumbleGPL2Byte-Codeauch 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.