FIT
http://FIT.c2.com
GNU General Public License
FIT für Java in Version 1.1
21.04.2012
FIT ist ein Werkzeug zum Testen von Software, welche in Java, C++, .NET, Python, Perl, Smalltalk und Ruby geschrieben ist.
Dabei geht FIT einen eher unkonventionellen Weg, indem die Tests nicht in der jeweiligen Programmiersprache geschrieben werden,
sondern nur eine Methode/Funktion programmiert wird, welche durch FIT aufgerufen wird.
Diese wird dann mit Werten ausgeführt, die in einer HTML-Tabelle stehen. Das Ergebnis wird ebenfalls in eine HTML-Datei geschrieben.
Dies sorgt dafür, dass nur derjenige programmieren können muss, der die Schnittstelle ausprogrammiert.
Zudem gibt es zahlreiche "FitTools", die helfen, Fit besser bedienbar machen. So gibt es z.B. eine graphische Oberfläche
oder eine wikibasierte IDE.
Die Person, welche die eigentlichen Tests entwickelt, sprich die Werte einfügt, muss nicht programmieren können.
Um aussagekräftige Tests zu bekommen, ist es aber natürlich unerlässlich, dass der Tester die Grundlagen der Softwaretechnik
beherrscht und die zu testenden Werte entsprechend geschickt wählt.
Das Arbeiten mit FIT funktioniert nach einiger Einarbeitung in das doch eher ungewöhnliche Konzept sehr gut. Interessant für den
Einsatz in großen Projekten macht FIT vor allem, dass die Entwickler nur eine Methode für die zu testende Funktion bereitstellen
müssen. Die eigentliche Ausarbeitung der Testwerte und der Ergebnisse kann dann durch anderes, eventuell programmiertechnisch weniger
qualifiziertes Personal erfolgen. Da sich die komplette Interaktion darauf beschränkt, das Programm auf der Kommandozeile aufzurufen, ist
es gut geeignet, in Skripte jeder Art eingebunden zu werden. Der Einsatz in kleinen Projekten sollte abgewogen werden, da der Vorteil des
unterschiedlich qualifizierten Personals sich in Luft auflöst, wenn nur programmiertechnisch ausgebildetes Personal zum Team gehört.
Hier ist JUnit eindeutig im Vorteil.
Weniger schön ist der Umfang der Testmöglichkeiten. Der Funktionsumfang von FIT beschränkt sich quasi auf ein assertEquals()
und das Fangen von Exceptions. Auch das Überprüfen von mehreren aufeinanderfolgenden Werten muss einzeln geschehen, Schleifen sind
nicht möglich, da jeder Wert einzeln aus der HTML-Datei gezogen wird und das Ergebnis anschließend auf Gleichheit mit dem erwarteten
Wert aus der Tabelle überprüft wird.
Als letzter Kritikpunkt bleibt der Einsatz der HTML-Datei. Hier wäre es wohl sauberer gewesen, auf eine XML-Datei, welche die Tabellen
enthält, zurückzugreifen, anstatt die Testfälle in doch recht fehlerträchtige HTML-Tabellen zu verpacken, die von den
meisten Browsern auch dann noch korrekt dargestellt werden, wenn FIT schon lange kapituliert hat.
Mit FIT können Tests für die meisten aktuellen Programmiersprachen entwickelt werden. Da FIT ausschließlich von der Konsole
aus läuft, ist es optimal geeignet für den Einsatz in Batchdateien oder Ant-Skripten bzw. der Äquivalente dazu in anderen
Programmiersprachen. Aufgrund der Tatsache, dass man zum Entwickeln der Tests nicht programmieren können muss, ist FIT für den
Einsatz in großen Projekten geeignet, wo unterschiedlich qualifiziertes Personal zur Verfügung steht. Für kleinere Projekte
sind Werkzeuge, die sich direkt aus der Entwicklungsumgebung anwenden lassen, wie JUnit oder TestNG eventuell besser geeignet.
FIT lässt sich ohne zusätzliche Software anwenden. Dadurch, dass es direkt von der Kommandozeile ausgeführt wird, ist es in
nahezu jeder Umgebung einsetzbar.
Um die hier getestete Java-Version von FIT zu verwenden, muss die in dem auf der Projektseite beziehbaren Zip-Archiv vorhandene Datei
fit.jar in das Projekt eingebunden werden. Danach lassen sich die Testklassen anlegen. Um die Tests auszuführen, ist
ebenfalls nur die FIT.jar notwendig, die direkt auf der Kommandozeile ausgeführt wird.
Um Fit verwenden zu können, muss die Bibliothek fit.jar eventuell noch im "CLASSPATH" ergänzt werden.
Linux/Ubuntu:
- Für die Dauer der aktuellen Session:
export CLASSPATH=$CLASSPATH:Pfad/zu/fit.jar
- Für eine dauerhafte Nutzung: Die versteckte Datei
.basrc
im aktuellen Homeverzeichnis per Texteditor öffnen und
anschließend am Ende der Datei den Befehl export CLASSPATH=$CLASSPATH:Pfad/zu/fit.jar
ergänzen
Die in Englisch geschriebene Dokumentation auf der Projektseite ist nicht immer so detailliert, wie man es sich wünscht. Auch wurde
nicht durchgängig mit einer Version gearbeitet. So ist ein Beispiel in C++, das nächste in Java, was nicht unbedingt zum besseren
Verständnis beiträgt. Besonders unangenehm fällt auf, dass manche Dinge nur am Rande erwähnt werden und sich dadurch nur
schwer finden lassen, wenn man explizit danach sucht.
Die dem Java-Paket beiliegende README enthält eine kurze, javabezogene Einführung in die Benutzung anhand von vielen Beispielen.
Aber auch hier wurde leider ein wenig mit den Erklärungen gespart. Allgemein lässt sich sagen, dass man beim Durcharbeiten der
Dokumentation häufig das Gefühl hat, dass man nicht alles erfahren hat, was es zu diesem Thema zu wissen gibt.
Die Projektseite hat ihre letzte Erneuerung im Oktober 2007 erhalten. Auch die aktuelle Version von FIT ist von diesem Datum und daher nicht
die Frischeste. Da FIT aber nicht mit anderer Software interagiert und die Version 1.1 einen ausgereiften Eindruck hinterlässt, besteht
kein Grund zur Sorge, dass FIT in naher Zukunft unbenutzbar sein wird.
Auf der Projektseite findet sich eine gut frequentierte Mailinglist sowie die EMai-Adressen der Projektverantwortlichen. Ein Forum existiert
nicht. Die bei Yahoo gehostete Mailinglist kann ohne Anmeldung durchsucht werden und bietet Antworten auf zahlreiche Fragen und Probleme, welche
im Umgang mit FIT entstehen können.
Das Konzept, HTML-Dateien zu schreiben, die von FIT nach Tabellen durchsucht werden, welche in "Fixtures" umgewandelt werden, ist zunächst
gewöhnungsbedürftig, vor allem da FIT bei vielen Punkten sehr großzügig über "Unschönheiten" wie Freitext
zwischen den Tabellen in der HTML-Datei hinwegsieht, bei anderen Dingen dann aber sehr penibel reagiert. Hier hilft teilweise nur ein Blick in
die Mailinglist. Da die Software schon eine Weile existiert, findet sich meist ein anderer Anwender, welcher das selbe Problem ebenfalls hatte.
Alternative Eingabemöglichkeiten
Durch die oben beschriebene bedingte intuitive Nutzbarkeit wurde nach alternativen Eingabemöglichkeiten für die .html-Dateien gesucht. Im Folgenden sollen zwei dargestellt werden:
Testdateien erstellen mit Microsoft Word
Es ist möglich Testtabellen in Microsoft Word zu erstellen. Dies erleichtert die Arbeit mit dem FIT- Framework.
Die Erklärung bezieht sich auf Microsoft Word 2010 ist aber auch problemlos mit anderen Textverabeitungssoftware zu realisieren.
1.) Erstellen Sie eine normale Tabelle, die später mit Funktionen und Werten gefüllt werden soll.
Unter Word ist diese Funktion unter Einfügen->Tabelle zu finden.
Für unser Arithmetik-Beispiel benötigen wir eine 6x6 Tabelle.
2.) Anschliesend füllen Sie die Tabelle mit den nötigen Werten. Dabei ist es wichtig die Struktur einzuhalten, damit das FIT-Framework
die Werte einlesen kann. In der ersten Zeile muss der komplette(!) Pfad inclusive Testklasse hinterlegt werden(1). Darunter werden die Variablen (x,y) und die zu testenden Werte eingetragen(3).
Auf der rechten Seite werden die Methoden mit den richtigen Ergebnissen händisch eingetragen(2).
Der erste Testfall wäre hier beispielsweise:
x=1,y=1; plus(1,1), erwartet:2; minus(1,1), erwartet:0; mult(1,1), erwartet:1; div(1,1), erwartet:1;
3.) Nachdem Sie alle Testfälle eingetragen haben, speichern Sie die Worddatei als .html-File.
Nun können sie die erstellte Datei (hier:"wordinput.html") für die FileRunner Klasse nutzen. Wichtig ist, dass sie im Rootverzeichnis Ihres Projektes liegt.
Generierte input.html
Mithilfe eines Online-Scripts können relativ einfach input-Dateien generiert werden.
Es muss lediglich eingegeben werden, wie viele Variablen und Funktionen in der Testklasse vorhanden sind, wie viele Tests durchgeführt werden sollen und die Lokation der Testklasse.
Danach müssen in eine Tabelle nur noch die Variablenwerte und die Funktionswerte eingetragen werden und eine input.html-Datei wird automatisch generiert und kann heruntergeladen werden.
Script in Vollansicht
Bei der Automatisierbarkeit profitiert FIT von seinem Kommandozeileninterface. Mit einem einzelnen Befehl lässt sich die komplette Testsammlung
ausführen und das Ergebnis in eine HTML-Datei schreiben. Dadurch lässt sich FIT quasi überall einbinden, wo Befehle auf die
Kommandozeile abgesetzt werden können. Der Einsatz in Batchdateien ist hierbei das einfachste Szenario, aber auch die Einbindung in Ant
oder das automatisierte Ausführen bei einem Check-In in ein SVN Repository sind möglich.
Zuerst wird eine Klasse benötigt, die getestet werden soll. In diesem Beispiel wird eine Klasse verwendet, die einfache, mathematische Berechnungen
absolviert.
public class Arithmetik {
public int addMe (int x, int y){
return x + y;
}
public int subMe (int x, int y){
return x - y;
}
public int mulMe (int x, int y){
return x * y;
}
public int divMe (int x, int y){
return x / y;
}
}
Die Klasse FitTest
wird verwendet um die arithmetischen Methoden zu testen. Dafür muss die Klasse von einem "Fixture" erben.
In diesem Beispiel erbt FitTest
von "ColumnFixture", um die Werte Spaltenweise einzulesen.
Die Variablen "x" und "y" nehmen den jeweiligen Wert aus der HTML-Tabelle an.
Nun wird ein ein Objekt der Klasse "Arithmetik" erzeugt und anschließend die zu testenden Methoden aufgerufen.
Der jeweilige Rückgabewert wird mit dem eingetragenen, erwarteten Wert in der Tabelle verglichen.
public class FITTest extends ColumnFixture{
// Variablen des HTML-Dokuments, nehmen die Testwerte an
public int x;
public int y;
// Testobjekt fuer einfache, mathematische Funktionen
Arithmetik ari = new Arithmetik();
// Testmethoden zum Testen der Objektmethoden
public int plus () {
return ari.addMe(x, y);
}
public int minus () {
return ari.subMe(x, y);
}
public int mult () {
return ari.mulMe(x, y);
}
public int div () {
return ari.divMe(x, y);
}
}
Der nächste Schritt sieht nun vor, die einzelnen Testfälle und die Testklasse in eine HTML-Datei zu schreiben.
Die erste Zeile gibt die Position der Testklasse an. Alle benötigten Klassen müssen als *.class
Dateien vorliegen.
In der folgenden Spalte werden die Variablen und Methoden benannt, die aus Identifikationgründen identisch
mit denen der Java-Testklasse sein müssen.
Die Werte der x- und y-Spalten stellen die zum Testen verwendeten Eingabewerte dar.
Innerhalb der Methodenspalten sind die zu erwartenden Rückgabewerte eingetragen.
Tests durchführen
Um die Tests durchzuführen sollten nun die input- und output-Dateien und die Klasse FIT-FileRunner in das Eclipseprojekt eingebunden werden.
Dazu muss ein Rechtsklick auf das Projekt gemacht und danach auf "Run As" -> "Run Configurations..."
Nun muss eine neue Konfiguration erstellt werden, in der die Klasse FIT-FileRunner als Main-Klasse ausgewählt ist.
Jetzt müssen nur noch unter "Configurations" die input- und output-Dateien angegeben werden.
Nach einem Klick auf "Run" werden die Tests durchgeführt.
Grüne Felder sind bestandene, rote Felder fehlgeschlagene Tests. Tritt eine Exception auf, wird diese in dem entsprechenden Testfall,
eingetragen.
Das komplette Beispiel steht ebenfalls zum Download bereit:
FIT_Testprogramm.tar.gz
keine
Zurück zur KombiQu-Werkzeugübersicht
Zurück zur KombiQu-Hauptseite