JUnitLoop automatisiert die Ausführung von Unit-Tests, JLoop beschleunigt manuelles Testen

JUnitloop: Test-driven Development meets Instant Feedback

Mirko Seifert, Christian Wende und Jendrik Johannes

Michael C. Feathers prophezeit in seinem Buch „Working Effectively with Legacy Code“, dass es in nicht allzu ferner Zukunft eine IDE geben wird, die bei jedem Tastendruck nicht nur den Compiler startet, um Code statisch auf Korrektheit zu prüfen, sondern auch gleich alle relevanten Unit Tests ausführt und so prüft, ob der Code das erwartete Verhalten zeigt. Das Open-Source-Plug-in JUnitLoop ist angetreten, diese Vision in Eclipse zur Realität werden zu lassen.

JUnitloop im Eclipse Magazin

Der Artikel „Test-driven Development meets Instant Feedback“ von Mirko Seifert, Christian Wende und Jendrik Johannes ist erstmals erschienen im Eclipse Magazin 6.2012.

www.eclipse-magazin.de

Einen wesentlichen Teil unserer Zeit verwenden wir beim Entwickeln darauf, Code zu schreiben und dann zu prüfen, ob dieser Code auch das macht, was wir von ihm erwarten. Das heißt, wir validieren, ob ein neues Feature wie gewünscht funktioniert oder ein Fehler in einer bestimmten Situation nicht mehr auftritt. Dabei durchlaufen wir, sehr vereinfacht gesagt, immer wieder den gleichen Zyklus: Code schreiben, Code testen, Code schreiben, Code testen, Code schreiben, Code testen. Idealerweise besteht das Testen dabei ebenfalls aus dem Schreiben von Code, nämlich dem Schreiben von Testcode, und bildet zudem noch den ersten Schritt im Zyklus (Test First). Im ungünstigeren Fall besteht das Testen aus einer manuellen Eingabe von Daten und der Beobachtung von Ausgaben (textuell oder grafisch) auf dem Monitor.

Obwohl wir genau diesen Zyklus, diesen Kreislauf des Kodierens und Testens, täglich viele hundert Male durchlaufen, bieten IDEs wenig explizite Unterstützung dafür an. Üblicherweise verändert man den Code einer Klasse, speichert sie und führt dann den dazugehörigen Unit Test manuell aus. Das entspricht dem Vorgehen früherer IDEs, die Code nur auf explizite Anweisung des Entwicklers hin kompiliert haben. Heute übersetzt fast jede IDE den eingegebenen Code sofort ohne Aufforderung, und kaum ein Entwickler wird diese Funktion noch missen wollen.

Neben dem Effekt, einige Tastenanschläge zu sparen, hat das automatische Ausführen von Tests aber auch noch weitere Vorteile: Sind noch andere Tests von einer Änderung betroffen, werden sie meist erst nach dem Commit auf dem CI-System ausgeführt. Als Entwickler hat man ja selten alle Testfälle im Kopf, die direkt oder indirekt von einer Änderung an einer Klasse betroffen sein könnten. Je nachdem, wie lange ein Build auf dem CI-System dauert, können Minuten, manchmal Stunden vergehen, bis man als Entwickler über einen fehlgeschlagenen Test informiert wird. Will man das Problem beheben, muss man sich erst wieder in den entsprechenden Code hineindenken, eine Aufgabe, die in jedem Fall lästig ist und unter Umständen sehr viel Zeit und Ressourcen fressen kann.

Hat man keine Unit Tests für einen bestimmten Teil seiner Anwendung, was an sich schon genug Probleme mit sich bringt, ist man zum manuellen Testen gezwungen. Hierzu muss die Applikation immer wieder neu gestartet werden, man muss sich zu einem bestimmten Programmteil vorarbeiten (z. B. durch Auswahl bestimmter Menüs und Beantwortung verschiedener Dialoge), um dann zu prüfen, ob die Oberfläche (GUI oder Konsole) die erwartete Ausgabe zeigt. Verwendet man keinen WYSIWYG-Editor für GUIs, strapaziert die Erstellung einer Oberfläche nicht selten erheblich den RUN-Button.

Sowohl das Entwickeln mit automatisierten Tests als auch das manuelle Validieren von Code laufen also immer nach dem gleichen Prinzip ab. Auf genau dieser Erkenntnis beruhen die zwei Eclipse Plug-ins JLoop und JUnitLoop [1], die in diesem Artikel vorgestellt werden sollen. Beide Plug-ins sind frei unter der EPL verfügbar, der Sourcecode kann über GitHub bezogen werden [2]. Die Installation ist über den Eclipse Marketplace [3], [4] oder über die auf der Website [1] angegebene Update-Site möglich.

Geschrieben von
Mirko Seifert, Christian Wende und Jendrik Johannes
Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.