Tja, da melde ich mich zurück aus der Blog-Eiszeit hier, und ich hoffe, hier in Zukunft wieder mehr und häufiger berichten zu können. Das Thema dieses Beitrags ist auch gleichzeitig der Hauptgrund, der mich in den letzten Monaten von einem regelmäßigen Bloggen abgehalten hat: das SEP. SEP steht für Softwareentwicklungspraktikum und jeder Informatikstudent der TU durchläuft dieses irgendwann einmal. So auch ich im vierten Semester, das jetzt zumindest vorlesungs- und praktikums-, aber noch nicht prüfungsmäßig abgeschlossen ist.
Beim SEP setzen Studenten Softwareprojekte, die von den Instituten der Informatik vergeben werden, in Teams von mehreren Studenten um.
Ich habe hierbei mit Stephan, Henning und Oli ein “Ad-Hoc-Chatsystem für mobile Netze” beim IBR (Institut für Betriebssysteme und Rechnerverbund) umgesetzt. Parallel haben dies noch drei weitere Gruppen, ebenfalls bestehend aus jeweils vier Leuten, getan.
Die Wahl auf dieses Thema fiel bei uns aus zwei Gründen: Zum einen reizte uns die Problemstellung. Ich programmiere gerne Software, die Probleme löst, für die es praktisch noch keinen verbreiteten Lösungsweg gibt, wo man also beim Programmieren Probleme lösen muss, für deren Lösung noch keine “Handlungsanweisung” existiert, wie z. B. beim mittlerweile trivialen, weil gut erforschten Sortieren bis hin zur stumpfen Programmierung einer Benutzeroberfläche. Letzteres fiel bei uns natürlich auch an, es hat aber bei weitem nicht einen Großteil der Lösung ausgemacht.
Zum anderen war dieses Projekt das einzige, bei dem eine freie Wahl der Programmiersprache möglich war. Henning und Stephan wollten ihr SEP-Projekt unbedingt in Haskell, einer funktionalen Programmiersprache, absolvieren, und auch Oli und ich hatten durch die Indoktrination der beiden
immer wieder einmal die Reize dieser Programmiersprache kennen gelernt. Und letztendlich konnten wir auch beim Institut die Überzeugung wecken, dass es in Haskell zu schaffen ist, und dass wir auch wissen, wovon wir reden 
Die anderen drei Gruppen haben das ganze zwei Mal in Java und einmal in C++ umgesetzt.
Die Aufgabenstellung
Detailliert bedeutete das Projekt für uns, dass wir ein gegebenes Protokoll umsetzen, also implementieren sollten, das speziell für die Verwendung in Ad-hoc-Netzen entwickelt wurde - also Netzwerken (in der Regel WLAN) ohne bestehende Infrastruktur, wie Access Points oder Server, und mit starken Fluktuationen in der Struktur. Gegeben war hierzu ein Internet-Draft, der verschiedene Grundprinzipien des Protokolls (Sicherheit, Wegefindung, etc.) und das Protokoll an sich, also die einzelnen Nachrichten spezifiziert.
Der Entwicklungsprozess
Der Entwicklungsprozess folgte dabei dem Wasserfall-Modell in all seinen Details. Jede der Phasen war mit einem Abgabetermin für Dokumente und/oder Code abgeschlossen, und die Ergebnisse wurden in einem Projekttreffen aller Gruppen präsentiert.
Dies hieß nun für uns, dass wir die ersten fünf bis sechs Wochen damit verbrachten, Anforderungen, Anwendungsfälle (sog. Use Cases) und Geschäftsprozesse herauszuarbeiten, die das Verhalten unserer Software beschreiben. Um diesen Anforderungen gerecht werden zu können, wurde dann eine Softwarearchitektur und schließlich die detaillierte Realisierung der einzelnen Komponenten spezifiziert. Nebenbei entstanden in unserer Gruppe auch schon die ersten Code-Schnipsel, meist Proof-of-Concepts, also kurze Prototypen einzelner Funktionalitäten.
Die Implementierung
Nach der Entwurfsphase ging es dann in die Implementierung. In dieser Phase werkelten wir oft bis spät in die Nacht an unserem Code, des öfteren jeder für sich an seinen Komponenten, manchmal auch bei Treffen unserer Gruppe alle zusammen. Es gab oft (auch hitzige) Diskussionen, entweder, wenn man sich im parallel laufenden Vorlesungsbetrieb gesehen hat, oder aber auch in unserem eigens gegründeten IRC-Channel, denn nicht nur sollte unsere Implementierung schön in jedem Aspekt werden (und nicht nur “irgendwie” hingefrickelt, dass es passt), sondern wir hatten uns auch die ein oder andere Bürde selbst auferlegt: Jedwede gespeicherte Daten im Programm sollten nicht redundant geführt werden, begonnen bei der internen Nachrichten-Struktur bis hin zu den verschiedenen Info-Modulen, die Informationen über Benutzer und das Netzwerk verwalten. Ein weiterer Punkt war, dass die Benutzeroberfläche einfach und (relativ) intuitiv zu benutzen sein sollte. Und so gab es einige Punkte, die wir haben wollten, weil wir sie für eine schöne Umsetzung für unabdingbar hielten.
Natürlich galt es bei der Implementierung neben den scheinbar für jedes Projekt symptomatischen Zeitproblemen auch das ein oder andere vorher nicht erwartete Problem zu umschiffen: So taten sich noch einige Spezifizierungsfehler im Protokoll auf, die teilweise durch eine Revision des Drafts behoben wurden, teilweise aber auch von uns einfach durch Einigung auf einen Standard mit den anderen Gruppen gelöst wurden.
Letztendlich war es dann aber doch geschafft und das Programm war fertig. So weit, so gut, doch nun ging es in ...
Die Testphase
In der Testphase wurde die geschriebene Software auf Herz und Nieren getestet. Das hieß, dass wir zum Teil einzelne Komponenten und zum Teil auch das Verhalten der Software ausführlichst auf Korrektheit überprüft haben. Hat man hierfür noch kleine Testprogramme schreiben können, oder kleine Netzwerkstrukturen selbst mit dem eigenen Programm aufgebaut, war der weitaus größere Brocken die Interoperabilitätstests. Bei diesen Tests wurde die fehlerfreie Zusammenarbeit unserer Software mit der der anderen Gruppen geprüft. Und hier taten sich die weitaus größeren Probleme auf: An der einen Stelle hat die eine Gruppe das Protokoll anders interpretiert, an der anderen Stelle waren bestimmte Vorgänge noch fehlerhaft, teilweise gab es Fehler, die bei zwei Instanzen des gleichen Programms nicht auftraten, wohl aber bei der Kommunikation mit einem anderen Programm.
Der Endspurt
Nachdem wir nach vielen, vielen Tests, aber bei weitem nicht allen möglichen auch diese Phase abgeschlossen hatten, bauten wir die finalen Versionen der Software zusammen, aktualisierten noch einmal die letzten Dinge in den Entwürfen und verfassten ein Benutzerhandbuch zur Software. Dann sollte unser Projekt “nur” noch abschließend präsentiert werden. Hierzu wurde noch ein DIN-A0-Poster erstellt, und ein Flyer gedruckt, und damit bewaffnet ging es dann auf den alljährlichen TU-Day, unser “Campus-Fest”, bei dem allerlei interessante Projekte und ähnliches vorgestellt werden, und abschließend zum “Tag der neuen Softwareentwickler”, einem Nachmittag, an dem alle am SEP teilnehmenden Gruppen im Mittelpunkt standen und die Ergebnisse der letzten drei Monate Arbeit präsentierten - zunächst nur einem universitätsinternen Publikum, später aber auch der interessierten Öffentlichkeit, wie z. B. Vertretern von IT-Firmen.
Noch mehr Informationen
Wer jetzt noch mehr wissen möchte oder einfach sich für das Programm interessiert, den lade ich herzlich auf unsere Projekt-Homepage ein. Dort gibt es neben sämtlichen Dokumenten, wie Entwürfen, Präsentationsmaterialien, etc. auch die finalen Versionen vorcompiliert und als Quellcode zum Download. Veröffentlicht wird der Code übrigens unter der GPL in Version 3. Es gibt dort bei Interesse auch einen Link zum Institut und von dort weiter zu den anderen Gruppen.
Und zuguterletzt gibt es auch noch Fotos vom “Tag der neuen Softwareentwickler” zu bestaunen.