Die Software-Modernisierer Die Grundlagen der Modernisierung von Legacy-Anwendungen Für jede Organisation, die eine Modernisierung ihrer Legacy-Anwendungen anstrebt, hat der Vorgang eine andere, ganz spezielle Bedeutung. Für die einen bedeutet er, eine Reihe von Programmen, die im Verlaufe mehrerer Jahrzehnten entstanden, gegen ein neues kohärentes System auszutauschen, und hierfür die neueste und beste Hard- und Softwaretechnik einzusetzen. Andere Organisationen verstehen hierunter, vorhandene Applikationen von teuren Mainframe-Systemen auf effizientere handelsübliche Plattformen zu migrieren. Ein weitverbreitetes Ziel einer Modernisierung ist die Migration von COBOL- zu Java-basierten Umgebungen. Mit dem Ziel einhergehen kann ein friedliches Nebeneinander von Java- und COBOL-Komponenten, die letztliche Ablösung der COBOL-Komponenten mit funktionell gleichwertigen Java-Komponenten oder ein Lösungsweg, der zwischen diesen zwei Extremen liegt. Ganz gleich welche der zahlreichen Möglichkeiten zur Migration letztlich gewählt wird – der Ansatz ist stets derselbe: Das Re-Hosting und die Verfeinerung erfolgen immer schrittweise. Der Wechsel von einem COBOL-Programm, das auf einer traditionellen EDV-Plattform läuft, hin zu einem modernen, wartbaren Java-basierten System ist weder einfach noch leicht. Aber mit dem richtigen Ansatz und einem Mindestmaß an Einsatz und Entschlossenheit kann dieses Ziel erreicht werden. Wenn man sich den folgenden Wahrheiten gegenüber nicht verschließt und gewisse Konsequenzen als gegeben hinnimmt, kann dieses Ziel von praktisch jeder Organisation erreicht werden: Wahrheit Nr. 1: Die einzige Spezifikation, die zählt, ist der bestehende Code. Wahrheit Nr. 2: Sie wohnen weiter in Ihrem Haus, während es renoviert wird. Wahrheit Nr. 3: Die Nahtstellen entscheiden über den Erfolg oder Misserfolg. Gewiss lassen sich viele Einschränkungen und Fallstricke aufzählen, die bei Softwarekonvertierungen auftreten können. Wenn man diese drei Wahrheiten indes akzeptiert und mit ihnen lebt, dann kann dies den entscheidenden Unterschied ausmachen zwischen Erfolg und Misserfolg, zwischen Berechenbarkeit und Überraschung. Die Akzeptanz dieser Wahrheiten kann darüber entscheiden, ob das Projekt kontrollierbar bleibt oder den Beteiligten aus den Händen gleitet, ob es bezahlbar bleibt oder exorbitante Kosten produziert. COBOL ist die einzige Anforderung, die zählt. Die Anforderungen, die an die Programmiersprache COBOL gestellt wurden, waren zu Beginn bescheiden. Heute jedoch ist diese Genügsamkeit von COBOL nicht mehr die einzig entscheidende Eigenschaft dieser Sprache. Zwanzig, dreißig, gar vierzig Jahre hinweg haben Nutzer ihre COBOL-Programme so angepasst, verfeinert, verbessert und anderweitig modifiziert, dass sie den Datenverarbeitungsregeln und -standards ihrer Unternehmen sowie den von außen erzwungenen Regeln, Anforderungen und Einstellungen, ja den Vorgaben der direkten und indirekten Programmbenutzer haargenau entsprachen. In vielen, wenn nicht gar © 2016 EasiRun Europa GmbH EasiRun_Whitepaper_Legacy Modernisation_D_Java-is_2016_.docx | Seite 1 von 8 den meisten Fällen, gingen die Gründe für diese Anpassungen und die Einschränkungen, die hierdurch erkauft wurden, dadurch verloren, dass Entwickler verstarben, Prozesse alles andere als perfekt umgesetzt wurden, oder weil schlicht niemand daran dachte, dass es eines Tages wichtig werden würde, Codeanpassungen nachzuvollziehen. Tatsächlich halten die meisten Programmierer den Programmcode selbst für die einzig wahre Dokumentation. Die „Väter“ von COBOL waren sich dieses Bedürfnisses nach Anpassung und Modifizierung bewusst und erklärten es zu einem ihrer Ziele bei der Entwicklung der Programmiersprache. Daher gestaltet sich jedes Unterfangen, ein Programm durch ein neues, funktionell kompatibles, geschweige denn identisches Programm zu ersetzen extrem schwierig, wenn nicht gar unmöglich, sofern dabei nicht der Ansatz gewählt wird, das relevante und gewünschte Verhalten auf eine bestimmte Art und Weise aus dem vorhandenen Code zu “extrahieren” und die Ersatzimplementierung entsprechend zu gestalten. Praktisch gesehen sind es die vorhandenen Funktionsmechanismen innerhalb des vorhandenen Codes, in diesem Fall COBOL, welche die Spezifikationen beschreiben, die vorrangig erfüllt werden müssen. Leben in einer Baustelle In den seltensten Fällen kann ein Unternehmen sich den Luxus leisten, ein vollkommen neues Programmsystem zu schreiben und anschließend einem festgelegten Zeitplan folgend nahtlos vom alten auf das neue System zu wechseln. Dieses Vorhaben gestaltet sich meist auch dann schwierig, wenn ein Unternehmen der Meinung ist, sich diesen Luxus erlauben zu können. In der Realität sind Umsetzungen dieser Art gewaltig – und gewaltig teuer. Migrationen, die diese Methode vorschreiben, basieren auf der Vorstellung, dass Änderungen am vorhandenen System minimiert oder sehr präzise nachverfolgt werden können, während das neue System entworfen und gebaut wird. Hierbei werden für gewöhnlich detaillierte Prozesse entworfen, die sicherstellen sollen, dass die Annahmen über den Code zutreffen. Derartige Umsetzungspläne basieren meist auf einem Projekt, für das ein bestimmter Umfang festgelegt wurde und dessen Fertigstellung planmäßig zu erfolgen hat. Diese Migrationen basieren auch auf der Annahme, dass die Entwickler des neuen Systems alles Nötige über das zu ersetzende System wissen. Beide Annahmen stellen sich fast immer als falsch heraus. Das Ergebnis ist, dass immer weitere Anstrengungen unternommen werden müssen, und das Projekt kein Ende findet: Das Projekt schreitet ein Stück voran, dann tauchen Fehler auf – der Schritt muss wiederholt werden, Programmwechsel werden geplant – aber nicht umgesetzt. In der Zwischenzeit laufen die Altprogramme weiter, denn sie stützen letztlich ja das Business. Derweil müssen diese Altprogramme an neue gesetzliche Vorschriften, die geschäftlichen Veränderungen und an die Bedürfnisse, Wünsche und Launen der User weiter angepasst werden. Nicht selten versucht in diesen Fällen eine Gruppe Abtrünniger, kühner aber wohlmeinender Entwickler, das Altsystem soweit zu verbessern, dass es in einigen kritischen Punkten besser agiert als das neue System. In vielen Fällen zieht sich das Migrationsprojekt solange hin, bis das neue System veraltet ist, noch bevor es überhaupt zum Einsatz kommen konnte. Eine Voraussetzung für eine erfolgreiche Modernisierung von Legacy-Anwendungen ist, dass das Ersatzsystem modular aufgebaut ist, so dass es produktiv parallel zu den noch nicht ersetzten Modulen eingesetzt werden kann. Diese Module müssen klein genug gebaut sein, damit sie getestet werden können, noch bevor die Altprogramme aufgrund betrieblicher Veränderungen in entscheidenden Punkten abgeändert © 2016 EasiRun Europa GmbH EasiRun_Whitepaper_Legacy Modernisation_D_Java-is_2016_.docx | Seite 2 von 8 werden müssen. Zudem muss auch das Legacy-System modularisiert sein, damit es der Ordnung des neuen Ersatzsystems entspricht. Über Erfolg oder Misserfolg des Projekts wird an den Nahtstellen entschieden Doch auch mit einer Modul-Austausch-Strategie kommt es unweigerlich zu Reibungspunkten, an denen der Code und die an ihn gestellten Anforderungen sich verändern und auf externe Faktoren reagieren. Diese Reibungspunkte treten sehr wahrscheinlich an der Nahtstelle zwischen dem Austauschmodul und dem Funktionsmechanismus des Altsystems auf, mit dem beide interagieren. An diesen Punkten sollten auch Anpassungen an das Altsystem eingeplant und vorgenommen werden. Es kann davon ausgegangen werden, dass ein Großteil der nicht eingeplanten Arbeiten im Zusammenhang stehen werden mit Schwierigkeiten an diesen Nahtstellen. Hinzu kommt, dass diese Nahtstellen nicht statisch sind, sondern sich ständig verschieben und sich mit dem Einpflegen neuer Module und der Vereinnahmung dieser Stellen fortwährend vermehren. Es lohnt daher, sich auf die Verwaltung der Nahtstellen zu konzentrieren, da diese sich zum entscheidenden Faktor auswachsen können, welcher über Erfolg oder Misserfolg der Modernisierung entscheidet. Ein Gesamtbild entsteht Mit diesen drei grundlegenden Wahrheiten - die es zu akzeptieren gilt - sowie mit COBOL als der entscheidenden Anforderungssprache für die Projektierung, dem schrittweisen Systemwechsel mithilfe von Modulen und der Minimierung von Unterbrechungen an den sich ständig verschiebenden Nahtstellen zwischen dem neu entwickelten Code und dem parallel weiter genutzten Altcode, entwickelt sich nun ein Bild von den Tools, die zur Erreichung des Ziels notwendig sind. Das ideale Werkzeug hierfür wäre eines, das den Anforderungen der Programmiersprache des Ausgangssystems, also dem COBOL-Code Rechnung trägt, und gleichzeitig die Prozesse, die benötigt werden, umfassend und detailliert abbildet, um hieraus neuen COBOL-Code zu generieren, welcher innerhalb einer modernen Umgebung auf einer beliebigen Computerplattform ausgeführt werden kann. Dieses Werkzeug sollte im Idealfall in der Lage sein, Altprogramme in ein Modulsystem zu überführen und mit den vorhandenen Daten und der vorhandenen Logik so lange zu kommunizieren, wie dies nötig erscheint. Überdies sollte es auf effiziente und unkomplizierte Art und Weise mit Programmen in der neuen Umgebung kommunizieren, die keine Abkömmlinge des Altsystems sind und aus architektonischer Sicht deutlich anders ausgeformt sein können als die alten Programme. Dieses Werkzeug muss entweder eine hochmoderne integrierte Entwicklungsumgebung mitbringen oder Bestandteil einer solchen IDE sein, die nicht nur die Bearbeitung und das Debugging des von diesem Werkzeug erzeugten Codes erlaubt, sondern auch eine Verwaltung des Quellcodes, ein sprachenübergreifendes Debugging und eine Möglichkeit zum Testen vorsieht. Vor allem aber sollte die Entwicklungsplattform es ermöglichen, auf einfache und zuverlässige Weise durch den Altcode zu navigieren und diesen zu überarbeiten. Die zur Verfügung gestellten Instrumentarien sollten in ihrer Ganzheit den Modernisierungsprozess vollumfänglich abbilden – von der Analyse der Altprogramme über das schrittweise Re-Hosting der vorhandenen Funktionen mithilfe der Migration von Modulen, bis hin zum Austausch und der Integration von Funktionen innerhalb einer Gesamtarchitektur, die auf einer Vielzahl moderner Paradigmen aufgebaut ist. © 2016 EasiRun Europa GmbH EasiRun_Whitepaper_Legacy Modernisation_D_Java-is_2016_.docx | Seite 3 von 8 Ein solches Werkzeug ist isCOBOL. Am Anfang der Entwicklung von isCOBOL stand das Bedürfnis nach einer zuverlässigen und unverzichtbaren Technik, die in dieser Form noch nicht erhältlich war. Diese neue Technik sollte es ermöglichen, vorhandenen COBOL-Code zu modernisieren und sich dabei auf die genannten Wahrheiten stützen, welche für derartige Zwecke grundlegend und unausweichlich sind. SoftwareDesigner, die über Jahrzehnte Erfahrung in der Entwicklung geschäftskritischer Systemsoftware verfügen (darunter COBOL-Compiler und COBOL-basierte Compiler und -Systeme), machten sich ans Werk, das ideale COBOL-Modernisierungswerkzeug zu erschaffen. Das Ergebnis ihres Schaffens ist isCOBOL, ein Javabasiertes System, das nunmehr als die zuverlässigste und effizienteste Lösung gelten kann, eine vorhandene COBOL-Anwendung zu einer hundertprozentigen Java-Unternehmenssoftware-Umgebung zu mirgieren. Java Warum Java? Java wurde gewählt, weil es sich technisch besonders gut für diesen Zweck eignet und abseits der Technik über besondere Stärken verfügt. Aus technischer Sicht ist Java die ideale Plattform für Migrationsprojekte. Java-Code lässt sich vollständig und mit überschaubarem Aufwand auf jede moderne Plattform, auch die Microsoft-Windows-Umgebung, alle wichtigen UNIX- und Linux-Plattformen, IBMMainframe-Umgebungen und eine Vielzahl von Spezialsystemen portieren. Nie zuvor hat es in der Computergeschichte eine Programmiersprache gegeben, die es erlaubt, ein einzelnes Programm sowohl für sämtliche kommerziell verfügbare als auch für zukünftig zu entwickelnde Umgebungen zur Verfügung zu stellen. Java ist modern. Als es gegen Ende des 20. Jahrhunderts erschaffen wurde, war das Goldene Zeitalter der Programmiersprachen längst Geschichte und die Entwickler von Programmiersprachen hatten es entsprechend schwer. In den drei der Java-Entstehung vorangehenden Jahrzehnten hatten sie praktisch jeden denkbaren Versuch unternommen, die ultimative Programmiersprache zu entwickeln. Von der Erfahrung dieser Zeit profitiert heute Java. Innerhalb der vergangenen 15 Jahre, in denen Java sich entwickelte, wurde es zunehmend zur Sprache der Wahl in der Lehre der Computer- und Programmierwissenschaft sowie bei der Implementierung von objektorientierten Systemen. Als neuestes Mitglied im Pantheon nichtproprietärer, universeller Programmiersprachen steht Java daher für Modernität. Java ist zudem performant. Bei Java hat man von Anfang an den Ansatz verfolgt, ein hohes Maß an Portabilität mithilfe virtueller Maschinen zu erreichen. Anders als seine Vorgänger jedoch hat die JavaCommunity große Anstrengungen unternommen, die hierbei entstehenden Performance-Nachteile zu minimieren oder gänzlich aufzuheben, unter denen andere Programmiersprachen leiden. Heute ist die Java-eigene “Just-in-Time-Kompilierung” von virtuellen Anweisungen in native Maschinenbefehle wohl die fortschrittlichste Kompilierung, die es gibt. Das Ergebnis ist, dass die meisten Java-basierten Programme, die in einer repetitiven Umgebung (Server) ausgeführt werden, beinahe genauso performant sind wie handgeschriebene direkte Kompiliersprachen wie etwa C. Wenn es bei Geschäftsprogrammen auf die Performance ankommt, sucht Java seinesgeichen. Am wichtigsten zu werten jedoch ist die hohe Akzeptanz, gar Präferenz für Java vonseiten der Entwicklergemeinde, wenn es um die Entwicklung wichtiger Geschäftsprogramme und Automatisierungslösungen geht. Viele, wenn nicht gar die meisten Unternehmen, welche geschäftskritische Anwendungen entwickeln oder wählen, haben bereits eine Langzeitstrategie für die Java-Migration ihrer Programme definiert. Die Zahl dieser Unternehmen dürfte in Zukunft sogar noch steigen. Sie haben die Vorteile von Java erkannt und sind allesamt zu demselben Ergebnis gekommen. Dies bedeutet, dass die Entscheidung für isCOBOL sich in den meisten Fällen mit dem Wunsch des Kunden deckt, COBOL-Anwendungen mit dem Ziel Java zu modernisieren. © 2016 EasiRun Europa GmbH EasiRun_Whitepaper_Legacy Modernisation_D_Java-is_2016_.docx | Seite 4 von 8 COBOL beschreibt die neuen Spezifikationen Jede Modernisierung dreht sich im Kern darum, sicherzustellen, dass im modernen neu zu entwickelnde System die gleichen Geschäftsvorgänge implementiert sind und diese zu denselben Ergebnissen führen, wie es bereits im Originalsystem der Fall ist. Auch wenn Änderungen und Verbesserungen der Programme für die moderne Plattform in Aussicht gestellt werden, ist es nur in den seltensten Fällen erstrebenswert, diese Änderungen in der Entwicklungsphase umzusetzen, es sei denn, es ist sichergestellt, dass das alte und das neue System auf die gleiche Weise funktionieren. Wird diese Bedingung nicht erfüllt, erhöht sich der Migrationsaufwand beträchtlich und die Aussicht auf einen Erfolg rückt in weite Ferne. Leider lassen sich Änderungen an Geschäftsprozessen in der Praxis für gewöhnlich nicht bis zum Abschluss der Migration aufschieben. In einem beliebigen nichttrivialen Projekt müssen Änderungen am arbeitsfähigen System durchgeführt werden, um wichtige interne Geschäftsvorgänge oder externe Spezifikationen abzubilden. Daher müssen in den meisten Projekten Änderungen am Produktionssystem, das sich im Modernisierungsprozess befindet, eingeplant werden. Der Übergang zu einem arbeitsfähigen, letztlich vollständig modernisierten System soll dabei nahtlos erfolgen. Ein Ausweg aus diesem Dilemma tut sich auf, sobald man das COBOL-Erbe nicht als Ausdruck der Geschäftsregeln und -vorgänge einer veralteten Programmiersprache betrachtet, sondern als ihre Abbildung innerhalb einer lebendigen Beschreibungssprache, die sowohl Implementierungen für das Altsystem als auch für das moderne Zielsystem produziert. Der Prozess wird klar, wenn wir die Schritte analysieren, welche in einem Migrationsprojekt für gewöhnlich durchlaufen werden. Schritt 1: Aufteilung der Problemstellung Wenn wir mit einer Sammlung von COBOL-Programmen beginnen, besteht der erste Schritt darin, die Programme zu identifizieren, die vom Modernisierungsprojekt erfasst werden sollen. Dies können alle COBOLProgramme des Unternehmens sein oder nur die Programme einer bestimmten Abteilung, einer Reihe von Abteilungen oder einfach eine Reihe von Programmen, aus denen ein Pilotprojekt oder eine taktische Modernisierungsumstellung besteht. Ganz gleich wie groß der Umfang der Umstellung ist – sobald der Satz der zu migirerenden Programme identifiziert wurde, kann der Modernisierungsplan formuliert werden. Oftmals ist der Projektumfang durch die strategische Wahl zugunsten von Java innerhalb des Unternehmens bestimmt. In diesem Fall wurden die Java-basierten Funktionen bereits geplant und implementiert, die Altprogramme werden dann im Rahmen des Projekts in die Java-Umgebung implementiert. Wenn wir uns auf dieses Szenario konzentrieren, werden die Fragen und Maßnahmen zur Lösung der grundsätzlichen Probleme klar erkennbar. Bei Abschluss des ersten Projektschritts sollte feststehen, welche Reihe bestehender COBOL-basierter Programme in hundertprozentige Java-Funktionen überführt werden sollen. Schritt 2: Minimierung der Berührungspunkte zwischen dem alten und neuen System Nachdem wir nun die zu migrierenden bestehenden Programme identifiziert haben, ist es wichtig, dass wir uns zum einen mit den Wegen vertraut machen, auf denen diese Programme mit dem alten System, das ja nun zumindest eine Zeit lang unangetastet bleibt, kommunizieren, als auch mit den Wegen der bereits bestehenden oder noch zu schreibenden Java-Programme. Normalerweise wird hier die Grenze um die gemeinsam genutzten Daten gezogen, die erhalten bleiben (einschließlich von Dateisystemen und Datenbanken). Hierzu gehören wahrscheinlich auch einige prozessuale Interaktivitäten, z.B. moderne Funktionen, sprich Vorgänge, die von Komponenten des Altsystems iniziiert oder angefordert werden sowie zu vererben-de Komponenten, die bestimmte Aufgaben für das moderne System übernehmen. Damit es zu © 2016 EasiRun Europa GmbH EasiRun_Whitepaper_Legacy Modernisation_D_Java-is_2016_.docx | Seite 5 von 8 keiner Reibung bei der Migration kommt, ist es wichtig, die Zahl dieser Berührungspunkte zwischen dem alten und dem neuen System so gering wie möglich zu halten. Taktisches Re-Engineering Sobald wir nun eine Aufstellung aller interaktiven Punkte erstellt haben, sollte feststehen, ob es Punkte gibt, die aus dem System entfernt werden können bzw. entfernt werden sollen oder die mit anderen Funktionen zusammengelegt werden können. So ist es beispielsweise denkbar, dass ein Altprogramm über Zugriffsrechte auf eine Datenbank verfügt, die kritische Informationen beinhaltet. Wenn nun einige oder auch alle Zugriffe im Zielprogramm isoliert werden, kann es von Vorteil sein, die Programmlogik dahingehend abzuändern, dass die Datenanforderungen auf die bestehenden Komponenten beschränkt bleiben und nicht gleich das moderne System mit unmittelbaren Zugriffsrechten auf diese Daten ausgestattet wird. Der Zeit- und Kostenaufwand für eine derartige Umstrukturierung des Altsystems sollte abgewogen werden gegen den Aufwand, welcher entsteht, wenn der modernen Umgebung ein direkter Zugriff auf diese Daten gestattet wird. Eine weitere Kategorie des Schnittstellen-Re-Engineering entsteht, wenn Komponenten innerhalb einer Reihe von Zielprogrammen auf eine Art und Weise miteinander kommunizieren, die in der modernen Umgebung nicht gewünscht ist. Dies kann dann der Fall sein, wenn beispielsweise zwei der Zielprogramme über einen proprietären oder nur im Altsystem vorhandenen Mechanismus miteinander kommunizieren, der in der modernen Umgebung entweder nur mit großem Aufwand oder gar nicht bereitgestellt werden kann oder dessen Einsatz nicht gewünscht ist. In diesen Fällen kann die vorhandene Schnittstelle oftmals durch eine Äquivalente ausgetauscht werden, die sich mit geringerem Aufwand in die moderne Umgebung übertragen lässt. Ein dritter Bereich des taktischen Re-Engineerings betrifft die Konsolidierung problembehafteter Funktionen zugunsten einer kleinen Zahl von Komponenten. Die meisten großen Projekte beinhalten eine Reihe von Mechanismen, die idealerweise in die Modernität überführt werden, indem man sie vollkommen neu gestaltet und implementiert. Um die Auswirkungen dieser Neugestaltung zu minimieren und das Projekt mit einer möglichst geringen Anzahl kritischer Hürden voranzutreiben, lohnt sich oftmals die Mühe, die erneut zu implementierenden Funktionen vorübergehend in der COBOL-Umgebung zu isolieren. Auf diese Weise muss das Projekt nicht aufgeschoben werden, und die neugestaltete Komponente kann sobald sie fertig ist - mit minimalen Auswirkungen auf das Produktivsystem implementiert werden. In jedem Fall muss sichergestellt sein, dass die modernen Komponenten mit den Altschnittstellen harmonieren, die nach dem Re-Engineering weiterhin vorhanden sind. Zudem müssen etwaige zusätzliche neue Schnittstellen identifiziert und ihre Funktionsweise festgelegt werden. Der wichtigste Aspekt dieses taktischen Re-Engineerings ist, dass dessen Aufgaben vor oder während des Hauptmodernisierungsprojekts durgeführt werden können. Wird der bewährte bzw. modernisierte COBOL-Code als dynamische Spezifikation betrachtet, der das korrekte Verhalten sowohl im alten als auch im neuen System definiert, profitieren beide Systeme von den Änderungen, und ihre Funktionen können identisch bleiben. Schritt 3: Implementierung der Anforderungen in Java Nachdem wir die zu modernisierenden Anwendungskomponenten identifiziert und das zur Vorbereitung auf die Modernisierung erforderliche Re-Engineering der alten Komponenten durchgeführt haben, erhalten wir eine genaue Beschreibung des Verhaltens in COBOL, die sowohl auf das alte als auch das neue System angewendet werden kann. Die Werkzeuge von isCOBOL erlauben es nun, aus denselben COBOLBeschreibungen heraus funktionsfähige, moderne Java-Komponenten (Java-Klassen) zu erstellen, deren © 2016 EasiRun Europa GmbH EasiRun_Whitepaper_Legacy Modernisation_D_Java-is_2016_.docx | Seite 6 von 8 Verhalten identisch ist mit den entsprechenden alten Komponenten, welche sie ersetzen. Dies bedeutet nicht nur, dass das bestehende System und die modernen Komponenten während der Umstellung weiter miteinander interagieren können, sondern auch, dass eine moderne Java-Implementierung der Zielfunktionen sofort für den Produktiveinsatz zur Verfügung steht, sobald die notwendigen Validierungen und Test abgeschlossen sind. Schritt 4: Überprüfung der lauffähigen Version Wir sind nun an einem Punkt angelangt, an dem die COBOL-Spezifikationen, die von den in isCOBOL produzierten Java-Klassen generiert wurden, auf einer beliebigen Computerplattform laufen können, die Zugriff auf die erforderlichen Komponenten hat, die nicht in Java geschrieben sind (sofern diese Komponenten überhaupt vorhanden sind). In vielen Fällen bedeutet dies, dass bereits zu diesem Zeitpunkt eine hundertprozentig lauffähige Java-Version zur Verfügung steht. Der nächste Schritt besteht in allen Projekten nun darin, die Funktionen dieser lauffähigen Java-Version mit der Funktionsweise der alten Komponente zu vergleichen. Neben den genutzten Routinetests verfügt isCOBOL auch über einmalige Fähigkeiten zur Nachverfolgung von Programmzuständen. Hierdurch ist es möglich, die meisten Programmverhaltensweisen nicht nur hinsichtlich des durch einen Input erzeugten Output zu überprüfen, sondern auch entsprechend des genauen Funktionsaufrufs und des Inhalts von Datenbereichen, die zwischen aufrufenden und aufgerufenen Programmen ausgetauscht werden. Durch die Nutzung dieser Fähigkeiten von isCOBOL kann eine Vielzahl von schwer fassbaren und schwierigen Fehlermeldungen genau nachvollzogen und mit einem hohen Maß an Sicherheit eine Aussage darüber getroffen werden, ob das Verhalten der Java-Komponenten mit dem des alten Systems übereinstimmt. Nach diesem Test und der Validierung steht nun zu Hundertprozent eine sofort ausbaufähige, moderne Java-Anwendung zur Verfügung. Da diese Anwendung mithilfe der COBOL-Spezifikationen erstellt wurde, kann sie überdies im Verlauf der Entwicklung des modernen Systems weiter modifiziert, erweitert oder ersetzt werden. In der Praxis beschreibt dieses Szenario nur selten das Ende des Migrationsprozesses, es sei denn, Ziel des Projekts wäre ein einfaches Re-Hosting der Anwendungen gewesen. Viel häufiger indes ist dies der Anfang einer schrittweisen Wartung und kontinuierlichen Verbesserung der vom Altsystem ursprünglich bereitgestellten Geschäftslogiken, die nun in der vollkommen modernen Java-Welt ausgeführt werden. Schritt 5 und folgende Abhängig von den strategischen Zielen des Modernisierungsprojekts können die anschließenden Aktivitäten verschiedener Natur sein. Das weitere strategische Re-Engineering kann in der neuen JavaUmgebung mittels Java, COBOL oder einer Mischung beider Programmiersprachen erfolgen. Auf einfache und saubere Weise kann das neue System mit anderen Java-basierten Systemen verbunden werden. Vorhandene Benutzeroberflächen können wieder eingebaut oder eine beliebige grafische oder webbasierte Technik kann ohne logische Brüche zwischen der Businesslogik und diesen Oberflächen implementiert werden. In vielen Fällen gibt es keinen zwingenden Grund, sich von den COBOL-Spezifikationen der grundlegenden Geschäftsvorgänge zu verabschieden. Häufig gibt es überzeugende Argumente dafür, Schritt für Schritt jene Logiken aus dem COBOL-Code zu extrahieren, die nicht die Kerngeschäftsprozesse erfassen, die hierdurch immer detaillierter beschrieben werden können. In einigen Fällen gibt es jedoch strategische oder politische Gründe dafür, die COBOL-Spezifikationen aus den Betriebsprogrammen zu verbannen. Mit isCOBOL kann der COBOL-Code auf saubere und elegante Art © 2016 EasiRun Europa GmbH EasiRun_Whitepaper_Legacy Modernisation_D_Java-is_2016_.docx | Seite 7 von 8 und Weise mittels einzigartiger Funktionen wie Embedded Java und Modern Alternative Syntax eliminiert werden. Diese Funktionen können bei Bedarf eingesetzt werden, um ein gezieltes Re-Engineering bestimmter Abschnitte vorzunehmen und in das Produktivsystem zu integrieren. Im Endeffekt können diese Funktionen aber auch dazu genutzt werden, COBOL-Code komplett aus Anwendungen zu entfernen, sofern dies das Ziel eines Projekts sein sollte. Die Vorteile von isCOBOL in Kürze Wenn ein Modernisierungsplan umgesetzt wird, welcher Elemente beinhaltet, die den vorstehenden ähneln, und wenn dafür die richtigen Werkzeuge eingesetzt werden wie das isCOBOL Toolset, kann ein System vollkommen moderner, wartbarer Java-basierter Geschäftsanwendungen entstehen. Hinzu kommt, dass dies mit weit geringeren Risiken und geringerem Aufwand verbunden ist als der blauäugige (und in der Regel realitätsferne) Versuch, Programme in manuellen Einzelschritten von COBOL zu Java zu migrieren und anzupassen. Auch wenn die vollständige Eliminierung von COBOL das strategische Ziel des Migrationsprojekts sein sollte, führt der in diesem Dokument dargestellte Ansatz in fast allen Fällen auf schnelle und kostengünstige Art und Weise zum gewünschten Ziel. Weitere Informationen über isCOBOL oder den Ansatz, COBOL als Spezifikation zu betrachten, erhalten Sie bei: EasiRun Europa GmbH unter www.easirun.de Copyright 2016 EasiRun Europa GmbH und ihre Partner. © 2016 EasiRun Europa GmbH EasiRun_Whitepaper_Legacy Modernisation_D_Java-is_2016_.docx | Seite 8 von 8