Name

FIT

Homepage

http://FIT.c2.com

Lizenz

GNU General Public License

Untersuchte Version

FIT für Java in Version 1.1

Letzter Untersuchungszeitpunkt

21.04.2012

Kurzbeschreibung

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.

Fazit

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.

Einsatzgebiete

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.

Einsatzumgebungen

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.

Installation

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:

Dokumentation

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.

Wartung der Projektseite

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.

Nutzergruppen und Support

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.

Intuitive Nutzbarkeit

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.


fit_input


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;


fit_word_Werte
3.) Nachdem Sie alle Testfälle eingetragen haben, speichern Sie die Worddatei als .html-File.


fit_word_save


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.


fit_word_Werte
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

Automatisierung

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.

Einführendes Beispiel

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.

fit_input

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.

fit_output

Das komplette Beispiel steht ebenfalls zum Download bereit: FIT_Testprogramm.tar.gz

Detaillierte Beschreibung

Literatur

keine

Zurück zur KombiQu-Werkzeugübersicht
Zurück zur KombiQu-Hauptseite