Technical Digest: Agile Entwicklungspraktiken in Cobol? Es geht doch!

von Holger Bohlmann und Nicolas Botzet

Das Setting

Wir bieten bei it-agile für das Certified Scrum Developer Programm der Scrum Alliance seit einigen Jahren einen Kurs zu agilen Entwicklungspraktiken an. Dort lernen die Schulungsteilnehmer als Team zu arbeiten und eine Beispielanwendung nach agilen Entwicklungspraktiken (z.B. TDD, Refactoring, etc) zu bauen. Moderne Programmiersprachen wie beispielsweise Java und C# bieten dafür schon seit langem das entsprechende technische Handwerkzeug. Man muss es nur benutzen.

Ein Kollege und ich haben nun diesen Kurs von Java nach Cobol transferiert. Sozusagen aus der Moderne in die Frühzeit der Programmiersprachen. Ein erstes Lernergebnis: Wir müssen unser Beispiel an die Host-Anwendung und den Arbeitsalltag der Entwickler anpassen. Batch-Verarbeitung ist dort üblich, insofern mussten wir auch ein passendes Beispiel finden.

Der Batch-Job

Cobol-Programme haben meist einen ganz klassischen Ablauf: Einzelne Daten werden in einer großen Datei angeliefert, eingelesen und Werte zusammengerechnet. So werden viele Anwendungen als Batch-Jobs prozessiert. Wir verwenden hier ein ähnliches Beispiel: Es sollen einzelne Ertragskennzahlen von Personen in einem Unternehmen auf verschiedene Weise aggregiert werden. Hierzu verwenden wir als Eingabedaten eine Liste von Einnahmen und Ausgaben nach Personen, Teams (nach Kostenstellen) und Monat. Ausgegeben werden verschiedene Übersichten, wie z.B. die Auflistung von Monatsergebnissen oder eine Einzelaufstellungen pro Person.

Testen

Was ist nun mit Testen? Ein Test-Framework kann man sich auch selbst schreiben. Es ist einfach, Ergebnisse zu vergleichen und eine entsprechende Ausgabe aufzubereiten. Ein Programm muss dafür jedoch so geschnitten sein, dass es testbar ist. Auch in Cobol kann man sich mit Haupt- und Unterprogrammen überlegen, wie Funktionalitäten in kleinere Einheiten aufzuteilen sind. Befindet sich Logik in einem Unterprogrammen, kann diese über ein Test-Hauptprogramm aufgerufen werden. Man wird leider keine schöne, grafische Aufbereitung von Tests bekommen und muss ständig Jobs starten, um die Test auszuführen. Sofern der Host nicht mit anderen Aufgaben ausgelastet ist, gibt es jedoch immerhin zeitnahes Feedback.

Die Host-Umgebung des Unternehmens, für das die Schulung entwickelt wurde, bietet auch selbst entwickelte, automatisierte Akzeptanztests an. Darin werden Programme gestartet und deren Text-Ausgaben auf Korrektheit geprüft, indem diese mit Musterausgaben verglichen werden. Mit Hilfe dieser Umgebung können Entwickler Funktionalität aus Anwendersicht testgetrieben hinzufügen oder ändern:Die Ausgaben anpassen, wie sie sein sollen und dagegen den Code entwickeln. Auch hier sind die Turn-Around-Zeiten bedingt durch die Umgebung langsam, aber trotzdem ist Feedback relativ zeitnah möglich.

Das Fazit

Agile Entwicklungsmethoden lassen sich somit auch auf Programmiersprachen aus der Frühzeit der Softwareentwicklung anwenden. Leider gibt es keine breite Tool-Unterstützung und gewohnte Feedback-Zeiten ziehen sich oft sehr in die Länge, aber mit etwas Geduld und Willen ist es möglich. Die vermeintliche Wahrheit "Das geht bei uns nicht, weil wir Cobol benutzen" hat somit mehr Fragezeichen bekommen.