Informatik II - Algorithmen und Datenstrukturen
Sommersemester 2018
Fabian Kuhn
Informationen zu den Programmierübungen
Die Programmierübungen können entweder in Python, in Java oder in C++ programmiert werden. Offiziell vollständig unterstützen (z.B. mit Musterlösungen) werden wir allerdings nur Python. Im Folgenden wird kurz beschrieben, an welche Richtlinien Sie sich halten sollten, damit die Unit Tests, der Style Checker, sowie damit das Zusammenspiel mit dem Build-Server Jenkins funktionieren. Um konkrete Beispiele zu haben, sind die Dateien aus den ersten zwei Vorlesungen im Daphne-SVN, im Unterverzeichnis
vorlesungen/vorlesungen_0102
unter der folgenden URL abgelegt:
https://daphne.informatik.uni-freiburg.de/ss2018/InformatikII/svn/public
Damit Ihre Übungen vom Build-Server Jenkins bearbeitet werden können (und damit die Tutoren die Übungsabgaben nicht mühsam suchen müssen), müssen sie jeweils in einem Unterordner uebungsblatt-xx Ihres Daphne-Homeverzeichnisses liegen, wobei xx die Nummer des Übungsblattes bezeichnet. In Folgenden beschreiben wir kurz das konkrete Vorgehen für Python, für Java und für C++. Beispiele für die benötigten Dateien finden Sie jeweils entweder unter den oben angegebenen Vorlesungsdateien, oder indem Sie unter folgender URL, die Coding Standards aus dem SVN auschecken:
https://daphne.informatik.uni-freiburg.de/svn/CodingStandards
Im Folgenden beschreiben wir kurz das Vorgehen, zuerst für Python, dann für Java, und schliesslich für C++. Am Schluss wird noch kurz das Wichtigste zu Jenkins erklärt.
Python
Um die Übungen in Python zu programmieren, müssen Sie natürlich einen Python-Interpreter installieren (wir verwenden Python 3). Zusätzlich sollten Sie den Style Checker flake8 installieren.
Damit Sie in standardisierter Art auf den Python-Interpreter und den Style
Checker zugreifen, sowie die Unit Tests ausführen können,
sollten Sie das Programm make
verwenden. Um dieses anzuwenden, müssen Sie die
Konfigurationsdatei Makefile
(aus den Coding Standards oder den Vorlesungsbeispielen) in Ihr
aktuelles Arbeitsverzeichnis kopieren. Im Falle der Übungen
heisst das Arbeitsverzeichnis (wie bereits erwähnt)
immer uebungsblatt-xx,
wobei xx die Nummer der
Übungsblatts
bezeichnet. Das Makefile aus
den Vorlesungsbeispielen ist dabei dafür ausgerichtet, dass Sie
doctest für die Unit Tests
verwenden. Das Makefile aus
den Coding Standards verwendet die
Bibliothek unittest. Es ist
Ihnen freigestellt, für Ihre Unit Tests eine der beiden Varianten
zu verwenden.
Um zu Überprüfen, ob alle Ihre Source-Dateien dem
Standard des Style Checkers entsprechen, führen sie
make checkstyle
Unit Tests mit doctest schreiben Sie direkt in den Kommetarblock am Anfang jeder Python-Funktion. Unit Test mit der Bibliothek unittest schreiben Sie indem Sie Source-Dateien erstellen, welche auf Test.py enden (make sucht für die Tests nach solchen Dateien). Wie solche Unit Tests aussehen sollten, entnehmen Sie am besten den Beispielen in den Coding Standards. Das Ausführen der Unit Test geschieht mit
make test
Um beide Dinge gemeinsam auszuführen, können Sie auch einfach den Befehl make (ohne Argumente) oder make all verwenden. Um alle von Python automatisch erstellten zusätzlichen Dateien zu löschen, können Sie
make clean
aufrufen. Bitte tun Sie das, bevor Sie Dateien zum SVN-Repository hinzufügen. Alle vom Python-Interpreter automatisch generierten Dateien müssen (und sollen) Sie nicht über SVN hochladen.
Java
Um die Übungen in Java zu programmieren, müssen Sie natürlich einen Java-Compiler installieren. Zudem sollten Sie Apache Ant (erhältlich unter http://ant.apache.org) installieren. Damit Sie die Unit Tests ausführen können und den Style Checker aufrufen können, müssen Sie zusätzlich die notwendigen Bibliotheken in Ihr Daphne-Verzeichnis kopieren. Dazu kopieren Sie am besten den ganzen lib Unterordner im java-Unterverzeichnis der Coding Standards in Ihr Daphne-Stammverzeichnis. (Den lib-Ordner finden Sie auch im Unterordner vorlesungen des oben erwähnten public-Verzeichnisses auf dem Vorlesungs-SVN.)
Damit Sie in standardisierter Art auf den Java-Compiler und den Style Checker zugreifen, sowie die Unit Tests ausführen können, sollten Sie das Programm ant verwenden. Um dieses anzuwenden, müssen Sie noch die zwei Konfigurationsdateien build.xml und build.properties in Ihr aktuelles Arbeitsverzeichnis kopieren. Im Falle der Übungen heisst das Arbeitsverzeichnis (wie bereits erwähnt) immer uebungsblatt-xx, wobei xx die Nummer der Übungsblatts bezeichnet. In der Datei build.xml müssen Sie in den ersten paar Zeilen noch anpassen, wo ant nach den Java-Sourcen und nach dem lib-Verzeichnis suchen soll. Falls Sie die gleiche Struktur wie in den Vorlesungs-Beispielen übernehmen, können Sie dazu auch einfach die build.xml Datei aus dem Ordner vorlesungen_0102 übernehmen. In der Datei build.properties müssen Sie bei jeder Übung noch angeben, wie Ihr Main-Programm heisst (Name sollte immer auf Main.java enden) und wie die jar-Datei heissen soll, welche beim Kompilieren erstellt wird. Bei der ersten Übung benötigen Sie z.B. ein Main-Programm, um die Zeitmessungen durchzuführen. Eine jar-Datei beispiel.jar kann dann mit dem Befehl java -jar beispiel.jar ausgeführt werden.
Um zu Überprüfen, ob alle Ihre Java-Source-Dateien dem Standard des Style Checkers entsprechen, führen sie
ant checkstyle
aus. Um alle vorhandenen Java-Source-Dateien zu kompilieren, führen Sie
ant compile
aus. Unit Tests schreiben Sie, indem Sie Source-Dateien erstellen, welche auf Test.java enden (ant sucht für die Tests nach solchen Dateien). Wie solche Unit Tests aussehen sollten, entnehmen Sie am besten den Beispielen in den Coding Standards und bei den Vorlesungsbeispielen. Das Ausführen der Unit Test (kompiliert bei Bedarf auch gleich) geschieht mit
ant test
m alle drei Dinge gemeinsam auszuführen, können Sie auch einfach den Befehl ant (ohne Argumente) oder ant all verwenden. Um alle Binaries (class files, jar file) zu löschen, können Sie zudem
ant clean
aufrufen. Bitte tun Sie das, bevor Sie Dateien zum SVN-Repository hinzufügen. Alle von Ihrem Compiler generierten Dateien müssen (und sollen) Sie nicht über SVN hochladen.
C++
Um die Übungen in C++ zu programmieren, müssen Sie natürlich einen C++-Compiler installieren (z.B. die gnu-Compile-Suite installieren). Zudem müssen Sie f¨r die Unit Tests, Google Test installieren. Instruktionen dazu finden Sie unter folgender URL:
https://ad-wiki.informatik.uni-freiburg.de/teaching/ProgrammierenCplusplusSS2012/GTest
Melden Sie sich bei Problemen am besten über's Forum.
Damit Sie in standardisierter Art auf den C++-Compiler und den Style Checker zugreifen, sowie die Unit Tests ausführen können, sollten Sie das Programm make verwenden. Um dieses anzuwenden, müssen Sie noch die zwei Konfigurationsdatei Makefile (aus den Coding Standards oder den Vorlesungsbeispielen) in Ihr aktuelles Arbeitsverzeichnis kopieren. Im Falle der Übungen heisst das Arbeitsverzeichnis (wie bereits erwähnt) immer uebungsblatt-xx, wobei xx die Nummer der Übungsblatts bezeichnet. Um den Style Checker aufrufen zu können, müssen Sie zusätzlich die Python-Datei cpplint.py in ihr aktuelles Arbeitsverzeichnis kopieren.
Um zu Überprüfen, ob alle Ihre Source-Dateien dem Standard des Style Checkers entsprechen, führen sie
make checkstyle
aus. Um alle vorhandenen Source-Dateien zu kompilieren, führen Sie
make compile
aus. Unit Tests schreiben Sie, indem Sie Source-Dateien erstellen, welche auf Test.cpp enden (make sucht für die Tests nach solchen Dateien). Wie solche Unit Tests aussehen sollten, entnehmen Sie am besten den Beispielen in den Coding Standards und bei den Vorlesungsbeispielen. Das Ausführen der Unit Test (kompiliert bei Bedarf auch gleich) geschieht mit
make test
Um alle drei Dinge gemeinsam auszuführen, können Sie auch einfach den Befehl make (ohne Argumente) oder make all verwenden. Falls Sie ein asführbares Main-Programm erstellen müssen (z.B. in der 1. Übung für die Zeitmessungen), sollte der Name der Source-Datei auf Main.cpp enden. Der Compiler erstellt dann eine ausführbare Datei mit dem gleichen Namen (ohne die Endung). Eine Vorlage gibt es wiederum bei den Vorlesungsbeispielen. Um alle Binaries zu löschen, können Sie zudem
make clean
aufrufen. Bitte tun Sie das, bevor Sie Dateien zum SVN-Repository hinzufügen. Alle von Ihrem Compiler generierten Dateien müssen (und sollen) Sie nicht über SVN hochladen.
Jenkins
Um gleich zu sehen, ob Ihre Lösungen auch auf einem anderen Rechner (und im Speziellen auf dem Daphne-Server) funktionieren, gibt's den Jenkins-Server. Sobald Sie Ihre Lösungen ins SVN Repository hochgeladen haben, können Sie über den Jenkins Server überprüfen, ob die Dinge auch auf dem Server funktionieren. Solange Sie sich an die obigen Richtlinien halten, sollte dies eigentlich immer der Fall sein, wenn es lokal bei Ihnen funktioniert. Damit es funktioniert, müssen Sie allerdings auch das lib-Verzeichnis, sowie die Dateien build.xml und build.properties (bei Java), respektive die Dateien Makefile und cpplint.py (bei C++) ins SVN-Repository hochladen. Um ant (bzw. make) für ein bestimmtes Übungsblatt auf Jenkins auszuführen, wählen Sie einfach "Build workspace" aus und geben die zweistellige Nummer des Übungsblatts an.