Arbeit, Wohnung und Sonstiges… (Teil 1)

Nachdem inzwischen fast ein Monat seit meinem letzten veröffentlichten Bericht verstrichen ist, greife ich heute mal einen Hinweis auf, den ich vor einiger Zeit bekommen habe. Ich wurde darauf hingewiesen, dass ich zwar immer über meine Trips berichte, mich über meine Arbeit und mein tägliches Leben hier in Floripa unter der Woche allerdings ausschweige. Tja, das liegt vielleicht daran, dass die Trips natürlich das spannendste an meinem Aufenthalt hier sind. Trotzdem werde ich den Hinweis berücksichtigen und mit diesem und weiteren Berichten jetzt einmal für ein wenig Ausgleich sorgen… Aber Achtung: Für Nicht-Informatiker kann vor allem dieser Bericht ein wenig unverständlich und daher vielleicht langweilig sein. Ich werde mich aber bemühen, die Fachsprache auf ein Minimum zu reduzieren, so dass jeder ungefähr erfassen kann, mit was ich mich hier die Woche über beschäftige.

Seit Mitte April ist die Arbeit wieder deutlich besser als in den Wochen zuvor und macht jetzt wieder richtig Spass. Aber zunächst einmal eine Übersicht und ein Rückblick: Im Wesentlichen arbeite ich am oder für unser Hauptprojekt Sigilowin. Insgesamt haben wir im Moment 3 größere Projekte, von denen eines (“Functional Testing” Tool) nur für den internen Gebraucht gedacht ist. Sigilowin, das größte der 3 Projekte, ist die neue Windows-Version der alten DOS-Software, mit der Módula Software vor ca. 15 Jahren angefangen hat. Es ist ein System zur Verwaltung finanzieller Transaktionen im professionellen Bereich, also nach den “offiziellen” Methoden des “Financial Accounting”. Natürlich besitzt es viele weitere Funktionen zur Verwaltung der Angestellten einer Firma, deren Produkte usw… Die DOS-Version ist bereits seit Jahren erfolgreich im Einsatz und natürlich ist eine Windows-Variante schon lange überfällig. Wirklich im Einsatz ist sie jedoch noch nicht – abgesehen von einer Testumgebung und dem AIESEC MC Brasilien, das seit ein paar Wochen ein erstes Release für seine Zwecke verwendet.

MODPosto ist das zweite große Projekt der Firma und ein System für Tankstellen. Direkt von der Zapfsäule erhält das System die notwendigen Daten über die abgegebene Menge Treibstoff und erstellt die entsprechende Abrechnung für den Kunden. Außerdem sperrt es die Zapfsäule bis die Zahlung erfolgt ist und legt die Daten in einer Datenbank ab. Dieses System soll eventuell später mit Sigilowin verbunden werden, so dass über ein einfaches Frontend an der Kasse der Tankstelle die Daten eingespeist und für die Finanzbuchhaltung später abrufbar sind.

Alle diese Projekte sind Client-/Server-Architekturen, wobei Sigilowin standardmäßig als eine 3-Tier-Anwendung, MODPosto derzeit als eine 2-Tier-Anwendung entwickelt wird. Als Datenbank kommt für Sigilowin PostgreSQL und für MODPosto SQLite3 zum Einsatz.

Die zentrale Schnittstelle zwischen Anwendung und Datenbank ist DataEntity, eine Entwicklung unseres Chefs Thiago. Diese Library hat in der Tat ein sehr gutes Design und ist bis auf wenige Stellen und Workarounds (die es in der Praxis wohl immer geben wird) auch recht gut strukturiert. Leider fehlt es ein wenig an Dokumentation, die Thiago im Rahmen seines Verständnisses der “Agilen Softwareentwicklung” nicht für notwendig hält. Ich habe darüber bereits schon die eine oder andere Diskussion mit ihm geführt, da ich in dieser Beziehung gänzlich anderer Meinung bin.

Wie bereits erwähnt ist Thiago (unser Boss und Leiter der Entwicklungsabteilung) ein absoluter Freund der “Agilen Softwareentwicklung”. Daher setzen wir auf verschiedene agile Methoden wie “eXtreme Programming” und “Scrum”. Allerdings muss gesagt werden, dass die “korrekte Anwendung” dieser Methoden noch ein wenig zu wünschen übrig lässt und die Entwicklung leider sehr oft nach der Methode “Draufloshacken” von statten geht. Manchmal kommt es mir so vor, als ob diese alte und für die professionelle Softwareentwicklung gänzlich untaugliche Methode unter dem Banner der Anwendung agiler Methoden gerechtfertig wird. Wenn ich mich z.B. an die Theorie des “eXtreme Programming” erinnere und mir die Liste der “Dos” und “Don’ts” vor Augen führe, so erkenne ich von beiden Seiten Elemente in unserer täglichen Arbeit wieder ;-). Immerhin setzen wir aber für unser Hauptprojekt Sigilowin bereits recht erfolgreich DUnit für Integrationstests ein. Trotzdem hapert es auch hier ein wenig an der parallelen Entwicklung der Tests (was die agilen Methoden ja vorschreiben), so dass nur die aller wesentlichsten Business Rules und DB-Constraints abgedeckt sind.

Ein Teil von Thiagos Traum der Anwendung agiler Methoden ist das “funktionale Testen”. Deshalb hat Zarko, mein Kollege aus Slowenien, bereits kurz nach unserem Arbeitsbeginn damit begonnen, das dritte größere Projekt “Módula Functional Test”, das von unserem Vor-Vorgänger Daniel aus Deutschland begonnen wurde, fortzusetzen. Dieses Tool ist vorerst nur für den internen Gebrauch gedacht und kann User-Aktionen (Keyboard-Inputs, Maus-Bewegungen, Klicks, etc.) aufzeichnen, um diese später abzuspielen. Kritische Funktionen sollen entweder von uns oder von den Mitarbeitern des Support-Bereichs der Firma aufgezeichnet werden und immer wieder abgespielt werden, um die korrekte Funktion unserer Projekte nach Veränderungen ständig sicher zu stellen.

Theoretisch klingt das alles faszinierend. Wenn man allerdings die Probleme beachtet, die Zarko bei der Weiterentwicklung des Tools hatte, stellt sich bald die Frage, ob Aufand und Nutzen hier in einer verträglichen Relation zueinander liegen. Oft gab es Probleme mit der Fernsteuerung des Zielprogramms, da z.B. bestimmte Tasten (Num-Pad) nicht die erwarteten Events freisetzten oder das Abfangen und Wiedergeben von Windows-Nachrichten einfach zu komplex war. Als ich das Projekt zum ersten Mal produktiv einsetzen wollte, funktionierten bereits zentrale Teile davon nicht, so dass ich meine Tests bisher nicht erfolgreich aufzeichnen konnte und Zarko erstmal mit der Beseitigung dieser Probleme beauftragt wurde. Ich persönlich bezweifle, ob das Tool jemals wirklich so funktionieren und im produktiven Betrieb eingesetzt wird, wie es sich Thiago vorstellt.

Nach Michals Abreise bekam ich bald mein erste größere Aufgabe zugewiesen. Ich sollte ein altes Formular zur Verwaltung von Produkten einer Firma wieder Sigilowin integrieren. Das Formular war bereits zu einem früheren Zeitpunkt entwickelt, dann aber nicht weiter gewartet worden, so dass ich zunächst in die Tiefen der Formulare des Projekts eintauchen musste. Da Thiago sehr gerne – und zugegeben sehr erfolgreich – Gebrauch von der Objektorientierung macht, besitzen die meisten der Formulare in diesem Projekt mehreren Vererbungs-Ebenen. Das machte es aufgrund der sehr spärlichen Dokumentation und meines fehlenden Wissens über die Details des Systems anfangs ein wenig schwierig für mich, die richtigen Ansatzstellen für die Reintegration des Produkt-Formulars zu finden. Aber nach einigen Stunden Suchen und Debuggen hatte ich das Formular schließlich erfolgreich integriert und hatte natürlich einiges über die Struktur des Projekts Sigilowin gelernt.

Meine nächste Aufgabe bestand darin, neben den textuellen Daten auch die Eingabe von Bildern von Produkten und Personen und deren Speicherung in der Datenbank zu ermöglichen. Das war interessant für mich, da ich bisher praktisch noch nicht mit größeren Datenbank-Systemen gearbeitet hatte und so einiges an Wissen über deren Funktionsweise sammeln konnte (Blobfields, Datentypen, etc…).

Nach diesem “Task” entwickelte ich ein kleines Zusatzformular für Sigilowin, mit dem Administratoren des System direkt über SQL-Befehle auf die Datenbank zugreifen konnten. Das interessante daran war, wie direkte SQL-Befehle durch unseren Server zur Datenbank weitergeleitet wurden und ich sammelte dabei einige Erfahrung über die Funktionsweise unserer Schnittstelle DataEntity.

Eine weitere große Aufgabe für mich war die Entwicklung einer Methode, mit der der Status quo von Sigilowin für jeden User bei dessen Logout gesichert und beim Login wiederhergestellt werden konnte. Es sollten die geöffneten MDI-Fenster, deren Position und Größe und weitere Daten der Umgebung für jeden User in der Datenbank gesichert werden. Nachdem ich ein Design entwickelt hatte und dieses mit Thiago besprach, stellte sich heraus, dass er es sich ein wenig anders vorgestellt hatte. Zunächst konnte ich mich mit seiner Variante absolut nicht anfreunden, was mir die Entwicklung erheblich erschwerte. Außerdem hatte ich mit ein paar Unzulänglichkeiten des Event-Systems von Windows zu kämpfen, da mir ein AfterShow-Event für Formulare fehlte. Schließlich war aber auch diese Aufgabe gemeistert, bei der ich einige interessante Aspekte über eben dieses Event-System gelernt hatte.

Da wir sehr intensiv Delphi Komponenten von Dritten verwenden, müssen wir diese natürlich immer auf dem aktuellen Stand halten. Hierfür haben wir ein ausgeklügeltes Build-System, das mit “want”, einem Delphi-Port von “Java Ant” arbeitet. Durch das Update und die Integration einiger weiterer Komponenten in dieses Build-System lernte ich viel über dessen Funktionsweise und bin inzwischen wohl der “want”-Profi in der Entwicklungsabteilung. Keiner hat so viel Wissen über die Internas und Möglichkeiten dieses Delphi-Ports wie ich und wenn es darum geht, neue Projekte oder Komponenten ins Build-System einzubinden, bin in der Regel ich dafür zuständig.

Die Arbeit an diesem Build-System ist für mich als Linux-Freak (jaja, Textfiles als Konfigurationsdateien sind halt meine Welt *g*) ganz interessant und ich verbesserte unser Build-System auch an der einen oder anderen Stelle und veränderte es vor allem für die Erzeugung von Releases nach den Wünschen von Thiago.

Schließlich war der Punkt erreicht, an dem ich nur noch kleinere Aufgaben zugewiesen bekam, die sich vor allem um das Fixen von Bugs drehten. Das war wohl vor allem deshalb notwendig, da plötzlich ein Release von DataEntity und Sigilowin (für AIESEC) vor der Tür stand. Leider sind wir Trainees sehr wenig in die Projektplanung eingebunden, die im Wesentlichen Thiago erledigt. Deshalb erfuhren wir in beiden Fällen auch erst sehr kurzfristig von den anstehenden Release-Terminen und natürlich kam dann ganz schön Hektik auf. Das Schlimmste für mich war, dass dauernd noch Veränderungen an der Schnittstelle DataEntity oder am Hauptprojekt vorgenommen wurden, während ich bereits damit beschäftigt war, die finale Release-Version zu erzeugen. Mehrfach checkte ich ein “finales Release” in SVN ein, das dann wieder Veränderungen erfuhr und somit über den Haufen geworfen wurde. Die Vereinbarung von Codefreeze-Terminen vor Releases wäre hier dringend notwendig!!!

Zwischen den beiden Releases verbrachte ich etwa drei Wochen mit dem Fixen von Bugs, der Umstrukturierung von Verzeichnissen in unserem SVN-Code-Repository und anderen recht undankbaren Aufgaben. In dieser Zeit hing mir die Arbeit regelrecht zum Hals raus und die Stunden und Tage wollten einfach nicht vorbei gehen. Zusätzlich war Thiago in dieser Zeit sehr beschäftigt und für Fragen praktisch nicht zugänglich, was die Situation weiter verschärfte. Oft wusste ich noch nicht einmal, was von mir erwartet wurde und konnte daher auch nicht wirklich auf ein Ziel zuarbeiten. Auch wenn ich bereits vorher solche Zeiten erlebt hatte, waren diese Wochen doch die bisher schlimmsten während meines Praktikums.

Nachdem das Release von Sigilowin für AIESEC mit mehrtägiger Verspätung endlich fertig war, ließ ich Thiago deutlich wissen, dass ich mir interessantere Aufgaben wünschte. Und ich glaube er hat auch sehr gut verstanden, dass ich während der letzten Wochen nicht besonders zufrieden mit meiner Arbeit war. Schließlich bekam ich endlich mein vollkommen eigenes Projekt, das ich nun von Grund auf selbst entwickle. Bereits zu Beginn meines Praktikums habe ich einen Übergang von unseren textbasierten ToDo-Listen zu einem System wie Bugzilla vorgeschlagen. Inzwischen habe ich erfahren, dass Thiago bereits für frühere Projekte (u.a. MODPosto) aus den Methoden “eXtreme Programming” und “Scrum” eine Art eigene agile Methode für die Softwareentwicklung generiert hat. Also suchten wir zunächst nach einer fertigen Software, die die Verwaltung von Features, Bugs und Activities im Rahmen dieser Methode ermöglicht. Natürlich gibt es jede Menge Tools und Web-basierte Anwendungen wie Bugzilla, aber kein System setzt erfolgreich agile Methoden um oder – wenn doch – begrenzt den Anwender auf eine bestimmte davon (z.B. “eXtreme Programming”). Schließlich entschieden wir uns, ein eigenes Tool dafür zu entwickeln und das ist jetzt meine neue Aufgabe.

Das Tool wird ebenfalls in Client-/Sever-Architektur entwickelt und arbeitet wie MODPosto auch im 2-Tier-Modus mit SQLite3. Bei der Entwicklung soll die von Thiago entwickelte agile Methode bereits zum Einsatz kommen, was für mich eine sehr große Lernerfahrung im Bereich der praktischen Umsetzung von (Uni-)Theorien ist. Mit diesem neuen Projekt macht die Arbeit nun wieder richtig Spass und die Zeit fliegt nur so vorbei. An manchen Tagen kommt es mir so vor als sei ich nur wenige Stunden bei der Arbeit gewesen, da ich die ganze Zeit über voll konzentriert beschäftigt bin. Da die Fertigstellung meines Projekts allerdings nicht die höchste Priorität hat, bekomme ich zwischendurch auch immer wieder Bugfix-Aufgaben, die z.T. wieder langweiliger sind. So schlimm wie in den oben erwähnten 3 Wochen ist es zum Glück aber bisher nicht mehr geworden. Und ich hoffe, dass das die letzten 10 Arbeitswochen so bleibt!!!

Fortsetzung folgt später…