Für einen Automobilhersteller musste eine Lösung für den After Sales Service weiterentwickelt werden, welche dynamisch die für ein Fahrzeug bei einem Software-Update die zu ladenden Softwarepakete ermittelt. Meine Aufgabe war es, in Zusammenarbeit mit dem Hersteller die Spezifikation zu präzisieren, zu implementieren und automatische Tests dafür zu schreiben. Die bestehende Applikation war noch in Tcl geschrieben und wurde zunächst erweitert, danach aber in JRuby re-implementiert. Für die Softwaretests habe ich daneben auch MRI Ruby und zsh benutzt. Als Plattform kam Windows, AIX und Linux zum Einsatz.
Parallel zu der weiter unten beschriebenen Japanisch-Lernhilfe auf Python-Basis, habe ich mit der Entwicklung einer web-basierenden Version dieser Anwendung begonnen. Die Entwicklung erfolgt unter Verwendung von Rails 4.1.1, Ruby 2.1.1 und git.
Im Zuge der Vorarbeiten für eine Web-Applitkation habe ich als "proof-of-concept" eine Demo geschrieben, bei der der User mit einer HTML5 Canvas interagieren kann (Setzen und Löschen von Markierungen, Anzeigen von Informationen über die Markierungen mittels Tooltips)
Um bei einer privaten Party die Abrechnung zu erleichtern, habe ich eine kleine JavaScript Anwendung geschrieben, bei der die Teilnehmer ihre jeweiligen Ausgaben eingeben können und daraus der Finanzausgleich errechnet wird, d.h. wer wieviel wem zu zahlen hat.
Ich entwickle ein Programm, welches beim Trainieren von Begriffen und Redewendungen der japanischen Sprache hilft. Diese Anwendung entwickle ich unter Python 2.3.5, wobei der Code kompatibel zu Python 3.3 gehalten wird. Für die GUI wird die Standarbibliothek tkinter verwendet. Eine - noch unvollständige - Vorabversion kann hier heruntergeladen werden.
Im Zuge des Designs für eine mobile Applikation habe ich als "ausführbare Spezifikation" eine State Machine entwickelt, welche das Verhalten des zu entwickelnden Systems spezifiziert. Ich habe dazu die Version 1.8.6 von Ruby eingesetzt.
Um die Qualität von Software zu sichern, die beispielsweise in Firmwarekomponenten zum Einsatz kommt, mußte ein Testsystem geschrieben werden, welches neue Softwarestände auf Kompatibilität mit den bestehenden Komponenten prüft. Dazu wird ein automatischer Testprozess gestartet, der die notwendigen Tests startet und die Ergebnisse bewertet. Da ein kompletter Testdurchlauf oft mehrere Stunden in Anspruch nimmt, mußte die Testsoftware selbstätig Optimierungen vornehmen können, zum Beispiel indem überflüssige Tests eliminiert und andere Tests parallelisiert ausgeführt wurden.
Ergänzend dazu habe ich Tools entwickelt, welche beim Deployment, Management und Enduser-Support unserer Anwendungen helfen, beispielsweise eine Toolsuite, welche nicht mehr benötigte alte Testergebnisse findet und die zugehörigen Dateien löscht, um den Speicherplatz wieder freizugeben.
Diese Applikation besteht aus mehreren simultan ablaufenden Komponenten, die auf einer Farm aus Solaris-, Linux- und Windows-Hosts ablaufen. Für die Koordination der Prozesse kam LSF (von der Firma Platform Computing) und für die Datenhaltung Orcale zum Einsatz. Den überwiegende Teil der Anwendung habe ich (weitgehend objekt-orientiert) in Perl geschrieben, ergänzt um Shell-Scripts in bash und zsh. Als Versionsverwaltungssystem wurde sowohl für die Applikation selbst, als auch für die zu testende Software Multi-Site Clearcase eingesetzt. Ein davon unabhängiges, separates Testsystem wurde mit svn versioniert. Ergänzend dazu habe ich für die Unterstützung meiner Entwicklungsarbeit für meinen Eigenbedarf kleine Tools in Tcl/Expect, Ruby und Python gescriptet.
Ich habe ein Testframework für den Regressionstest einer in Java geschriebenen Kundenapplikation entworfen und implementiert. Die Testprogramme erzeugen hierbei dynamisch XML Dateien, welche von der zu testenden Applikation verarbeitet werden. Danach überprüfen die Testprogramme, ob die Applikation die Datenbank korrekt verändert hat. Die Testtools sind zu ca. 90% in Ruby geschrieben, wobei die Kompaitibiltät zu JRuby sichergestellt wird. Das Interface zur Applikation wird mit Java und Ant hergestellt, wobei Java Code teilweise handgeschrieben, teilweise zur Laufzeit aus Ruby heraus generiert wird. Unterstützende Tools werden in Ruby und in der z-Shell implementiert.
Ausgangspunkt waren einige vom Kunden geschriebene Testscripte in bash und Perl. Auf diesen aufbauend have ich ein Testframework entwickelt, so daß sich weitere Testfälle mit geringem Aufwand implementieren ließen. Für diesen Teil der Aufgabe wurde ca. 80% Perl nach objekt-orientierten Prinzipien, sowie 20% bash Skripting eingesetzt. Ergänzende Tools have ich in der z-Shell und in Tcl/expect implementiert. Zur besseren Bedienbarkeit der Testsuite habe ich ein GUI in Ruby/Tk geschrieben.
Für eine Web-Anwendung in Java/JSP (mit ergänzenden Teilen in Server- und Client-Side JavaScript) habe ich Fehlerbehebungen und Erweiterungen implementiert und das Deployment der Änderungen mit Hilfe von bash-Scripten automatisiert. Um die Verfügbarkeit der Website zu verbesseren, habe ich außerdem Programme zur Überwachung und Fehleranalyse geschrieben (meist in Perl, zu einem geringeren Teil in bash, Java und JavaScript). Weitere Tools, z.B. zum Generieren von Testdaten, habe in Perl implementiert.
Zum Test einer C++ Anwendung im Bereich der Telekommunikation sollte ein neues, objektorientiertes Testframework entwickelt werden, auf dessen Basis die Entwickler und Tester auf einfache Weise Testfälle für Regressionstests durchführen können. Ich habe für dieses Projekt, das in Perl realisiert wurde, zwar selbst keine Implementierung durchgeführt, war aber als Projektleiter für Design und Überprüfung der Codequalität verantwortlich.