CODING-STANDARDS **************** (c) 2011 Institut fuer Informatik, Albert-Ludwigs-Universitaet Freiburg. Der Sinn dieser Coding-Standards ist die Etablierung (1) einer einheitlichen Art und Weise ein gegebenes Programm zu kompilieren, unabhaengig von Autor und Sprache; (2) eines einheitlich Erscheinungsbildes des Codes sowie Einhaltung gewisser Regeln guter Programmierpraxis; (3) sogenannter Unit Tests zur automatischen Ueberpruefung der Korrektheit des Codes. In diesem Verzeichnis befinden sich zwei Unterordner: "java" und "cpp". Dort findet sich Code fuer eine sehr einfache Klasse, die einen ungerichteten Graphen mit ein paar Basis-Funktionen realisiert, sowie zusaetzlich die im folgenden beschriebenen Dateien zur Umsetzung der o.g. Ziele. KURZBESCHREIBUNG FUER UNGEDULDIGE ********************************* Fuer Java, im Unterorder "java": -------------------------------- * Kompilieren mit "ant compile". * Ueberpruefung des Styles mit "ant checkstyle". * Ausfuehren der Tests mit "ant test". * Fuer eigenen Code einfach die Dateien "build.xml" und "build.properties" kopieren, sowie dieselbe Ordnerunterstruktur mit "bin", "lib" und "src" beibehalten. Die Dateien "lib/checkstyle--all.jar", "lib/checkstyle_config.xml" und "lib/junit-.jar" ebenfalls kopieren, allerdings in ein uebergeordnetes Verzeichnis und die entsprechenden Pfade in der "build.xml" anpassen um fuer jedes Uebungsblatt die selben Dateien verwenden zu koennen. Die Namen in der "build.properties" muessen auch entsprechend angepasst werden. * Die Unit Tests fuer eine Klasse "Xyz" muessen in der Datei "XyzTest.java" stehen. Fuer C++, im Unterordner "cpp": ------------------------------- * Kompilieren mit "make compile". * Ueberpruefung des Styles mit "make checkstyle". * Ausfuehren der Tests mit "make test". * Fuer eigenen Code, einfach die Datei "Makefile" kopieren. Alle Code-Dateien kommen flach in das selbe Verzeichnis. Die Datei "cpplint.py" ebenfalls kopieren, allerdings in ein uebergeordnetes Verzeichnis und den entsprechenden Pfad im Makefile anpassen um fuer jedes einzelne Uebungsblatt die selbe Datei zu verwenden. Fuer das Kompilieren und Ausfuehren der Tests muss "gtest" installiert sein (http://code.google.com/p/googletest). AUSFUEHRLICHERE BESCHREIBUNG **************************** (1) Einheitliche Art und Weise ein Programm zu kompilieren. ----------------------------------------------------------- Einfach in der Kommandozeile "ant compile" (fuer Java) bzw. "make compile" (fuer C++) eingeben. Dadurch wird aller Code im Unterverzeichnis "src" (fuer Java) bzw. im aktuellen Verzeichnis (fuer C++) kompiliert. Was diese Kommandos im Detail bewirken steht in den Dateien "build.xml" und "build.properties" (fuer Java) bzw. "Makefile" (fuer C++), die im aktuellen Verzeichnis stehen muessen. Fuer eigenen Code koennen diese Dateien einfach kopiert werden. Groeßere Anpassungen bzw. ein tieferes Verstaendnis sind in der Regel nicht notwendig. Fuer Java muessen die Namen in der "build.properties" angepasst werden. (2) Einheitliches Erscheinungsbild des Codes. --------------------------------------------- Einfach in der Kommandozeile "ant checkstyle" (fuer Java) bzw. "make checkstyle" (fuer C++) eingeben. Dadurch wird aller Code im Unterverzeichnis "src" (fuer Java) bzw. im aktuellen Verzeichnis (fuer C++) auf Konsistenz mit gewissen Regeln geprueft. Die Definition dieser Regeln ist gegeben durch die Dateien "checkstyle--all.jar" und "checkstyle_config" (fuer Java) bzw. durch die Datei "cpplint.py" (fuer C++). Wieder gilt, dass diese Dateien einfach kopiert werden koennen, und eine Anpassung bzw. ein tieferes Verstaendnis in der Regel nicht noetig ist. Diese Dateien allerdings bitte nur einmal kopieren und fuer jedes Uebungsblatt die selben Dateien wieder verwenden. Dazu muessen die entsprechenden Pfade in der "build.xml" bzw dem "Makefile" angepasst werden. (3) Unit Tests zur automatischen Ueberpruefung der Korrektheit. --------------------------------------------------------------- Ein sogeannter Unit Test ueberprueft anhand von (moeglichst gut gewaehlten) Beispielenaufrufen, ob eine einzelne Funktion das tut was Sie soll. Beispiele fuer einfache Unit Tests befinden sich in der Datei "java/src/graph/GraphTest.java" (fuer Java) bzw. in der Datei "cpp/GraphTest.cpp" (fuer C++). Zur Ausfuehrung aller Unit Tests, einfach in der Kommandozeile "ant test" (fuer Java) bzw. "make test" (fuer C++) eingeben. Was die Kommandos im Detail bewirken steht wieder in der Datei "build.xml" (fuer Java) bzw. in der Datei "Makefile" (fuer C++). Bei Java benoetigt man dazu die Datei "lib/junit-.jar". Diese kann einfach aus dem Beispiel kopiert werden, allerdings bitte nur einmal kopieren und fuer jedes Uebungsblatt die selbe Datei wieder verwenden. Dazu muss der entsprechende Pfad in der "build.xml" angepasst werden. Bei C++ muss "gtest" installiert sein (http://code.google.com/p/googletest). Das Schreiben der Unit Tests ist Aufgabe desjenigen, der auch den Code schreibt. Jemand Drittes bzw. auch der Verfasser des Codes selber kann dann einfach schauen, ob die Test erfolgreich durchlaufen, insbesondere nach einer Aenderung am Code. FREQUENTLY ASKED QUESTIONS ************************** Ich möchte eine IDE (Eclipse, NetBeans, etc.) verwenden um meinen Code zu schreiben, geht das? ---------------------------------------------------------------------------------------------- Ja, aber Sie muessen schauen, dass die jeweilige IDE das "build.xml" (fuer Java) bzw. das "Makefile" (fuer C++) verwendet, und nicht sein eigenes bzw. etwas Aequivalentes eigenes generiert. Ausserdem muessen Sie eventuell einige Einstellung in Ihrer IDE veraendern, damit der produzierte Code auch den Regeln unseres Styles entspricht. Zum Beispiel rueckt Eclipse standardmaessig mit TABs ein, unser Style moechte Leerzeichen (das laesst sich zum Beispiel in Eclipse Helios aendern ueber Window/Preferences/General/Editors/Text Editors/Insert spaces for tabs).