Dr. Andreas Borchert Abteilung Angewandte Informationsverarbeitung 09.02.2005
Norbert Heidenbluth Blatt 15


Uni Logo



Allgemeine Informatik I für Mathematiker/Wirtschaftsmathematiker
(WS 2004/2005)



Abgabetermin: 16. Februar 2005

Aufgabe 25: Test the west (5 Punkte)

In dieser Aufgabe können Sie sich 5 Punkte verdienen, ohne eine einzige Zeile Oberon-Code zu schreiben! Stattdessen besteht Ihre Aufgabe diesmal darin, Fehler zu finden, die wir in bestehende Programme eingebaut haben. Wenn das kein Geschenk zum Ende des Semesters ist$\ldots$!

Auf unserem FTP-Server finden Sie die Binaries für Solaris und Linux verschiedener Implementierungen des Shellsort-Programms vom letzten Übungsblatt als TAR-Archiv. In allen diesen Programmen versteckt sich jeweils (genau) ein Fehler, den Sie mit Hilfe von systematischen Testfällen finden sollen.

OUnit

In der Vorlesung haben Sie bereits eine Testsuite kennengelernt, und für dieses Übungsblatt stellen wir Ihnen die sensationelle Testsuite OUnit zur Verfügung1. Diese funktioniert (unter Solaris) wie folgt:

      Usage: ./OUnit_Solaris [-c candidate] [-v] {testcase}

(Die Verwendung unter Linux ist analog, wobei die ausführbare Datei dort OUnit_Linux heisst.)







Erklärung:

-c
Mit dem Flag -c geben Sie den Namen des Binaries an, das Sie testen möchten. Wenn Sie auf diese Option verzichten, dann muß der Name des zu verwendenden Binaries im Testfall selber erscheinen (in der ersten Zeile des Testfalls, genaueres: siehe unten).
-v
Das Flag -v steht für verbose und gibt Ihnen pro Testfall aus, wie (also mit welchem Kommando / mit welchen Optionen) das zu testende Programm aufgerufen wurde.
testcase
Hier werden die Dateinamen (mindestens einer bis beliebig viele) angegeben, in denen sich die Testfälle befinden. Diese Testfälle werden nacheinander abgearbeitet.

Eine detaillierte Erklärung hierzu erhalten Sie in den Übungen.

Aufbau eines Testfalls

Eine Datei, die jeweils genau einen Testfall beschreibt, hat den folgenden Aufbau:


Block 1:  Kommandozeile mit allen gewuenschten Argumenten, Flags, etc.
          (Wenn Sie von der Option -c keinen Gebrauch machen, so muessen
          Sie hier zunaechst auch den Namen des zu testenden Programms
          angeben!)
Block 2:  Erwarteter EXIT-Status
Block 3:  Inhalt von stdin
Block 4:  Erwartete Ausgabe (nach stdout oder stderr) 

Die einzelnen Blöcke werden dabei durch zwei Prozentzeichen (``%%'') voneinander getrennt.

Beispiel:


10
%%
0
%%
%%
Nach der Summenformel ist die Summe von 1 bis 10 gleich 55.
Empirischer Beweis:
55 - 10 = 45
45 -  9 = 36
36 -  8 = 28
28 -  7 = 21
21 -  6 = 15
15 -  5 = 10
10 -  4 =  6
 6 -  3 =  3
 3 -  2 =  1
 1 -  1 =  0

In diesem Beispiel wird ein Programm (welches genau, muß in diesem Fall über die Option -c OUnit angegeben werden), mit dem Argument 10 aufgerufen. Der erwartete Exit-Status ist 0, die Standardeingabe ist leer. Die (auf stdout) erwartete Ausgabe ist komplett aufgeführt.

Verwendung von OUnit

Angenommen, der vorstehend zitierte Testfall befindet sich in einer Datei namens test01 und Sie möchten damit Ihr Programm Gauss01 testen. Dann lautete der Aufruf von OUnit (unter Solaris, sonst analog für die Linux-Version) wie folgt:

      OUnit_Solaris -c Gauss01 -v test01

Ausgabe von OUnit

OUnit vergleicht nun die erwartete Ausgabe (die im Testfall spezifiziert ist) mit der tatsächlichen Ausgabe des getesteten Programms. Wenn diese übereinstimmen, so gibt OUnit die Meldung

      3 tests succeeded.
aus, andernfalls sieht die Ausgabe wie folgt aus:


theseus$ ./OUnit_Solaris -c Gauss02 test01
-----test test01: Gauss02 10
-----expected output:
Nach der Summenformel ist die Summe von 1 bis 10 gleich 55.
Empirischer Beweis:
55 - 10 = 45
45 -  9 = 36
36 -  8 = 28
28 -  7 = 21
21 -  6 = 15
15 -  5 = 10
10 -  4 =  6
 6 -  3 =  3
 3 -  2 =  1
 1 -  1 =  0
-----stdout:
Nach der Summenformel ist die Summe von 1 bis 10 gleich 55.
Empirischer Beweis:
55 -  9 = 46
46 -  8 = 38
38 -  7 = 31
31 -  6 = 25
25 -  5 = 20
20 -  4 = 16
16 -  3 = 13
13 -  2 = 11
11 -  1 = 10
1/3 tests failed.

Es werden also die beiden Ausgaben (erwartete / tatsächliche) gegenübergestellt.

Aufgabe 26: Und doch noch ein wenig Oberon (5 Punkte)

Nachdem Sie nun mit OUnit und den Testfällen bestens vertraut sind und vermutlich alle Fehler in den Shellsort-Implementierungen gefunden haben, kommt bei Ihnen Langeweile auf, weil Sie diesmal gar nichts zu programmieren haben.

Natürlich können wir Ihnen hier sogleich wieder helfen, und deshalb lautet die letzte Aufgabe für dieses Semester:

Schreiben Sie Ihre eigene Oberon-Implementierung der Testsuite OUnit!

Hinweise:

Viel Erfolg!



Fußnoten

... Verfügung1
Für die Java-Fans unter Ihnen: Bis zu JUnit ist es noch ein langer Weg$\ldots$:-(


Norbert Heidenbluth 2005-02-08