Altlasten sind kein Grund zur Resignation

Re-Engineering-Methoden schützen die SW-Investitionen

25.01.1991

Die größte Herausforderung der Zukunft besteht in der Bewältigung der Vergangenheit, sprich: in der Befreiung der Anwender von ihren Altlasten. Für die Lösung dieses Problems bietet sich eine Reihe von Techniken an, die alle mit "Re" beginnen, wie Reverse-Engineering, Recycling und Re-Use.

Unser schnellebiges, technologisches Zeitalter hat nicht nur die physische Umwelt geschädigt, es hat auch Spuren in der geistigen Umgebung hinterlassen. Über 20 Jahre auf Teufel komm raus Projekte durchzupeitschen hat uns eine Fülle unbeherrschbarer, unzuverlässiger und unbeweglicher Softwaresysteme beschert. Die Fehler der Vergangenheit rächen sich jetzt. Für viele Anwender wird die Software-Altlast zur verhängnisvollen Erbschaft. Sie vereitelt jeden Versuch, neue Technologien einzuführen.

Re-Engineering, Reverse-Engineering, Re-Use, Recycling und Konvertierung von Software sind verschiedene Begriffe für unterschiedliche, aber verwandte Tätigkeiten auf dem Gebiet der Softwarewartung. Auf der internationalen Software-Maintenance-Konferenz in Miami im Oktober 1989 fand eine Diskussion über die Bedeutung dieser Begriffe statt. Das Ergebnis wurde im IEEE Software Magazin vom Januar 1990 veröffentlicht. Eine Klärung dieser Begriffe ist für die weitere Forschung und Entwicklung sowie für die praktische Anwendung dieser Technologien unerläßlich.

Mit "Re-Engineering" ist Programmsanierung gemeint. Vorhandene Programme werden restrukturiert und renoviert mit dem Ziel, ihre Qualität und insbesondere ihre Wartbarkeit zu steigern. Entscheidende Beiträge zu diesem Thema stammen von Chris Miller, dem Initiator von "Structured Retrofit", Richard Linger, dem Entwickler der "Structuring Facility", und Erich Bush, der für "Recoder" verantwortlich zeichnet.

Re-Engineering soll die interne Qualität von Programmen verbessern, den Wartungsaufwand senken und die Wiederverwendbarkeit der Software erhöhen. Dieses Verfahren ist oft eine Voraussetzung für das weitergehende Reverse-Engineering, denn nur strukturierte und modulare Programme lassen sich vernünftig modellieren.

Das "Reverse-Engineering" zielt auf die Wiedergewinnung des Entwurfs, auf das sogenannte "Design Recovery". Dabei geht es nicht nur um einzelne Programme, sondern auch um den Entwurf ganzer Anwendungssysteme. Das Ziel ist die Ableitung der Daten- und Prozeßmodelle aus dem Code, um sie in ein CASE-Repository zu überführen. Dazu müssen Abstraktionen der Daten- und Programmstrukturen sowie der Datenflüsse und Programmabläufe gebildet werden. Gemeinsam mit Jadrasics habe ich hierzu im Jahr 1988 ein Referat mit dem Titel "lnverse Transformation of Code into Specifications" gehalten.

Der Begriff "Re-Use" bezeichnet ein Verfahren, mit dem die Wiederverwendbakeit vorhandener Software verbessert wird. Der Kerngedanke ist hier, Entwicklungskosten zu sparen, indem man möglichst viele Schablonen, Bausteine und Lösungsideen aus vergangenen Entwicklungsarbeiten übernimmt.

Um die Wiederverwendbarkeit von Code zu ermöglichen, muß zuerst ein Repository beziehungsweise eine "Re-Usable Software Library" mit wiederverwendbaren Softwarekomponenten aufgebaut werden. Die Komponenten können Dokumente, Spezifikations- und Entwurfsschablonen, Programmrahmen, Code-Bausteine, Datenstrukturen sowie Dictionary-Einträge sein. Diese können von einem gesonderten Teiledienst extra für die Mehrfachverwendung auf Halde produziert oder aus vorhandener Software wiedergewonnen werden. Richtungsweisende Beiträge auf diesem Gebiet leisteten Ted Biggerstaff, Will Tracz, Peter Freeman und in Deutschland Professor Albert Endres.

Mit "Recycling" ist die Wiederaufbereitung alter Softwarekomponenten gemeint. Damit ist in der Regel eine wesentliche Voraussetzung für das Re-Use gegeben. Um Daten- und Programmstrukturen sowie Datenbeschreibungen und Code-Bausteine wiederverwenden zu können, müssen sie vorher durch Reverse-Engineering wiedergewonnen und aufbereitet werden.

Die Recycling-Methode reduziert die Programme und Datenstrukturen auf ihre Grundelemente, damit zum Beispiel elementare Daten und Operationen besser in neue Zusammenhänge passen. Einen Anstoß zu dieser Entwicklung dürfte auch mein Beitrag "Software-Recycling" gegeben haben.

Bei der "Konvertierung" schließlich werden Anwendungen, Kontrollprozeduren und Daten in eine andere Form beziehungsweise von einer Sprache in eine andere umgesetzt. Programme werden zum Beispiel von Assembler in Cobol und von Cobol-74 in Cobol-85 oder von Cobol-74 in Natural übertragen. Bei den Daten geht es eher um die Portierung von einem Datenbanksystem in ein anderes, etwa von IMS nach DB2. Benutzeroberflächen wandern von IMS-DC nach CICS, von dort möglicherweise in eine Natural-Umgebung oder zur PC-Oberfläche MS-Windows.

Das Ziel solcher Konvertierungen ist, die vorhandene Anwendung in eine modernere Umgebung zu bringen, um die Vorteile der neuen Umgebung mit der Kontinuität der Dienstleistung zu kombinieren. In vielen Fällen setzt die Konvertierung Re-Engineering voraus, weil unstrukturierte Programme oder hierarchische Datenstrukturen nicht in die neue Umgebung hineinpassen.

Die genannten Vorgehensweisen zu Sicherung der Software-Investionen sind alle unterschiedlich, aber doch miteinander verquickt. Gemeinsam ist ihnen, daß sie alle mit der Transformation von Software zu tun haben. Re-Engineering verwandelt eine minderwertige Software in eine qualitativ höherwertige Form. Reverse-Engineering führt den Code auf Entwurfs- und Spezifikationsdokumentation zurück. Re-Use baut allgemeingültige Schablonen und Bausteine in spezifische Programmrahmen und Module um. Recycling macht aus alten Codes und Dokumenten wiederverwendbare Bausteine und Schablonen. Konvertierung portiert Software von einer Sprache in die andere.