Software-Wartung in Delphi

Das Fallbeispiel beschreibt die Wartung mehrerer Delphi-Applikationen für die Tourenplanung einer städtischen Müllabfuhr.

Branche: Öffentlicher Dienst

Programmiersprache: Delphi, Java, PL/SQL

Datenbank: Oracle

Architekturstil: Delphi-Desktop-Applikationen und Java-Server, die Daten über eine zentrale Datenbank austauschen und sich über Oracle-Pipes synchronisieren

Betriebsplattform: Windows Server

Ausgangssituation

Der Kunde hatte einen Wartungs- und Supportvertrag mit dem Hersteller einer Standard-Software, der dann einseitig durch den Hersteller gekündigt worden ist.

Als Reaktion darauf hat der Kunde die Ablösung und Neuentwicklung des Systems gestartet. Um die Funktionsfähigkeit des bestehenden Tourenplanungs­systems weiterhin parallel zu gewährleisten, wurde ein Wartungs- und Supportvertrag mit den CodeKeepers geschlossen.

Herausforderung

Bei der Tourenplanung handelt es sich um eine Standard-Software mit indivi­duellen Anpassungen, die mit einem Aufwand von vielen Personenjahren entwickelt worden ist.  Den Quellcode und die zugehörige Dokumentation hat der Kunde vom Hersteller erworben. Die Herausforderung bei dieser War­tungs­aufgabe ist die schiere Masse an heterogenem Quellcode einer komplett fremden Software, die adoptiert werden muss:

  • Delphi/Pascal-Dateien: > 2 Millionen. Zeilen

  • SQL-Skripte: ~200.000 Zeilen

  • PL/SQL: > 250.000 Zeilen

  • Java: > 100.000 Zeilen

Ohne einen gewissen Mut zur Lücke, kann man eine solche Aufgabe nicht angehen.

Umsetzung

Die Übernahme der Wartung eines Softwaresystems erfordert eine Reihe von Voraussetzungen, die erfüllt sein müssen:

Technisches Verständnis des Systems: Ein tiefgreifendes Verständnis der verwendeten Technologien, Programmiersprachen, Frameworks und der Architektur des Softwaresystems ist grundlegend. Das ist die Kernkompetenz unserer Mitarbeiter, die verschiedenste Technologien beherrschen, keine Scheu vor dem Unbekannten haben und eine große Lernbereitschaft mitbringen.

Verständnis der Geschäftsprozesse: Einblicke in die Geschäftsprozesse und Anforderungen, die das Softwaresystem unterstützt, ist essenziell. Da dies die Domäne unseres Kunden ist, bekommen wir hier immer Hilfe. Diese Mitwirkung ist überlebenswichtig.

Zugang zu Dokumentation: Zugriff auf die vollständige und aktuelle Dokumentation des Systems, einschließlich Code-Dokumentation, Architektur-Dokumente und Benutzerhandbücher hilft ungemein. Hier war es eine Herausforderung die Dokumentation aus einem externen System des Herstellers zu exportieren. Manche Teile der Dokumentation waren nicht für unsere Augen bestimmt. Tiefergehende Architektur-Dokumentation ist deshalb nicht vorhanden. Die Versionshistorie des Quellcodes konnte ebenfalls nicht bereitgestellt werden. Hier klafft für uns immer noch eine Lücke.

Zugang zum Quellcode: Zugriff auf den vollständigen, aktuellen Quellcode und aller benötigten Bibliotheken und Komponenten Dritter ist notwendig, um das System bauen und ausliefern zu können. Hier hatten wir Hilfe des Herstellers, der uns bei der Einrichtung der Build-Umgebung geholfen hat. Alle benötigten Build-Artefakte liegen bei uns im Versionskontrollsystem GIT.

Entwicklungsumgebung: Eine geeignete Umgebung ist notwendig, die es ermöglicht, Änderungen sicher zu implementieren und zu testen, bevor sie in die Produktionsumgebung übertragen werden. Hier haben wir eine Entwicklungsumgebung in AWS eingerichtet, mit virtuellen Windows Servern und Delphi-Installationen und einer RDS-Oracle-Instanz.

Für eine monatliche Wartungspauschale halten wir qualifizierte Mitarbeiter sowie die Entwicklungs- und Test­umgebung vor. Die zugeordneten Mitarbeiter verbessern kontinuierlich ihr Wissen, Tests und die Build- und Entwicklungsumgebung, um im Fehlerfall besser reagieren zu können.

Ausblick

Das Herstellen eines stabilen Wartungszustand ist die Vorstufe für eine spätere Software-Modernisierung. Erst wenn die Software alle Voraussetzungen für die Wartung erfüllt (Verständnis, Build-und Deployment-Fähigkeit), kann sie überhaupt geändert werden. Es ist hier nicht das Ziel, die Software zu modernisieren, da parallel eine Neuentwicklung begonnen wurde.

Update: Mittlerweile ist die Neuentwicklung auf Eis gelegt. Eine solche umfangreiche Standard-Software mit einer eigenen Implementierung zu ersetzen, ist eine Mammut­aufgabe. Vielleicht muss die bestehende Software doch modernisiert werden. Der erste Schritt dazu ist mit der Wartungsfähigkeit getan.