5. Workshop Software Reengineering (WSR...

49
5. Workshop Software Reengineering (WSR 2003) Bad Honnef, 7.-9. Mai 2003 Jürgen Ebert, Volker Riediger, Andreas Winter (Universität Koblenz-Landau) Franz Lehner (Universität Regensburg)

Transcript of 5. Workshop Software Reengineering (WSR...

Page 1: 5. Workshop Software Reengineering (WSR 2003)pi.informatik.uni-siegen.de/stt/23_2/01_Fachgruppenberichte/wsr2003.pdfSoftwaretechnik und 5.1.3 Reengineering und Wartung betrieblicher

5. Workshop Software Reengineering (WSR 2003)

Bad Honnef, 7.-9. Mai 2003

Jürgen Ebert, Volker Riediger, Andreas Winter(Universität Koblenz-Landau)

Franz Lehner (Universität Regensburg)

Page 2: 5. Workshop Software Reengineering (WSR 2003)pi.informatik.uni-siegen.de/stt/23_2/01_Fachgruppenberichte/wsr2003.pdfSoftwaretechnik und 5.1.3 Reengineering und Wartung betrieblicher

Vorwort

Die Workshops Software-Reengineering (WSR) (http://www.uni-koblenz.de/ist/wsr) im PhysikzentrumBad Honnef wurde vor vier Jahren von Jürgen Ebert und Franz Lehner ins Leben gerufen, um neben den erfolgreicheninternationalen Tagungen im Bereich Reengineering (CSMR, ICSM, IWPC, WCRE, etc.) auch ein deutsch-sprachigesDiskussionsforum zu schaffen. Hier sollten die in dem Bereich des Software-Reengineering tätigen Arbeitsgruppen ausSoftwaretechnik und Wirtschaftsinformatik zusammenkommen können.

Ziel der Treffen ist es, einander kennen zu lernen und auf diesem Wege auch eine Basis der Kooperation zu schaffen,so dass das Themengebiet weiteren Fortschritt und Konsolidierung erfährt. Dies geschieht in einem offenen ”low-cost”-Workshop ohne eigenes Budget.

Das 5. WSR-Treffen vom 7. - 9. Mai 2003 wurde erneut von den Arbeitgruppen in Koblenz und Regensburg vorberei-tet und durchgeführt. Hans Becker sei an dieser Stelle für die administrative Hilfe gedankt. Die GI-Fachgruppen 2.1.1Softwaretechnik und 5.1.3 Reengineering und Wartung betrieblicher Anwendungssysteme haben dieses Vorhaben wiedermitgetragen und über ihre Verteiler bekannt gemacht.

Mittlerweile haben sich in diesen Treffen schon ortsübergreifende Kontakte gebildet und manche Teilnehmer waren schonmehrfach dabei, um in einer diskussions-intensiven Atmosphäre im Physikzentrum in Bad Honnef drei Tage mit Vorträ-gen, Demos und kleineren gemeinsamen Unternehmungen (übrigens erneut bei sehr gutem Wetter) zu genießen. DieUnterbringung und Versorgung im Physikzentrum war auch in diesem Jahr perfekt, das Essen und die Bereitstellung allerRessourcen lief reibungslos und die Betreuung war von Entgegenkommen und Freundlichkeit geprägt. Stellvertretend fürdas gesamte Personal sei hierfür Herrn Gomer und Frau Viehöfer gedankt.

Das Treffen fand zeitgleich mit dem 20. Workshop der GI-Fachgruppe 2.1.4 Programmiersprachen und Rechenkonzeptestatt. Durch eine gemeinsamen Sitzung, die gemeinsame Unterbringung und eine gemeinsame Wanderung zum Drachen-fels wurde auch hier der Kontakt miteinander vertieft. Beide Treffen werden voraussichtlich auch in den nächsten Jahrenzeitgleich stattfinden.

In diesem Jahr waren 40 Teilnehmer (davon 15 aus der Wirtschaft) anwesen. Es gab 24 Vorträge die das gesamte Spek-trum des Reengineerings abdecken. Diese umfassten aktuelle Themen der Forschung wie Refactoring, Recovery, Aspekte,Kontrollfluss-Analysen, Werkzeugbau und -integration, Qualitätssicherung, Dynamische Programmanalyse, Aufwands-schätzung von Reengineering Projekten, Application Wrapping und XML-Anfragetechniken. Aber auch Erfahrungsbe-richte aus der industriellen Anwendung (insgesamt sieben Beiträge) und eine Beleuchtung der Lehre zum Reengineeringfehlte nicht. Acht Tool-Vorführungen in einer für Donnerstagabend angesetzten Demo-Session ergänzten das Programm.

Die Vorträge des Workshops und Kurzbeschreibungen der vorgestellten Werkzeuge sind im folgenden zusammengestellt.Sie sind auch - wie die ausführlicheren Vortragszusammenstellungen der Vorjahre - unterhttp://www.uni-koblenz.de/ist/wsr erhältlich.

Software-Reengineering ist nach unserem Eindruck ein auch im deutsch-sprachigem Raum prosperierendes Forschungs-gebiet. Ein zunehmendes Industrieinteresse auch an diesem Workshop zeigt, dass die Relevanz dieses Themas immermehr gesehen wird. Die Informationssites des Reengineering Wiki bei http://www.program-transformation.org/ und das Reengineering Forum http://www.reengineer.org/ helfen Interessierten einen Einstieg in die”Szene” zu finden. Im deutsch-sprachigem Raum bietet die Reengineering-Mailingliste ein Forum, dem man aktuelleEreignisse entnehmen und in das man eigene Informationen einstellen kann (Anmeldung unter http://mailhost.uni-koblenz.de/mailman/listinfo/reengineering) .

Die nächsten Workshops sind für 3.-5. Mai 2004 und 2.-4.Mai 2005 geplant.

Mai 2003 Jürgen Ebert, Franz Lehner, Volker Riediger, Andreas Winter.

Page 3: 5. Workshop Software Reengineering (WSR 2003)pi.informatik.uni-siegen.de/stt/23_2/01_Fachgruppenberichte/wsr2003.pdfSoftwaretechnik und 5.1.3 Reengineering und Wartung betrieblicher

Programm

1. R. Laemmel(VU Amsterdam)Generic Refactoring

2. V. Kuttruff, T. Genßler, M. Bauer, O. Seng(FZI Karlsruhe)Werkzeuggestützte Problemidentifikationund -behebung

3. S. Bellon, D. Simon(Universität Stuttgart)Vergleich von Klonerkennungstechniken

4. R. Gimnich(IBM Global Services, Frankfurt)Reengineering-Schwerpunkte im TransactionBanking

5. W. Teppe(START Amadeus GmbH)Redesign der START Amadeus Anwendungssoftware

6. J. Genz, M. Franke(VR Kreditwerk AG, Hamburg),K. Zelmer (Bausparkasse Schwäbisch Hall)Re-Architecting von Legacy Systemen

7. J. Knodel(IESE Kaiserslautern)Reconstruction of Architectural Views byDesign Hypothesis

8. I. Philippow, I. Pashov, M. Riebisch(TU Ilmenau)Application of Feature Modeling for ArchitectureRecovery

9. K. Schützler, T. Thiel(Humboldt-Universität Berlin)Automatisierte Ermittlung vonSubsystemschnittstellen

10. A. Winter(Universität Koblenz-Landau)Referenzschemata im Reverse Engineering

11. S. Breu, J. Krinke(Universität Passau)Aspect Mining Using Dynamic Analysis

12. T. Rötschke, A. Schürr(TU Darmstadt)Software Engineering II für Ingenieure:Wartung, Reengineering und Evolution

13. T. Eisenbarth, R. Koschke, G. Vogel(Universität Stuttgart)Extraktion statischer Objekt Prozess Graphen

14. S. Gossens, M. Dal Chin(Universität Erlangen-Nürnberg)Strukturelle Analyse explizit fehlertoleranterProgramme

15. T. Haase(RWTH Aachen)A-posteriori-Integration verfahrenstechnischerEntwicklungswerkzeuge

16. M. Bauer, O. Seng(FZI Karlsruhe)Werkzeuggestützte Qualitätssicherung:Ein Erfahrungsbericht Programmanalyse

17. M. Müller-Olm(Universität Dortmund),H. Seidl(Universität Trier)(Linear) Algebra for Program Analysis DynamischeProgrammanalyse

18. Ch. Steigner, J. Wilke(Universität Koblenz-Landau)Verstehen dynamischer Programmaspekte mittelsSoftware-Instrumentierung

19. U. Kaiser(pro et con Innovative InformatikanwendungenGmbH, Chemnitz)Erfahrungen bei der Entwicklung von Werkzeugenzum Reverse Engineering

20. U. Erdmenger(pro et con Innovative InformatikanwendungenGmbH, Chemnitz))BTRACC- Ein Parsergenerator auf der Basis desBack Tracking Verfahrens

21. H. Sneed(Universität Regensburg)Aufwandschätzung von Reengineering Projekten

22. C. Synwoldt(Fogelberg & Partner GmbH, Frankfurt)Ist Web-to-Host bereits alles?

23. G. Fischer, J. Wolff von Gudenberg(Universität Würzburg)Simplifying Source Code Analysis by anXML Representation

24. M. Hopfner(Universität Tübingen),D. Seipel, J. Wolff von Gudenberg, G. Fischer(Universität Würzburg)Reasoning about Source Code inXML-Representation

Page 4: 5. Workshop Software Reengineering (WSR 2003)pi.informatik.uni-siegen.de/stt/23_2/01_Fachgruppenberichte/wsr2003.pdfSoftwaretechnik und 5.1.3 Reengineering und Wartung betrieblicher

Pattern/Refactoring

1 Towards Generic Refactoring

Ralf LämmelVrije Universiteit, De Boelelaan 1081a, NL-1081 HV Amsterdam, CWI, Kruislaan 413, NL-1098SJ Amsterdam, [email protected]

We define a challenging and meaningful benchmark forgenericity in language processing, namely the notion ofgeneric program refactoring. We provide the first imple-mentation of the benchmark based on functional strate-gic programming in Haskell. We use the basic refac-toring of abstraction extraction as the running example.Our implementation comes as a functional programmingframework with hot spots for the language-specific ingre-dients for refactoring, e.g., means for abstraction construc-tion and destruction, and recognisers for name analysis.The language-parametric framework can be instantiated

for various, rather different languages, e.g., Java, Prolog,Haskell, or XML schema.The full paper appeared in [1].

Bibliography

[1] R. Lämmel. Towards Generic Refactoring. In Proc. ofThird ACM SIGPLAN Workshop on Rule-Based Pro-gramming RULE’02, pages 15–28, Pittsburgh, USA,5 Oct. 2002. ACM Press. Paper obtainable from theACM Digital Library.

2 Werkzeuggestützte Problemidentifikation und -behebung

Volker Kuttruff, Thomas Genßler, Markus Bauer, Olaf SengForschungszentrum Informatik Karlsruhe (FZI), Haid-und-Neu-Straße 10-14, 76131 Karlsruhe,{kuttruff|genssler|bauer|seng}@fzi.de

2.1 Einleitung und Ziel

Zur Evolution von Software werden mit wachsender Grö-ße der Software in zunehmenden Maße unterstützendeWerkzeuge verwendet. Die Anwendungsgebiete solcherWerkzeuge umfassen die Analyse und Visualisierung vonSoftware, die Identifikation von Problemstellen und dieautomatische Reorganisation von Software durch Refak-torisierungsoperationen. Während für jedes dieser Gebie-te mehr oder weniger brauchbare Insellösungen existie-ren, fehlt derzeit jedoch eine geschlossene Methoden- undWerkzeugunterstützung von der automatisierten Proble-merkennung über die Auswahl (oder Unterstützung beider Auswahl) von Refaktorisierungsoperationen bis hinzur automatischen Durchführung dieser Refaktorisierun-gen. In [BGKS02] wurden erste Ansätze zur Verzahnungder oben genannten Techniken vorgestellt. Dieser Beitragvertieft dieses Thema und berichtet über erste Fortschritte.Das Ziel unserer Arbeit ist die Entwicklung einer geschlos-senen Methoden- und Werkzeugkette für die Evolution vonSoftware. Dies umfasst:

� Die Verzahnung von Problemerkennung und Pro-blembehebung auf technischer Ebene zur Beschrei-bung von Problemmustern und Lösungen mit loka-ler Kenntnis des Systems.

� Die Integration der technischen Realisierung derProblemidentifikation und -behebung mit Qualitäts-modellen und einem Expertensystem zur teilauto-matischen Auswahl von Problemmustern und mög-licher Lösungsstrategien anhand vom Nutzer zu be-stimmender und zu gewichtender Qualitätsmerkma-le.

In diesem Beitrag konzentrieren wir uns auf den erstenProblembereich.

2.2 AnsatzMetamodell Um die werkzeuggestützte Problemidenti-fikation und -behebung geschlossen durchführen zu kön-nen, benötigen die daran beteiligten Werkzeuge ein ge-meinsames Metamodell. Ausgehend von den am FZI ent-wickelten Werkzeugen zur Analyse (jGoose [BSLM03])

Page 5: 5. Workshop Software Reengineering (WSR 2003)pi.informatik.uni-siegen.de/stt/23_2/01_Fachgruppenberichte/wsr2003.pdfSoftwaretechnik und 5.1.3 Reengineering und Wartung betrieblicher

und Transformation (Inject/J [GK03], Recoder [Rec02])vereinheitlichten wir daher deren bisher unabhängig von-einander entstandenen Metamodelle. Dieses vereinheit-lichte Metamodell besitzt im Wesentlichen zwei Stoßrich-tungen: Zum einen ist dies Sprachunabhängigkeit, zumanderen ein dem jeweiligen Anwendungszweck ange-passter Detaillierungsgrad. Sprachunabhängigkeit beziehtsich in unserem Kontext auf die Eignung des Modellsfür ausdrucksbasierte, statisch typisierte, objektorientier-te Sprachen. Dies wird durch einen sprachunabhängigenKern (Klassen, Methoden, Attribute etc.) des Metamo-dells mit jeweils sprachabhängigen Erweiterungen sicher-gestellt. Zur Zeit existiert eine detaillierte Beschreibungeiner solchen Erweiterung nur für die Sprache Java. DieAbbildung auf C++, C# und Delphi werden derzeit nachge-zogen. Der Kern stellt den niedrigsten Detaillierungsgraddes Metamodells dar. Die im Kern vorhandenen Informa-tionen sind im Allgemeinen ausreichend, um Problemstel-len in einem System zu identifizieren. So stellt der Kernzum Beispiel bereits eine Reihe von Basismetriken (z.B.McCabe-Komplexität von Methoden) zur Verfügung. Wei-terhin existiert eine Erweiterung des Kerns mit höheremDetaillierungsgrad, welche feingranularere Informationensowie Basistransformationen zur Verfügung stellt.

Aufbauend auf diesem Metamodell existiert eine Skript-sprache [GK01], die sowohl für die Beschreibung der Pro-blemstellen als auch für die Spezifikation der das Problemlösenden Transformationen geeignet ist.

Erkennungsmuster Die geschlossene Beschreibung derproblematischen Stellen eines Systems erfolgt in unsererSprache mit Hilfe so genannter Erkennungsmuster (detec-tion patterns). Dies sind im Wesentlichen deklarative Be-schreibungen von nicht notwendigerweise zusammenhän-genden Graphmustern, welche die Problemstellen einesSystems charakterisieren. Erkennungsmuster beschränkensich dabei nicht auf die Beschreibung rein struktureller Ei-genschaften, sondern erlauben auch die Nutzung darüberhinausgehender Kontextinformationen wie zum BeispielMetriken. Um diese über strukturelle Muster hinausgehen-den Kontextinformationen zu nutzen, haben Erkennungs-muster Zugriff auf die gesamten Informationen, welchedas Metamodell zur Verfügung stellt, also insbesondereauch auf Basismetriken, Typ- und Querverweisinformatio-nen etc. Wie bereits erwähnt, geschieht die Spezifikationder zu suchenden Problemmuster deklarativ. Werden voneinem Erkennungsmuster allerdings Informationen benö-tigt, die komplexere Berechnungen zur Folge haben (z.B.komplexe Metriken), so lassen sich diese – im Gegensatzzu reinen musterbasierten Analyse- und Transformations-systemen – imperativ angeben. Dieses Vorgehen wurde ge-wählt, da sich Berechnungen im Allgemeinen einfacherimperativ als deklarativ beschreiben lassen, insbesonde-re dann, wenn eine große Menge an Kontextinformatio-nen benötigt wird. Die Suche nach potentiellen Problem-stellen, die den in den Erkennungsmustern angegebenenBedingungen genügen, kann nun mit dem entsprechenden

Werkzeug Inject/J automatisiert werden.Die den Bedingungen der Erkennungsmuster genügendenGraphmuster werden als Instanzen eines Erkennungsmu-sters bezeichnet. Diese können im Weiteren als Einheit be-trachtet werden, auch wenn die zum erkannten Graphmu-ster beitragenden Strukturelemente über weite Teile desSystems verteilt sind.

Transformation Auf Basis der gefundenenErkennungsmuster-Instanzen können im nächsten Schrittdie notwendigen Transformationen angegeben werden.Dies geschieht ebenfalls mit der durch Inject/J bereitge-stellten Skriptsprache. Die Spezifikation der Transforma-tionen erfolgt dabei imperativ, da dies meist einfacher an-zugeben ist, insbesondere falls zahlreiche Kontextinforma-tionen beachtet werden müssen. Die teilweise komplexenund umfangreichen Transformationen werden in Termensogenannter Basistransformationen ausgedrückt, welchedurch die entsprechenden Erweiterungen unseres Meta-modells bereitgestellt werden. Die Basistransformationenlassen sich dabei mit nur lokaler Kenntnis der zu transfor-mierenden Stellen durchführen. Dies bedeutet, dass eineBasistransformation in eine primäre Transformation undweitere sekundäre bzw. abhängige Transformationen auf-geteilt werden kann. Die primäre Transformation führt dieeigentlich gewünschte Änderung durch (zum Beispiel dasUmbenennen eines Attributs), die sekundären Transfor-mation ändern automatisch alle abhängigen Stellen (zumBeispiel die Benutzungsstellen des Attributs) oder führennotwendige Kontextanpassungen durch (zum Beispiel dasAusrollen von Ausdrücken). Zusammen mit einer Reihevon Vorbedingungen, welche für jede Basistransformati-on durch das Transformationsmodell gegeben sind, wirddie Übersetzbarkeit des transformierten Systems durchunser Werkzeug Inject/J garantiert. Darüberhinaus lassensich in Inject/J noch nutzerspezifische Vorbedingungenfür komplexe Transformationen angegeben, um weitereEigenschaften wie zum Beispiel Verhaltensbewahrung zu-zusichern.

Werkzeug Das Werkzeug Inject/J erlaubt es nun, auto-matisch nach möglichen Problemstellen im System zu su-chen. Ist eine solche Problemstelle durch ein Erkennungs-muster gefunden und eventuell durch den Benutzer bestä-tigt worden, so lassen sich unter Zuhilfenahme der in derErkennungsmuster-Instanzgekapselten Informationen ent-sprechende Transformationen durchführen.

2.3 Zusammenfassung

Im vorliegenden Beitrag haben wir ein Verfahren zur In-tegration von Techniken der Problemerkennung und auto-matisierten Softwaretransformation skizziert. Die Haupti-dee besteht darin, die Transformationen direkt mit der Be-schreibung von Probleminstanzen zu verbinden und da-durch zielgerichtet durchzuführen. Die Struktur von Pro-bleminstanzen wird mit Hilfe von Erkennungsmusternspezifiziert. Erkennungsmuster fassen Strukturelemente,

Page 6: 5. Workshop Software Reengineering (WSR 2003)pi.informatik.uni-siegen.de/stt/23_2/01_Fachgruppenberichte/wsr2003.pdfSoftwaretechnik und 5.1.3 Reengineering und Wartung betrieblicher

die im Strukturgraphen des Systems möglicherweise ver-teilt sind, anhand ihrer Eigenschaften (Beziehungen imStrukturgraphen, Basismetriken etc.) zu neuen, ’virtuel-len’ Einheiten zusammen und erlauben die geschlosse-ne Transformation dieser Einheiten. Die Transformationselbst wird durch eine Kombination von Basistransforma-tionen beschrieben, welche die Eigenschaft haben, not-wendige Sekundäroperationen zur Behebung nicht-lokalerEffekte der Primärtransformation automatisch durchzu-führen. Dadurch wird die aktuelle Lücke zwischen Pro-blemerkennung und Behebung zumindest auf technischerEbene teilweise geschlossen.

Literaturverzeichnis

[BGKS02] M. Bauer, T. Genßler, V. Kuttruff, andO. Seng. Werkzeugunterstützung für evolu-

tionär Softwareentwicklung. In Proceedingsof the 4th German Workshop on Software-Reengineering, July 2002.

[BSLM03] M. Bauer, O. Seng, S. Luzar, and T. Marz.jGoose Echidna WWW Page. http://jgoose.sf.net/, 2003.

[GK01] T. Genßler and V. Kuttruff. Werkzeugun-terstützte Softwareadaption mit Inject/J. InProceedings of the 3th German Workshop onSoftware-Reengineering, July 2001.

[GK03] T. Genssler and V. Kuttruff. Inject/J WWWPage. http://injectj.sf.net/, 2003.

[Rec02] The RECODER/Java homepage. http://recoder.sf.net, 2002.

3 Vergleich von Klonerkennungstechniken

Stefan Bellon, Daniel SimonUniversität Stuttgart, Institut für Softwaretechnologie, Universitätsstraße 38, D-70569 Stuttgart,{bellon,simon}@informatik.uni-stuttgart.de

3.1 Einleitung

„Copy & Paste“ ist noch immer das vorherrschende Pro-grammierparadigma, wenn es um Wiederverwendung vonCode geht. Durch häufiges „Copy & Paste“ leidet jedochdie Wartbarkeit des Systems, da ein kopierter Fehler even-tuell an vielen Stellen korrigiert werden muss. Allerdingsist in den seltensten Fällen dokumentiert, wohin ein StückCode kopiert wurde. In der Literatur wurden eine Reihevon Techniken zur Entdeckung so genannter Klone (alsoCode-Stücke, die sich aus „Copy & Paste“ ergaben) vorge-schlagen. Jedoch ist bis dato unklar, welche der Technikenunter welchen Umständen die bessere ist.

Um dies herauszufinden, haben sich die Wissenschaft-ler Baker [1], Baxter [2], Kamiya [5], Krinke [7], Mer-lo [6] und Rieger [4] zusammengetan, um die verschiede-nen Techniken quantitativ und qualitativ zu vergleichen.

Es wurde ein Vorgehen erarbeitet, welches den quantita-tiven Vergleich der Ergebnisse ermöglicht. Die Technikenwurden auf Java- und C-Systeme angewendet, die mit ver-steckten Klonen präpariert wurden, um die Aussagekraftder Ergebnisse einordnen zu können. Die Analyse undAuswertung der Ergebnisse soll vorgestellt und die Stär-ken und Schwächen der einzelnen Techniken herausgear-beitet werden.

3.2 Vergleichsmethode

Um die Techniken der sechs genannten Wissenschaft-ler miteinander vergleichen zu können, musste zuerst eingemeinsames Verständnis von „Klon“ gefunden werden.Die Teilnehmer konnten sich alle darauf einigen, dassein Paar von aufeinander folgenden, ununterbrochenenSourcecode-Zeilen, so genannten „Codefragmenten“, ein„Klonpaar“ ergibt und dies als Vergleichsgröße aller Werk-zeuge und Techniken dient. Techniken, die mit „Klonklas-sen“ arbeiten, können diese als Menge von Klonpaarendarstellen und können somit auch eingebunden werden.

Drei Typen von Klonen wurden definiert:Typ 1: Exakte Kopie (keinerlei Veränderung bis auf Whi-

tespace und Kommentare, z. B. Inlining von Hand)Typ 2: Parametrisierte Übereinstimmung (Bezeichner

werden in der Kopie umbenannt, z. B. „Wiederver-wendung“ einer Funktion)

Typ 3: Kopie mit weiteren Modifikationen (Code der Ko-pie wird abgeändert, nicht nur Bezeichner, z. B. „Er-weiterung“ einer Funktion)

Nach Test-Läufen mit kleineren Systemen wurden imHauptteil des Experiments insgesamt acht Systeme aus-gewählt, darunter vier in C und vier in Java. Die Größender Systeme variierten von 30 KLOC bis über 200 KLOC,um eventuell Aussagen über das Auftreten von Klonen imVerhältnis zur Systemgröße treffen zu können.

Um die von den Teilnehmern des Experiments eingesen-

Page 7: 5. Workshop Software Reengineering (WSR 2003)pi.informatik.uni-siegen.de/stt/23_2/01_Fachgruppenberichte/wsr2003.pdfSoftwaretechnik und 5.1.3 Reengineering und Wartung betrieblicher

deten Klon-Kandidaten miteinander vergleichen zu kön-nen, wurde eine Referenzmenge von Klonpaaren erstellt.Dazu wurden zufällig ausgewählte Klon-Kandidaten derTeilnehmer betrachtet und entweder in die Referenzmengeübernommen (eventuell mit leichten Veränderungen) oderverworfen. Anhand dieser Referenzmenge werden Wertewie Recall (Anzahl gefundener Kandidaten im Verhält-nis zur Referenzmenge) und Precision (Anzahl gefunde-ne Kandidaten im Verhältnis zur eingesandten Menge derKandidaten) angegeben. Um diese Werte angeben zu kön-nen, ist es notwendig, ein Maß für die Überdeckung vonKlon-Kandidaten mit Klonen aus der Referenzmenge ein-zuführen. Damit zu kleine Überdeckungen nicht als kor-rekte Klone gewertet werden, sind die folgenden Maße fürdie Überdeckung ausgewählt worden:

� OK-Match(p) gdw. Anteil des Schnitts von Kandi-dat und Referenz ist zu mindestens p % im Kandidatoder in der Referenz enthalten.

� Good-Match(p) gdw. Anteil des Schnitts von Kan-didat und Referenz ist zu mindestens p % in der Ver-einigung von Kandidat und Referenz enthalten.

Good-Match(p) impliziert also OK-Match(p) und ist da-her ein stärkeres Kriterium.

3.3 Ergebnisse

Stellvertretend für die acht untersuchten Systeme sol-len hier repräsentativ die Ergebnisse des Systems SNNS(Stuttgart Neuronal Network Simulator, 115 KLOC) vor-gestellt werden. Es handelt sich hierbei um das größte Sy-stem, zu dem alle Teilnehmer eine Einsendung machenkonnten.

In Abbildung 3.1 sind die eingesendeten Klon-Kandidatenaller Teilnehmer und die Referenzmenge (sog. Orakel) ab-gebildet. In Abbildung 3.2 ist die Anzahl der von deneingesendeten Kandidaten überdeckten Referenzen darge-stellt. Die bereits angesprochenen Werte für Recall undPrecision sind in Abbildung 3.3 zu sehen. Die Referenz-menge ist allerdings nicht vollständig, sondern durch Be-wertung von nur 2 % aller Kandidaten entstanden.

0

5000

10000

15000

20000

Orakel Baker Baxter Kamiya Kamiya(vol.)

Krinke Krinke(vol.)

Merlo Merlo(vol.)

Rieger

1036

8978

1434

18961 18923

12181

18447

318 324

5212

Typ 3Typ 2Typ 1unbestimmt

Abbildung 3.1. Kandidaten aller Teilnehmer für das Sy-stem SNNS

0

200

400

600

800

1000

Referenzen Baker Baxter Kamiya Kamiya(vol.)

Krinke Krinke(vol.)

Merlo Merlo(vol.)

Rieger

1036

554

153

885 885

305

477

53 54

427

OK OK OK OK OK OK OK OK OK OKOK OK OK OK OK OK OK OK OK OKOK OK OK OK OK OK OK OK OK OK

1036

315

87

627 627

156

235

48 49

194

Good Good Good Good Good Good Good Good Good GoodGood Good Good Good Good Good Good Good Good GoodGood Good Good Good Good Good Good Good Good Good

Typ 3Typ 2Typ 1

Abbildung 3.2. Überdeckte Referenzen aller Teilnehmerfür das System SNNS

00.10.20.30.40.50.60.70.80.9

Baker Baxter Kamiya Kamiya(vol.)

Krinke Krinke(vol.)

Merlo Merlo(vol.)

Rieger

0.3

0.08

0.61 0.61

0.15

0.23

0.05 0.05

0.19

0.66

0.37

0.85 0.85

0.06

0.15

0.1 0.1

0.57

0.39

0.07

0.84 0.84

0.020.04

0.06 0.06

0.19

0.040

0.15 0.15

0.39

0.55

0.01 0.020.06

Typ 3Typ 2Typ 1insgesamt

0

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

Baker Baxter Kamiya Kamiya(vol.)

Krinke Krinke(vol.)

Merlo Merlo(vol.)

Rieger

0.0350.061

0.033 0.0330.013 0.013

0.151 0.151

0.0370.073

0.885

0.162 0.162

0.028 0.029

0.205 0.205

0.011 0.011

0.054 0.061

Typ 3Typ 2Typ 1insgesamt

Abbildung 3.3. Recall (oben) und Precision (unten) fürdas Projekt SNNS

Man erkennt deutlich, dass Werkzeuge, die sehr viele Kan-didaten zurück liefern, einen hohen Recall aber auch eineniedrige Precision haben. Bei Werkzeugen, die eher we-niger Kandidaten melden, ist dies genau umgekehrt. In un-serem Experiment wurden noch weit mehr Daten erhoben,die in [3] veröffentlicht sind.

3.4 Zusammenfassung

Der Vergleich hat gezeigt, dass es nicht das Werkzeug oderdie Technik zur Erkennung von Klonen gibt. Die Wahl desgeeigneten Werkzeuges wird daher je nach Anwendungs-gebiet unterschiedlich ausfallen. Will man möglichst vieleKlone erkennen und ist bereit, die Kandidaten manuell zubetrachten, so bieten sich Werkzeuge mit hohem Recallan. Dazu zählen die von Baker, Kamiya und Rieger. Willman jedoch die Klone automatisiert erkennen und eventu-ell sogar beseitigen, so muss die Precision möglichst hochsein, wie bei Baxter und Merlo.Alle Techniken jedoch erkennen noch zu wenig Klone: Eswurden nicht einmal die Hälfte der von uns in den Syste-men versteckten Klone entdeckt.Interessanterweise bezieht keine der am Vergleich betei-ligten Techniken Kommentare im Quellcode in die Erken-

Page 8: 5. Workshop Software Reengineering (WSR 2003)pi.informatik.uni-siegen.de/stt/23_2/01_Fachgruppenberichte/wsr2003.pdfSoftwaretechnik und 5.1.3 Reengineering und Wartung betrieblicher

nung mit ein. Dies könnte insbesondere bei „kleinen“ Klo-nen die Erkennungsrate erhöhen. Derartige Ansätze verfol-gen wir zur Zeit und erwarten in Kürze erste Ergebnisse.

Literaturverzeichnis

[1] BAKER, BRENDA S.: Parameterized Pattern Mat-ching: Algorithms and Applications. Journal Compu-ter System Science, 52(1), 1996.

[2] BAXTER, IRA D., ANDREW YAHIN, LEONARDO

MOURA, MARCELO SANT’ANNA und LORRAINE

BIER: Clone Detection Using Abstract Syntax Trees.in Proc. ICSM, 1998.

[3] BELLON, STEFAN: Vergleich von Techniken zur Er-kennung duplizierten Quellcodes. Diplomarbeit, Uni-

versität Stuttgart, 2002.[4] DUCASSE, STÉPHANE, MATTHIAS RIEGER und

SERGE DEMEYER: A Language Independent Ap-proach for Detecting Duplicated Code. in Proc. ICSM,1999.

[5] KAMIYA, TOSHIHIRO, SHINJI KUSUMOTO undKATSURO INOUE: CCFinder: A Multi-LinguisticToken-based Code Clone Detection System for LargeScale Source Code. TSE (to appear).

[6] KONTOGIANNIS, K., R. DEMORI, M. BERNSTEIN,M. GALLER und ETTORE MERLO: Pattern matchingfor design concept localization. in Proc. WCRE, 1995.

[7] KRINKE, JENS: Identifying Similar Code with Pro-gram Dependence Graphs. in Proc. WCRE, 2001.

Praxisberichte

4 Reengineering-Schwerpunkte im Transaction Banking

Rainer GimnichIBM Global Services, BCS Financial Services, Frankfurt/Main, [email protected]

Ein großer Teil der Projekte im Bereich Finanzdienstlei-stungen, insbesondere bei Transaktionsbanken, basiert aufexistierenden, gewachsenen Anwendungssystemen. DerVortrag beschreibt überblicksartig aktuelle Reengineering-Projektansätze und stellt dabei die technischen und organi-satorischen Kernprobleme vor.

4.1 Reengineering-Projektkategorien

Aufgrund der Globalisierung und des anhaltenden Ko-stendrucks verfolgen viele Banken das Ziel, Backoffice-Prozesse (z.B. Order-Management, Wertpapierabwick-lung, Verwaltung, Bewertung) organisatorisch zusammen-zufassen. Als weiterer Schritt kann die Ausgründungdieser Dienstleistungen in eigenen Tochterunternehmenoder in Joint Ventures mit anderen Banken folgen. Au-ßerdem können Backoffice-Dienstleistungen bereits heu-te von Transaktionsbanken am Markt bezogen werden.Die Kosten dafür berechnen sich nach Volumen (d.h. An-zahl Transaktionen) und nicht mehr als Fixkosten des ei-genen Hauses. Transaktionsbanken können für viele Auf-traggeber arbeiten und damit hohe Transaktionsvoluminaerreichen. Umso eher lohnen sich Investitionen in neueProdukte (d.h. neue bzw. erweiterte Anwendungsfunktio-nen) und neue IT-Infrastrukturen. Die meisten deutschenTransaktionsbanken arbeiten heute mit umfangreichen Ab-wicklungssystemen, die von ihnen selbst (oder ihrer Mut-

tergesellschaft vor der Ausgründung) entwickelt wurden:Legacy-Systeme im besten Sinne. Die Anwendungen ha-ben mit ihrer ,Peripherie’ (u.a. Buchungsschnittstelle, Bör-senanbindung) häufig Größenordnungen von mehrerenMillionen LOC und sind überwiegend in den zur Entwick-lungszeit gängigen Sprachen (COBOL, PL/I, Assembler)realisiert, wobei häufig auch 4GL-’Aufsätze’ (wie Deltaoder Telon) verwendet werden. Ausgehend von den ge-nerellen Projektzielsetzungen lassen sich die Vorhaben inmindestens vier Kategorien einordnen:

� Umstellungen aufgrund gesetzlicher Vorgaben oderStandardisierung

� Funktionale Erweiterung und Flexibilisierung� Einführung von Standardsoftware für zentrale Sy-

stemkomponenten� Outsourcing

4.2 Umstellungen aufgrund gesetzlicherVorgaben und Standardisierung

Hier handelt es sich um sog. ,Muss-Projekte’, die in derGesamtplanung gegenüber den vielen anderen Projektenim Unternehmen entsprechend abgestimmt und priorisiertwerden müssen. Typische Beispiele für gesetzlich not-wendige Projekte sind Änderungen der Handelsbedingun-gen für Wertpapiere oder steuerliche Änderungen. Einaktuelles Beispiel für Umstellungsprojekte aufgrund von

Page 9: 5. Workshop Software Reengineering (WSR 2003)pi.informatik.uni-siegen.de/stt/23_2/01_Fachgruppenberichte/wsr2003.pdfSoftwaretechnik und 5.1.3 Reengineering und Wartung betrieblicher

Standardisierungsvorgaben bilden die gerade abgeschlos-senen Projekte zur ISIN-Einführung: Die Bankenverbän-de mehrerer europäischer Länder, darunter Deutschlandund Österreich, haben beschlossen, statt der nationalenWertpapierkennnummern (WKN) in Zukunft den interna-tionalen Nummerierungsstandard ISIN (International Se-curities Identification Number) zu verwenden. Einfüh-rungstermin: 22.04.2003 (,Osterdienstag’). Die heutige 6-stellige numerische WKN wird durch die 12-stellige al-phanumerische ISIN als führende Kennung ersetzt. Hin-tergrund ist die Ausschöpfung der WKN-Nummernkreise,bei heute bereits über 250.000 von WM (Wertpapier-Mitteilungen) gepflegten WKN. Außerdem wird durchdie ISIN-Einführung eine Vereinheitlichung von nationa-len und internationalen Handelskonventionen erreicht, waslangfristig vorteilhaft ist.

Die sogenannte “alte WKN” kann übergangsweise ban-kintern noch verwendet werden, jedoch ist Vorsicht ange-bracht, da neue Nummernausgaben in Zukunft alphanume-risch sein können. Intern ist es für diesen Zweck mit einerTransformation PIC 9(6) -> PIC X(6) im Daten-typ der WKN-Variablen nicht getan: WKN werden häu-fig als Schlüssel für Datenbankzugriffe verwendet, unddie Datenbankfelder haben noch den alten Typ. Außer-dem sind WKN häufig gepackt repräsentiert: PIC 9(6)PACKED-DECIMAL, und die 4 Byte der internen Reprä-sentation können nur mit binärer Interpretation und jewei-liger “Umrechnung” auf die alphanumerische WKN abge-bildet werden, und das bei jedem Zugriff. Dieses Vorgehenbirgt eine Reihe neuer Fehlerquellen und stellt insgesamtnur eine Zwischenlösung beim Übergang zur ISIN dar.Dass solche Verfahren dennoch eingesetzt werden, zeigt,wie groß der Zeitdruck und der Gesamtumstellungsauf-wand in den Unternehmen ist.

4.3 Funktionale Erweiterung und Flexibili-sierung

Diese Reengineering-Projekte zielen auf die Überarbei-tung der existierenden Systeme im Hinblick auf neueKunden- und Marktanforderungen ab, einschließlich tech-nologischer Anforderungen (z.B. WAP-Order). Beispie-le für diese Art Reengineering-Projekte sind: Einfüh-rung der Mandantenfähigkeit, Optimierung der mandan-tenspezifischen Verarbeitung, Automatisierung der Man-dantenmigration, Standardisierung der externen Schnitt-

stellen, ,Bereinigung’ und Modularisierung der gewachse-nen Systemlandschaft (Programmcode, Datenhaltung, Ab-laufsteuerung), Realisierung von Skalierbarkeitsanforde-rungen, Unterstützung der Portierung in andere Umge-bungen (Ermittlung der IT-Infrastruktur-Abhängigkeiten)u.v.m. Viele dieser Reengineering-Projekte haben starkenEinfluss auf die Anwendungsarchitektur, sowohl im Hin-blick auf die Strukturierung der Anwendungskomponen-ten als auch auf die nicht-funktionalen Anforderungen unddie Infrastruktur. Daher ist die Analyse und Beschreibungder Ist-Architektur des Gesamtsystems häufig der ersteReengineering-Schritt. Nach der Entwicklung der Zielar-chitektur lassen sich interne Anforderungen in Bezug aufdas Configuration Management und den Reengineering-Werkzeugeinsatz ableiten. Erfahrungsgemäß stützt sichdie Lösung konkreter Reengineering-Probleme vielfachauf die Eigenschaften der im Gesamtsystem ermitteltenFeldtypen ab:

� Kennungen bzw. Nummernkreise:– Ordernummer– Depotnummer– Mandantennummer– Vertriebsbereichs-/Agenturnummer– Kunden-/Vertragsnummer– Wertpapierkennnummer (WKN), soweit nicht

in Standardisierungsprojekt bearbeitet (s.o.)� Berechnungsgrößen:

– Betragsfelder, insbesondere Summenfelder– (programminterne) Tabellen, insbesondere

Staffelungen

In einem kürzlich abgeschlossenen Projekt basierte die Lö-sung für skalierbare Wertpapierabwicklung inhaltlich auf2 Feldtypen, die in allen ihren Ausprägungen über diegesamte Anwendungslandschaft ermittelt und angepasstwurden: Mandantennummern und Summenfelder.

4.4 Einführung von Standardsoftware

Kern dieser Reengineering-Projekte ist die Entscheidung,Teile der Legacy-Anwendungen durch am Markt ver-fügbare Software-Produkte zu ersetzen, z.B. das Order-Management, die ,reine’ Abwicklung oder die bankfach-lichen Funktionen. Der Hauptgrund für dieses Vorge-hen ist Kostensenkung durch vereinfachte Wartung inder Zukunft. Ein Problem ist jedoch die Integration derheutigen, im existierenden System hinterlegten Prozes-se mit denen, die die Standardsoftware ,erwartet’. Da-her werden in der Regel die Standardfunktionen an-gepasst (,customizing’) und fehlende Funktionalität ausLegacy-Komponenten übernommen, angepasst oder neuentwickelt. Das Reengineering-Problem liegt in der Er-mittlung und Realisierung der Schnittstellen von vorhan-dener und neuer (Standard-)Funktionalität.

Page 10: 5. Workshop Software Reengineering (WSR 2003)pi.informatik.uni-siegen.de/stt/23_2/01_Fachgruppenberichte/wsr2003.pdfSoftwaretechnik und 5.1.3 Reengineering und Wartung betrieblicher

4.5 Outsourcing

Hiermit ist die Verlagerung der Anwendungssysteme aneinen IT-Anbieter gemeint, der von der Infrastrukturbis zu Anwendungsbetrieb, Wartung und Weiterentwick-lung verantwortlich ist. Kern der Vereinbarungen zwi-schen Kunden und Anbieter sind Service Level Agree-ments (SLAs). Der Reengineering-Aufwand liegt in die-sen Projekten nicht bei der Transaktionsbank, sondern

beim Outsourcing-Anbieter. Dieser hat aufgrund seiner be-reits optimierten Infrastruktur und der ,economies of sca-le’ in der Regel bessere Möglichkeiten, die technologi-sche Weiterentwicklung der Anwendungen voranzutrei-ben. Outsourcing-Projekte haben damit andere Grundla-gen und Ausrichtungen als die zuvor beschriebenen Pro-jektkategorien. Dennoch werden beim Anbieter intern inder Regel die gleichen Reengineering-Methoden und -Werkzeuge verwendet wie bei den anderen Projekttypen.

5 Redesign der START Amadeus Anwendungssoftware,Ein Erfahrungsbericht

Werner TeppeStart Amadeus GmbH, Marienbader Platz 1, D 61341 Bad Homburg,[email protected]

5.1 Einleitung

Das START System fungiert im deutschen Reisemarkt alsIntegrator zwischen Anbieter- und Nutzerseite. Anbietersind: Airlinesys- teme, Touristik- und Reiseveranstalter,Deutsche Bahn und Regionalverbundsyste- me, Versiche-rungsgesellschaften, Fähren, Eventveranstalter, Hotels so-wie Autovermie- ter. Auf der Nutzerseite befinden sichReisevermittler (Reisebüros), Firmenreise- stellen, Kar-tenvorverkaufsstellen und Endkunden.

Start Amadeus entwickelt und betreut die Endgerätesoft-ware, ist für das Netzwerk zwischen den Partnern zustän-dig, entwickelt und betreibt das zentrale Anwendungssys-tem. Um das Redesign dieser zentralen Anwendung gehtes im folgenden Beitrag.

5.2 Ausgangssituation

Der Kern der zentralen Anwendungssoftware von STARTAmadeus (ASW) wurde vor rund 25 Jahren entwickelt.

Die ASW bestand damals aus ca. 300.000 Lines of Co-de (SPL und Assembler). Es wurde ein dafür speziellentwickeltes Dateihandlingsystem eingesetzt. Zu Beginnwurden rund 1000 (dumme) Terminals bedient, die ein-stellige Transaktionsraten in der Spitzenzeit verursachten.Mit drei Rechnerkopplungen zu weiteren Informationsan-bietern wurde begonnen. Die ASW wurde stark auf Per-formance getrimmt, da Großrechnerressourcen teuer wa-ren (und auch heute noch sind). In der Zwischenzeit wurdedie ASW massiv weiter entwickelt und mehr als 170 Infor-mationsanbieter mit ihren Reservierungssystemen wurdenangeschlossen. So besteht die ASW heute aus mehr als 3,5Millionen Lines of Code (MLoCs).

Die Spitzentransaktionsrate beträgt 655 Benutzertransak-tionen pro Sekunde. Angeschlossen an das START-Systemsind heute ca. 45.000 PC und 27.000 Drucker. Aktuell wirdalle 5 Wochen ein neues Anwendungsrelease eingeführt,das neue Funktionen zur Verfügung stellt oder einen weite-ren Informationsanbieter anschließt, Tendenz steigend. ZuBeginn gab es jede Woche eine neue Version. Diese Fre-quenz wird auch heute von unseren Kunden gefordert.

Da die ASW immer komplexer und damit Erweiterungenund Änderungen immer zeitaufwendiger wurden, einzel-ne Fehler großflächigere Ausfälle zur Folge haben könnenund nur noch schwer Personal für diese Art der Mainfra-meanwendungen zu finden ist, starteten wir vor ca. 2 Jah-ren das Projekt “Redesign ASW”.

Page 11: 5. Workshop Software Reengineering (WSR 2003)pi.informatik.uni-siegen.de/stt/23_2/01_Fachgruppenberichte/wsr2003.pdfSoftwaretechnik und 5.1.3 Reengineering und Wartung betrieblicher

5.3 Vorgehen

Dabei wurden mehrere Ansätze verfolgt und untersucht:

� Zerlegung der ASW in Komponenten� Flexibilisierung bei der Datenhaltung (Einsatz von

Datenbanksystemen)� Unabhängigkeit vom Betriebssystem� Wechsel der Programmiersprache (von SPL nach C

/ C++)� Reduzierung der Komplexität

Bei allen geplanten Änderungen darf der laufende Betriebnatürlich nicht gefährdet werden. Der Benutzer im Reise-büro darf die Änderungen nicht bemerken. Es handelt sichso zu sagen um eine “Operation am offenen Herzen”.Über die Vorgehensweise im Projekt, die verschiedenenAnsätze habe ich auf der Tagung im letzten Jahr berich-tet (WSR2002).In der Zwischenzeit wurden einige dieser Ansätze in diePraxis umgesetzt und laufen bereits in der Produktion. Sowurde eine Business Logic Komponente aus der ASW aus-gegliedert und kann nun über CORBA-Technologie auf-gerufen werden. Weiterhin wurde ein XML-Zugang zurASW geschaffen, der in Kürze in Produktion geht, umneue Partneranwendungen mit moderner Technologie an-zuschließen. Komponenten wurden aus der Mainframeum-gebung auf Unixsysteme verlagert.Über die bisher gemachten Erfahrungen, den aktuellenProjektstand und das weitere geplante Vorgehen berichteich in meinem Vortrag und im Folgenden.

5.4 Komponententechnologie

Wie aus Bild 5.1 hervorgeht, steigt die Zeit zwischen zweiASW-Versionen, die dem Markt zur Verfügung gestelltwerden können, stärker als linear mit der Anzahl der Li-nes of Code. So konnte Start Amadeus im Jahr 1990 beirund 1 MLoCs ca. jede Woche eine neue Version in Be-trieb nehmen und den Kunden zur Verfügung stellen, heutebei mehr als 3,5 MLoCs liegen 5-6 Wochen zwischen denVersionen.

Abbildung 5.1. time to market

Daher war ein Hauptansatzpunkt im Projekt die Zerle-gung der ASW in Komponenten. Außerdem kann man,wenn Komponenten vorliegen, auch die übrigen Maßnah-men an einzelnen Komponenten durchführen (und nicht ander kompletten Anwendung).Zunächst wurden die statischen und dynamischen Bezie-hungen der mehr als 1750 Sourcen (Übersetzungseinhei-ten) sowie die Verwendung der ca. 3000 Headerfiles un-tersucht. Dazu mussten eigene Werkzeuge entwickelt wer-den, da sowohl die kommerziellen als auch die in der For-schung dafür verfügbaren Tools die Sprache SPL nichtunterstützen. Meist fehlt ein entsprechendes Frontend ei-nes geeigneten Tools. SPL (ein Subset von PL/I) stehtfür System Programming Language und ist die Implemen-tierungssprache des Betriebssystems BS2000 von FujitsuSiemens.Nachdem die Beziehungen zwischen den Modulen analy-siert waren, wurden Cluster identifiziert, die sich für eineZerlegung eignen. Es wurde ein Cluster als Pilot ausge-wählt, der einerseits nicht zu umfangreich ist, andererseitsalle wesentlichen Eigenschaften großer Cluster beinhaltet,damit die gewonnenen Erfahrungen auch später übertragenwerden können.Die Kommunikation der Komponenten sollte über Cor-ba Technologie erfolgen, u.a. um am Markt verfügbareAnwendungen leichter anschließen zu können (buy stattmake). Für die bei Start Amadeus vorhandenen System-plattformen (BS2000, verschiedene Unix-Derivate, Win-dows) war kein geeigneter Object Request Broker (ORB)am Markt verfügbar. Eine Portierung kommerzieller Sy-steme schied aus Kostengründen aus. Daher wurde dasOpen Source Produkt omniORB (bester der untersuch-ten ORBs) ins BS2000 portiert. Die Portierung wurdeder Open- Source-Gemeinde zur Verfügung gestellt, so-daß andere BS2000 Anwender den omniORB einsetzenkönnen. Zusätzlich wurde für die Transaktionssteuerungüber Komponentengrenzen hinaus die Funktion “Verteil-te Transaktionen (VTA)” entwickelt. Sie stellt sicher, dassDatenänderunegn vollständig oder gar nicht über Kompo-nentengrenzen hinweg durchgeführt werden (Sicherstel-lung der Datenkonsistenz).

5.5 Proof in Production

Wichtig von Projektbeginn an war, die Projektergebnissein Produktionsumgebung zu verifizieren. So sollten nichtnur Konzepte entwickelt werden, die Prototypen solltenauch im harten Produktionsalltag ihre Tauglichkeit bewei-sen (Performance, Produktionsabläufe, ....). Aktuell hat dieKomponente FAHR alle Teststufen durchlaufen und wirdgerade in die Produktion eingeführt.

5.6 Ausblick

Anschließen werden sich Performancemessungen, Tu-ningmaßnahmen und Optimierungen der Programme undder Produktionsabläufe. Danach kann die Herauslösungweiterer Komponenten in Angriff genommen werden.

Page 12: 5. Workshop Software Reengineering (WSR 2003)pi.informatik.uni-siegen.de/stt/23_2/01_Fachgruppenberichte/wsr2003.pdfSoftwaretechnik und 5.1.3 Reengineering und Wartung betrieblicher

6 Re-Architecting von Legacy Systemen

Marc Franke, Jürgen GenzVR Kreditwerk AG, Hamburg {Marc.Franke,JürgenGenz}@kreditwerk.de

Klaus ZelmerBausparkasse Schwäbisch Hall [email protected]

Die Bausparkasse Schwäbisch Hall betreibt seit mehr als40 Jahren eine umfangreiche IT-Landschaft, die im Be-reich der Kerngeschäftsanwendungen überwiegend selbstentwickelt wurde. Während dieser langen Zeitstrecke hatsich die Bausparkasse Schwäbisch Hall zum Benchmarkt-führer in der Produktivität, innerhalb der Verwaltung vonBausparverträgen, entwickelt. Durch die technologischenund methodischen Entwicklungen hat sich hierbei eineumfangreiche und äußerst komplexe Gesamtlandschaft er-geben.Die alleine im Host-Umfeld über 5 Millionen Lines ofCode wurden in verschiedenen Programmiersprachen ent-wickelt, wobei heute der Schwerpunkt auf Cobol- undAssembler-Programmen liegt. Ebenso sind in dem Pro-grammbestand sowohl strukturierte als auch objektorien-tierte und komponentenorientierte Programmierparadig-men zu finden. Im Laufe der Zeit wurden bei einem stetigsteigenden Grad der Integration immer mehr FachgebieteIT-technisch abgebildet. Der Einsatz neuer Technologienführte fast immer zu einem zusätzlichen Bedarf (Beispiel

PC-Einsatz).All diese Entwicklungen hatten und haben eine stetigeSteigerung der Komplexität und Heterogenität der Ge-samtlandschaft sowie vielfältige Abhängigkeiten zwischeneinzelnen Komponenten und Systemteilen bzw. Anwen-dungsbereichen zur Folge. Letztendlich leidet darunterdie Beherrschbarkeit der Systemlandschaft. Aufwände fürPflege und Wartung sowie für die Integration neuer ge-setzlicher Anforderungen benötigen einen immer größerwerdenden Teil der verfügbaren Ressourcen. Die Mög-lichkeiten zur Umsetzung und Einführung innovativer unddie Produktivität signifikant steigernder Funktionen oderNeuerungen, die aus Marktsicht schnell benötigt werden,können immer schwerer realisiert werden.Ziel des Reengineerings ist es deshalb, die Systemland-schaft unter Abbau der Komplexität und Heterogenität neuzu strukturieren. Dadurch soll die heute schon hohe Funk-tionalität und Stabilität weiter ausgebaut werden und fürdie Zukunft mit weniger Aufwand wartbar sowie einfachererweiterbar sein.

Recovery

7 Reconstruction of Architectural Views by Design Hypothesis

Jens KnodelFraunhofer Institute for Experimental Software Engineering (IESE) Sauerwiesen 6, D-67661Kaiserslautern, Germany, [email protected]

Abstract

The literature proposes many techniques for reconstructingsoftware architectures. However, there are limited guide-lines on when and how to apply these techniques. There iseven less information on how to combine them dependingon the objectives and the boundary conditions of the re-construction. This paper presents an approach to create anup-to-date high-level design model of a system and reportson the experience gained by applying this approach in anindustrial case study.

Keywords: software architecture, architecture recoveryprocess and tools, reverse engineering, reflexion model

7.1 Introduction

A successful software system evolves over time. In orderto manage the effects of increasing complexity and contin-uous change (Lehman´s laws, see [7]), a software legacysystem has to be maintained. [3] reports that more than50% of time spent on maintenance is devoted to compre-hension activities. For this reason, [10] proposes to fa-cilitate the process of comprehending programs as an ap-proach to improve software maintenance. Reverse engi-neering provides a direct attack on the program compre-hension problem, but it is difficult, because it must bridgethe gap between high-level descriptions and solutions on

Page 13: 5. Workshop Software Reengineering (WSR 2003)pi.informatik.uni-siegen.de/stt/23_2/01_Fachgruppenberichte/wsr2003.pdfSoftwaretechnik und 5.1.3 Reengineering und Wartung betrieblicher

source code level and the gap between the documentedand the actual structure of the software architecture, whichmay have diverged over time. Architecture recovery sup-ports the process of program understanding for softwaremaintenance and system evolution. Ideally, the documen-tation of the architecture should be complete and keptup-to-date, but this is rarely the case because of undocu-mented changes, system evolution, or employee turnover.The description of the software architecture has to be re-covered. An approach is presented in the following sec-tions to attain these goals and towards the bridging of thegaps. It is called “Design Hypothesis” and aims at theachievement of an up-to-date high-level design model.

7.2 Context

This approach was developed in a diploma thesis ([7]) andvalidated in a case study performed in close cooperationwith an industrial partner. Feedback and comments of thedevelopers at the industrial partner have been integratedinto the second version of this approach, which is pre-sented here. The source code of a firmware controllingautomated integrated circuit tester was analyzed to con-struct the module view (see [4]) of the software system.The firmware of the industrial partner has been evolvedover approximately 15 years. Since then the firmware wasported to new hardware requirements, adjusted to new ver-sions of the operating system, and changed several timesdue to enhancements and enlargements of the functional-ity. These maintenance activities became very complexand quite expertise-based, and hence very expensive. Upto the present the firmware consists of about 500 KLOC,more than 1,2 million LOC with comments.

7.3 Approach

The main idea of this top-down approach is that the reversearchitect starts with a quite inaccurate view on the soft-ware architecture. His impression is then iteratively vali-dated and refined with several reverse engineering meth-ods, until a stable state of the module view is reached.Figure 7.1 shows an overview about the “Design Hypoth-esis” approach in IDEFØ notation [5]. The reverse archi-tect makes an assumption of the structure of the softwaresystem under investigation. The assumption involves ofseveral logical modules and the relations among them rep-resenting the software, mapped to source code entities, e.g.files, routines, variables. This high-level design model ofthe software is compared to the source code with the re-flexion model technique [9]. To support the mapping ac-tivities, a tool was developed, that allowed the reverse ar-chitect to facilitate the assignments. For computing thereflexion model, the jRMTool [6] is used. During severaliterations the high-level design model and the mappingsto source code entities are refined further until the modelis in a stable state. The refinement employs several tools:The Bauhaus tool [1] provides the reverse architect with

information about the source code, e.g. the call graph, thedeclaration of function and data types, the dominance tree,part type relations, etc. CodeSurfer [2], a tool using pro-gram analysis techniques for providing the user with intra-and interprocedural slicing and pointer analysis can alsobe helpful when revising the mapping. Xrefactory [12] isused for fast navigation in the source code. The reversearchitect can find out about the declaration and all otherreference in the source code of mapped entities. Based onthe structural information gained through the analysis thereverse architect successively adjusted his impressions ofthe system, so it became more and more precise. The pur-pose of this approach is the construction of an up-to-datemodule view on the software system. Based on this model,further steps in the maintenance, refactoring or reengineer-ing process can be executed or the documentation can beimproved or validated. This approach allows the decompo-sition of a software system into a hierarchy of subsystems.However, this is not yet supported by the jRMTool. It canonly visualize one level of a hierarchy at a time. Thereforean enhancement of this tool or another form of visualiza-tion is imaginable and should be addressed in the future.

Figure 7.1. The “Design Hypothesis” Approach

7.4 Lessons Learned

The approach helped to identify subsystems and the rela-tions among them. For this reason, the reverse architectcan see, which of them have to be handled with cautiondue to a high coupling. If a developer wants to changethe source code in a subsystem, he is now aware of pos-sible side effects. The awareness among the developers totake preventive actions was raised. It became obvious thatthe restructuring activities should start with a pilot projectconcerning only a small part of the system, because re-structuring the whole system at once is a nearly impossi-ble task due to the high amount of dependencies between

Page 14: 5. Workshop Software Reengineering (WSR 2003)pi.informatik.uni-siegen.de/stt/23_2/01_Fachgruppenberichte/wsr2003.pdfSoftwaretechnik und 5.1.3 Reengineering und Wartung betrieblicher

the source code elements. The bigger the subsystems are,the more imprecise and less accurate the mappings becomedue to the inherent complexity of the system. So the re-structuring has to be done step by step. The results foranalyses in the small lead to very useful information aboutthe software architecture. Insights can be gained, that easethe work of the developers. Several analyses of smallerparts can be combined to reconstruct a view on the wholesystem.The role of the expert is very important. His knowledgeis needed, because the reverse architect normally cannotdecide, whether a routine or a variable is to be mapped toone module or another. It has become clear, when workingwith a system as large as the firmware, the reverse architecthas to cooperate with several experts since it is impossiblefor one person to have in-depth knowledge of all parts ofthe software system.The mapping done manually with editors or with shellscripts was not sufficient and took quite a long time, there-fore, a tool was developed to accelerate the mapping pro-cedure, and hence, to improve the efficiency of the ap-proach. The combination of manual mappings for regularexpressions, the mapping tool for single source code ele-ments like (directories, file, routines, etc.) and the shell-scripts for the automatic repetition of mappings with slightchanges lead to a noticeable faster performance of themapping activity than before.The developer of the industrial partner could apply the ap-proach almost alone just after a short time of introduction.It is nearly no training needed, neither for using the tools,nor for performing the activities of the approach. Thisleads to a fast production of results.

7.5 Conclusion

The outcomes of this work were a couple of views on spe-cific pars of the firmware and the whole system. Theseresults showed that the “Design Hypothesis” approach al-lows a company to make sound statements about the soft-ware architecture of their software. Subsystems have been

detected, modules have been identified, and the relationsamong them have been revealed. The developers at the in-dustrial partner stated that the case studies provided themwith useful, insightful, interesting results.

Bibliography

[1] Projekt Bauhaus:http://www.bauhaus-stuttgart.de/

[2] CodeSurfer, http://www.grammatech.com/products/codesurfer/

[3] R. K. Fjelstad, W. T. Hamlen: Application ProgramMaintenance Study: Report To Our Respondents, Tu-torial on Software Maintenance, IEEE Computer So-ciety, April 1983

[4] Christine Hofmeister, Robert Nord, Dilip Soni: Ap-plied Software Architecture, Addison-Wesley, Read-ing MA, 2000

[5] IDEF0 Notation:http://www.idef.com/idef0.html

[6] jRMTool:http://www.cs.ubc.ca/~murphy/jRMTool/doc/

[7] J. Knodel: Process Models for the Reconstruction ofSoftware Architecture Views, Diplomarbeit, Univer-sität Stuttgart, Juli 2003

[8] M.M. Lehman, L. Belady: Program Evolution, Pro-cesses of Software Change, Academic Press, London,1985

[9] Gail C. Murphy, David Notkin, Kevin Sullivan: Soft-ware Reflexion Models: Bridging the Gap betweenSource and High-Level Models, Proceedings of SIG-SOFT´95, ACM Press, New York, 1995, pp. 18-28

[10] Spencer Rugaber: White Paper on Reverse En-gineering, Software Engineering Research Center,Georgia Institute of Technology, Atlanta, March 1994,http://www.cc.gatech.edu/reverse/repository/white_paper.ps

[11] Ian Sommerville: Software Engineering, Third Edi-tion, Addison-Wesley, 1989

[12] Xrefactory, http://www.xref-tech.com/

Page 15: 5. Workshop Software Reengineering (WSR 2003)pi.informatik.uni-siegen.de/stt/23_2/01_Fachgruppenberichte/wsr2003.pdfSoftwaretechnik und 5.1.3 Reengineering und Wartung betrieblicher

8 Application of Feature Modeling for Architecture Recovery

Ilka Philippow, Ilian Pashov, Matthias RiebischTechnical University of Ilmenau, Max-Plank-Ring 14, P.O. Box 100565, 98693 Ilmenau,{IlkaPhilippow,IlianPashov,MatthiasRiebisch}@tu-ilmenau.de

8.1 Introduction

The available evidence in a legacy software system often isnot sufficient for its understanding and recovery. In mostcases the software documentation is outdated and poor. Itis possible to argue that the most reliable information isin the source code. Nevertheless a significant knowledgeabout the problem domain is required to improve the facil-ity for extraction of useful architectural information. Inthis paper is proposed an approach for applying systemdomain knowledge for program understanding. This ap-proach determines an architecture recovery process initi-ated at the level of domain knowledge and supported withfeature models.

8.2 State of the Art

Several methods and approaches from the field of forwardand reverse engineering have to be integrated into an ar-chitecture recovery process.

Feature Modeling

Originally feature modeling was introduced by theFODA methodology [Kang et al. 1990] for structur-ing domain properties from the view of custumers.[Czarnecki et al. 2000] has extended feature models byconstrains and relations. In [Riebisch et al. 2002] theserelations are extended with formal described constrains.The method FORM [Kang et al. 1998] describes how touse feature models for domain architectures and reusablecomponents. But reverse engineering needs a more gen-eral separation of feature spaces than the one offered byFORM (see 8.3).

Architecture Recovery

Architecture recovery requires a well defined process andtool support. There are several promising approaches.Considering the integration of domain knowledge the Rigi[Storey et al. 1997] system has to be mentioned. Rigi pro-vides two approaches for presenting software structures inits graph editor: firstly, to display the structure trough mul-tiple, individual windows and secondly, (simple hierarchi-cal multi-perspective view) fisheye views of nested graphs.It offers an open environment and can be extended for atool based feature oriented recovery. In [Riva et al. 2002]this idea is discussed but up to now there is no concept foranalyzing and presenting of features.

Program Comprehension

In most cases program comprehension is based on sourcecode analysis. [Brooks et al. 1983] connect for the firsttime program understanding with domain knowledge. In[Letovsky et al. 1986] Brooks ideas are elaborated. Theauthors in [Rajlich et al. 1994] take the top-down-programunderstanding techniques one step further: programmerscreate a chain of hypotheses along with subsidiary hy-potheses. These are verified in the code. Similar hypothe-ses are used in the here proposed approach (see 8.3). Arecent discussion of domain knowledge and program un-derstanding in [Rugaber et al. 2000] describes a numberof ways for presenting domain knowledge. In this paperthey are extended by feature modeling as a bridge to laterarchitecture development.

8.3 Feature Model Based Architecture Re-covery

In the software life cycle design objectives and designdecisions are involved, that can be used for architec-ture recovery. This approach achieves this through split-ting the features into two spaces (problem space and so-lution space) and establishing the corresponding featuremodel. The architecture recovery process consists offour major activities: Requirements and Domain Analy-sis, Legacy Architecture Analysis, Architecture Recoveryby Hypotheses and Scenario Driven Dynamic Analysis.

Requirements and Domain analysis

Functional requirements represent design objectives. Theyhave to be elaborated with domain experts and representedin a design objectives feature model.

Requirements have to be refined by case descriptions andscenarios that are later used during hypotheses assessmentstep and for verification and dynamic descriptions.

Legacy architecture analysis

The legacy architecture analysis is based on existing doc-uments that are studied with comparison to requirementsform the previous step. Knowledge about the domains ref-erence architecture and pattern is included as a later sourceof hypotheses. The results are collected in a design deci-sions feature model. The nodes in the hierarchy representsolutions (structures, pattern and others). The design deci-sion model also serves as a hypotheses stock.

Page 16: 5. Workshop Software Reengineering (WSR 2003)pi.informatik.uni-siegen.de/stt/23_2/01_Fachgruppenberichte/wsr2003.pdfSoftwaretechnik und 5.1.3 Reengineering und Wartung betrieblicher

Architecture recovery by hypotheses determinationand verification (static architecture description)

Both, design objectives feature model and design decisionsfeature model are created iterative and serve as stock forhypotheses that must be formulated and verified. A hy-pothesis describes a supposed relationship between a fea-ture and an architectural element (e.g. interface, class,component, method and other). Hypotheses are collectedin cross-reference-tables with references “Features to Ar-chitectural elements” and “Features to Source code”.The legacy source code is analyzed in a conventional way.The results of the analysis refine hypotheses through ar-chitectural diagrams. Hypothesis can lead to new one. Ahypothesis verification can fail due to an invalid feature-architectural element relation or a non-present feature. Ifthere is no feature corresponding to a hypothesis then thehypothesis is considered to be wrong. A feature withoutany corresponding architectural element could be obsolete,invalid or optional. If none of this is true than obviouslythere is a new missing hypothesis. All verified hypothesisare stored in the cross reference table and serve for staticarchitecture description.

Scenario driven dynamic analysis

The scenarios from step 1 are used for analyzing the dy-namic aspects by common coverage analyzers and profil-ers for the description of the dynamic behavior. Behaviorinformation can be used for the construction of test cases.

8.4 Conclusions

The presented architecture recovery approach shows thatproblem domain knowledge plays a significant role forprogram understanding and architecture recovery. Featuremodels act as bridge between requirements and architec-ture. Finally, they serve as a mean of generation and veri-fication of architecture hypothesis.Currently the application of the approach is supported bya configuration of several tools. Relational databases areused for maintaining cross-reference lists. They are con-nected to visualisation tools and editors using XML. Theintroduced recovery method was applied for an indus-trial project with the Postal Automation Division of theSiemens Dematic AG. Up to now the approach mainlycovers the analysis and recovery of static software archi-tectures. The dynamic aspects are considered as futurework. Furthermore, research has to be directed to:

1. Elaboration and stricter representation of featuremodels

2. Scaling the process for large systems by decisionsupport by metrics

3. Managing the cases of exiguous domain knowledge4. Recovering the architecture execution view

Bibliography

[Brooks et al. 1983] Brooks, R.: Towards a Theory of theComprehension of Computer Programs. Intl. J. Man-Machine Studies 18, 6 (June 1983)

[Czarnecki et al. 2000] Czarnecki, K., Eisenecker, U.W.:Generative Programming. Addison Wesley, Reading,MA, 2000

[Kang et al. 1990] Kang, K., Cohen, S., Hess, J., No-vak, W., Peterson, A.: Feature-Oriented DomainAnalysis (FODA) Feasibility Study. Technical Re-port CMU/SEI-90-TR-021, SEI Institute, CarnegieMellon University, Pittsburgh, 1990

[Kang et al. 1998] Kang, K. C., Kim, S., Lee, J., Kim, K.,Shin, E., Huh. M.: FORM: A feature-oriented reusemethod with domain-specific reference architectures.Annals of Software Engineering, 5:143–168, 1998

[Letovsky et al. 1986] Letovsky, S., Soloway E.: Delocal-ized Plans and Program Comprehension. IEEE Soft-ware 3, May 1986

[Rajlich et al. 1994] Rajlich, V., J. Doran, Gudla R.: Lay-ered Explanations of Software: A Methodology forProgram Comprehension, 3d Workshop on ProgramComprehension, WPC’93, Washington, D.C., pp. 46-52, Nov. 1994

[Riebisch et al. 2002] Riebisch, M., Böllert, K., Streit-ferdt, D., Philippow, I.: Extending Feature Diagramswith UML Multiplicities. 6th Conference on Inte-grated Design & Process Technology, Pasadena, Cal-ifornia, USA. June 23 - 30, 2002

[Riva et al. 2002] Riva, C., Rodriguez, J. V.: CombiningStatic and Dynamic Views for architecture recon-struction. Proc. of the Sixth European Conference onSoftware Maintenance and Reengineering, Budapest,March 2002

[Rugaber et al. 2000] Rugaber, S.: The use of domainknowledge in program understanding. Annals ofSoftware Engineering, 2000

[Storey et al. 1997] Storey, M. D., Fracchia F.D., MüllerH. A.: Rigi: A Visualization Environment for Re-verse Engineering. Proc. of International Conferenceon Software Engineering (ICSE’97), Boston, U.S.A.,May 17-23, 1997

Page 17: 5. Workshop Software Reengineering (WSR 2003)pi.informatik.uni-siegen.de/stt/23_2/01_Fachgruppenberichte/wsr2003.pdfSoftwaretechnik und 5.1.3 Reengineering und Wartung betrieblicher

9 Automatisierte Ermittlung von Subsystemschnittstellen

Kay Schützler, Tobias ThielHumboldt-Universität zu Berlin, {schuetzl,thiel}@informatik.hu-berlin.de

9.1 Einleitung

Am Institut für Informatik der Humboldt-Universität zuBerlin wird im Rahmen eines studentischen Projekts (Pro-jekt ”Softwaresanierung”: [1, 4]) ein Reengineering aneiner Steuerungssoftware durchgeführt. Die in C++ im-plementierte Software wird am Institut für Physik derHumboldt-Universität zu Berlin zur Steuerung der Hard-ware verschiedener Messplätze bei Langzeitexperimenteneingesetzt.Die Beschäftigung mit den Quellen der Software offen-barte große Defizite seitens des Originalentwicklers beider Definition von Subsystemen und ihren Schnittstellen.Nach der Aufteilung der Quellen in einzelne Subsysteme[2] wurde klar, dass nicht alle über Header-Dateien veröf-fentlichten Teile eines Subsystems auch zu dessen Schnitt-stelle gehören. Nicht klar ist jedoch, welche der Elementetatsächlich nicht dazugehören und somit im Subsystem ge-kapselt werden können. Gesucht sind also die tatsächlichbenutzten Schnittstellen der Subsysteme.Da im Projekt das Reengineering-Tool SNiFF+ [3] bereitserfolgreich eingesetzt wurde, entstand der Wunsch, die vonSNiFF+ gewonnenen Strukturinformationen über das Sy-stem für die oben beschriebene Aufgabe weiter zu verwen-den. Für den Zugriff auf Strukturinformationen - und spe-ziell auf gegenseitige Referenzen von Sprachelementen -bietet SNiFF+ ein gut dokumentiertes Java-API.Ein am Institut entwickeltes Tool berechnet nun die Subsy-stemschnittstellen aus den erhaltenen Informationen. Kon-kret werden dazu die Referenzinformationen genutzt, wel-che darüber Aufschluß geben, welches Symbol an welchenanderen Stellen benutzt wird. Die Symbole eines Subsy-stems, die in einem anderen Subsystem referenziert wer-den, bilden die tatsächlich genutzte Subsystemschnittstel-le.

9.2 Vorstellung des entwickelten Tools

Funktionalität

Der Einsatz des Tools setzt ein vorhandenes SNiFF+-Projekt mit entsprechender Projektdatei voraus.Der Anwender spezifiziert bei dem anschließenden Tool-Einsatz zunächst das Verzeichnis, in dem sich die SNiFF+-Projektdatei befindet.Im nächsten Dialog erfolgt die Angabe der Sub-systemeinteilung. Dabei wird jede Quelldatei genau ei-nem Subsystem zugeordnet. Das Tool schlägt als möglicheAufteilung zunächst die in der Projektdatei vorgefundenephysische Verteilung der Dateien auf die vorhandenen Un-terverzeichnisse (die als mögliche Subsysteme betrachtetwerden) vor.

Im Anschluss daran stellt das Tool eine Verbindung zuSNiFF+ her und nutzt diese zur Übertragung der Informa-tionen. Alle zur späteren Analyse benötigten Informatio-nen werden zwischengespeichert.In der nun folgenden Auswertungsphase wird durch dasTool zuerst jedes Symbol genau dem Subsystem zugeord-net, in dem sich die Datei mit der entsprechenden Sym-boldefinition befindet. Es folgt die Auswertung der Re-ferenzinformationen und darauf aufbauend die Ermittlungder Subsystemschnittstellen.Die Arbeit mit dem Tool wird mit der Ausgabe der Sub-systemschnittstellen abgeschlossen. Die Ausgabe erfolgtzum einen in Tabellenform auf der Benutzeroberfläche undzum anderen in Form einer Liste, die in einer Datei gesi-chert wird.

Architektur

Die Architektur des Tools besteht im Wesentlichen ausdrei Schichten: einer Datenschicht, einer Logikschichtund einer Anwendungsschicht. Die einzelnen Komponen-ten des Tools können Abbildung 9.1 entnommen werden.Grau hinterlegt ist die externe SNiFF+-Anwendung, derenFunktionen über das erwähnte Java-API genutzt werden.

Oberfläche

Schnittstellen−Ausgabe

Steuerung

Ermittlung

Datenhaltung

SNiFF+−Client

Programm−Benutzer−

Schnittstellen−

SNiFF+

Abbildung 9.1. Architektur des entwickelten Tools

Stand der Entwicklung

Derzeit liegt bereits eine erste nutzbare Version des Toolsvor. Abbildung 9.2 zeigt die aktuell implementierte Be-nutzeroberfläche, die sich prinzipiell bewährt hat und nurnoch einiger weniger Ergänzungen bedarf.Auch die gewünschte Funktionalität ist größtenteils be-reits implementiert. Dabei sind unter Anderem die nach-folgend beschriebenen Probleme entdeckt worden, die teil-weise noch zu behandeln sind.Die von SNiFF+ gelieferten Strukturinformationen sindnicht in allen Fällen ausreichend, so liefert SNiFF+ zwar

Page 18: 5. Workshop Software Reengineering (WSR 2003)pi.informatik.uni-siegen.de/stt/23_2/01_Fachgruppenberichte/wsr2003.pdfSoftwaretechnik und 5.1.3 Reengineering und Wartung betrieblicher

Informationen zu Makrodefinitionen (#define), aber keineReferenzinformationen für diese Makros. Daher muss dieVerwendung der Makros selbst ermittelt werden.

Abbildung 9.2.Screenshot des Hauptfensters mit Dia-log zum Bearbeiten der Subsystemauf-teilung

Dazu werden zunächst vom Tool die Makrodefinitionengespeichert. Im folgenden Schritt werden alle Quelltextda-teien gescannt und nach den Makronamen gesucht. Wirdauf diese Weise eine Makrobenutzung gefunden, so wirddiese wie eine normale Referenz behandelt. Bei dieserArt der Makrobehandlung besteht allerdings noch das Pro-blem, dass zwei verschiedene Makros mit dem selben Na-men, die in verschiedenen Übersetzungseinheiten definiertwurden, nicht unterschieden werden können.Eine weitere Schwierigkeit stellt das Schlüsselwort ex-tern dar, das bei Variablen beachtet werden muss. DaSNiFF+ extern ignoriert, muss auch bei der Behandlungvon Variablen auf den Quelltext zurückgegriffen werden.Ist die Variable im Quelltext als extern bezeichnet, sowerden alle Referenzen auf diese Variable als Referenz aufdie an anderer Stelle stehende Definition behandelt.Da das Tool vorrangig für die Bedürfnisse im Projekt”Softwaresanierung” entwickelt wurde, richtete sich dieAufmerksamkeit zunächst hauptsächlich auf die in denvorliegenden Quellen auch tatsächlich vorzufindenden

C++-Elemente. Daher erfolgt durch das Tool in seinerjetzigen Form auch noch keine Behandlung von Name-spaces und damit verbundenen Aspekten der Sichtbarkeitvon Schnittstellen-Elementen.

9.3 Ausblick

Die Arbeit mit dem Tool in seiner derzeit vorliegendenForm hat bereits Erweiterungsmöglichkeiten aufgezeigt.Es wäre in jedem Fall wünschenswert, auch Namespaceszu behandeln, um die Anwendungsmöglichkeiten bezüg-lich der zu untersuchenden Quelltexte zu erweitern.Derzeit erfolgt über das SNiFF+-API die Auswertungvon statischen Analyse-Informationen, was beispielswei-se beim Vorhandensein von Vererbungshierarchien mit po-lymorphen Zugriffen zu konservativen Strategien bei derSchnittstellenermittlung zwingt. Um hier genauere Aussa-gen über die tatsächlich benutzten Schnittstellenelemen-te treffen zu können, wäre die Einbeziehung dynamischerAnalyse-Informationen wünschenswert.Im Falle des XCTL-Projekts steht eine andere Erweite-rung des Tools im Vordergrund. Die Funktion zur freienFestlegung der Zuordnung von Quelldateien zu Subsyste-men soll durch eine Möglichkeit zur physischen Speiche-rung der vorgenommenen Aufteilung ergänzt werden. Da-mit würden die Möglichkeiten zur Untersuchung der Vor-und Nachteile verschiedener Subsystemaufteilungen sinn-voll erweitert.

Literaturverzeichnis

[1] Bothe, Klaus, Reverse Engineering: the Challenge ofLarge-Scale Real-World Educational Projects, Proc.of 14th Conference on Software Engineering Educa-tion and Training, Charlotte, USA, 2001

[2] Schützler, Kay, Manuelle Subsystemextraktion anhandvon Use-Cases, 4. Workshop Software Reengineering,Bad Honnef, 2002

[3] SNiFF+: Reengineering-Tool, Kurzdarstellung desHerstellers (Wind River International),http://www.windriver.com/products/sniff plus/

[4] Web-Site des Projekts ”Softwaresanierung” amInstitut für Informatik, http://www.informatik.hu-berlin.de/swt/projekt98/

Page 19: 5. Workshop Software Reengineering (WSR 2003)pi.informatik.uni-siegen.de/stt/23_2/01_Fachgruppenberichte/wsr2003.pdfSoftwaretechnik und 5.1.3 Reengineering und Wartung betrieblicher

Aspekte

10 Referenzschemata im Reverse Engineering

Andreas WinterUniversität Koblenz-Landau, Institut für Softwaretechnik, D-56016 Koblenz,[email protected]

10.1 Motivation

Die Entwicklung und Weiterentwicklung von Software-systemen erfordert umfangreiche und detaillierte Kennt-nis unterschiedlichster Aspekte des Systems. Unabhän-gig, ob Softwaresysteme nach klassischen oder agilenVorgehensmodellen entwickelt werden, wird das Verste-hen vorhandener Softwaresysteme zur immer zentrale-ren Aktivität der Software-Entwicklung. Zur Unterstüt-zung dieser Aktivität wurden in den letzten Jahren viel-fältige Reverse-Engineering-Techniken und Werkzeugeentwickelt. Reverse-Engineering Werkzeuge basieren inder Regel auf einer Repository-basierten Architektur [3].Extaktoren übertragen die Problem-relevanten Fakten ausQuelltexten in ein Repository. Analysewerkzeuge (Ab-straktoren) untersuchen, verändern oder ergänzen dieseDaten. Analyseergebnisse werden mit Hilfe geeigneter Vi-sualisierungswerkzeuge (Visualisierer) präsentiert.Die Synchronisierung dieser Einzelkomponenten erfolgtüber das gemeinsame Repository. Dessen Struktur legtfest, welche Fakten über das Softwaresystem bereitgestelltwerden und welche Analysen hierauf ausgeführt werdenkönnen. Jeder Problemkontext, der durch das jeweiligeSoftware-Entwicklungsproblem, die hierbei zu betrachten-den Programmier- und Modellierungssprachen, sowie diejeweils eingesetzten Reverse-Engineering-Techniken ge-prägt ist, erfordert hierbei jeweils individuell definierteRepository-Strukturen.Die Definition solcher Repository-Strukturen durch Sche-mata und der hierauf definierten Dienste ist eine wesent-liche Aufgabe zur Entwicklung von Reverse-Engineering-Werkzeugen. Aufgrund der vielfältigen Aspekte, die beider Entwicklung dieser Schemata zu beachten sind, istsowohl die Entwicklung solcher Problem-angemessenerSchemata als auch die Entwicklung passender Extraktorenzeitaufwändig und teuer.Abhilfe schafft eine Sammlung geeigneter Referenz-Schemata, die jeweils für einzelne Problembereiche eta-blierte und bewährte Schemata anbieten.

10.2 Standard- und Referenz-Schemata

Standards beschreiben allgemein akzeptierte und festge-schriebene Lösungen für bestimmte Probleme. Eine

Sammlung von Standard-Schemata im Reverse Enginee-ring bietet eine fest definierte Menge vollständig defi-nierter Schemata für alle Reverse-Engineering Proble-me. Eine solche Sammlung muss hierbei die unter-schiedlichesten Programmiersprachen aus verschiedenenProgrammierkulturen auf diversen Granularitäts-Ebenenund unterschiedlichste Notationen zur Visualisierung be-rücksichtigen. Aufgrund der Heterogenität der Reverse-Engineering Probleme und der fehlenden Flexibilität vonStandards scheint die Entwicklung einer solchen allumfas-senden Standard-Schema-Sammlung ein unlösbares Un-terfangen.Referenz-Schemata bieten einerseits die benötigte Stabili-tät, indem sie die charakteristischen Eigenschaften einerKlasse von Schemata definieren. Andererseits bieten sieauch die nötig Flexibilität, indem sie durch wenige, ein-fache Anpassungen (Löschen, Spezialisieren und Ergän-zen von Konzepten) an konkrete Anforderungen eines An-wendungsbereichs angepasst werden können. Referenz-Schemata sind folglich genereller aber auch unvollständi-ger als Standard-Schemata.Zentrale Dokumente der Software-Entwicklung sind derProgramm-Quelltext und diverse visuelle Modelle. DieseArtefakte bestimmen auch die grundlegende Struktur derReferenz-Schemata im Reengineering. Abstraktoren basie-ren i. Allg. auf Repräsentationen des Quelltexts in unter-schiedlicher Granularität. Visualisierer setzen i. Allg. aufStrukturen auf, die durch die zur Visualisierung verwende-ten Notationen determiniert ist. In beiden Bereichen lassensich diverse elementare Aspekte identifizieren, die in Sche-mata für unterschiedliche Problembereiche in leicht mo-difizierter Form berücksichtigt werden. Die charakteristi-schen Eigenschaften dieser elementaren Aspekte werdendurch Schema-Moleküle beschrieben. Referenz-Schematafür einzelne Problembereiche sind aus diesen Schema-Molekülen und vorhandenen Referenzschemata zusam-mengesetzt.

10.3 Programmiersprachen-Sicht

Quelltext ist oft die einzige verlässliche Informationsquel-le zu einem bestehenden Softwaresystem. Im Reverse-Engineering sind die Strukturen dieser Softwaresystemezu erkennen und zu visualisieren.

Page 20: 5. Workshop Software Reengineering (WSR 2003)pi.informatik.uni-siegen.de/stt/23_2/01_Fachgruppenberichte/wsr2003.pdfSoftwaretechnik und 5.1.3 Reengineering und Wartung betrieblicher

Reverse-Engineering-Werkzeuge benötigen Repräsenta-tionen der unterschiedlichsten Programmiersprachen ausverschiedenen Programmierkulturen auf unterschiedli-chen Abstraktionsebenen. Schemata dieser Repräsen-tationen können entlang wesentlicher Sprachmerkmaleklassifiziert werden. Je nach verwendeter Programmier-sprache sind hierzu u. A. Aufrufstrukturen, Ausdrücke,Enthaltenseinsstrukturen (Include), Funktions/Methoden-Deklarationen, Klassen-Definitionen, Kontrollstrukturenund Anweisungen, Nebenläufigkeit, Objekt/Variablen-Deklaration, Präprozessor-Anweisungen, Templates, Typ-Definitionen zu berücksichtigen. Abhängig von der, derProgrammiersprache zugrunde liegende Programmierkul-tur, sind diese Kernaspekte durch Schema-Moleküle in un-terschiedlichen Ausprägungen zu beschreiben. Beispiels-weise erfordert die Modellierung der Kontrollstrukturen inCobol, Lisp, oder Pascal unterschiedliche Ausprägungen.Referenzschemata zur Darstellung dieses Aspekts für C++oder Java sind dagegen weitgehend ähnlich.

Referenz-Schemata für einzelne Problembereiche setzensich dann aus geeignet angepassten Schema-Molekülen fürdie jeweils genutzten Aspekte in ihren jeweiligen Aus-prägungen zusammen. So besteht z. B. das ColumbusC++ Schema [2], das als Ausgangspunkt für ein C++Referenz-Schema genutzt werden kann, aus Komponen-ten zur Modellierung von Ausdrücken (expr), Klassen-definitionen (struc), Kontrollstrukturen und Anweisungen(stmt), Templates (templ), und Typdefinitionen (Type).

10.4 Modellierungssprachen-Sicht

Informationen über Softwaresysteme werden sowohl zurinitialen Erstellung als auch während der Weiterentwick-lung durch visuelle Modellierungsmitteln beschrieben.

Ausgehend von geeigneten Repräsentationen der vor-liegenden Quelltexte, werden im Reverse Enginee-ring Softwarezusammenhänge z. B. durch Klassen-diagramme, Datenfluss-Diagramme, Aktivitätsdiagram-me, oder Sequenzdiagramme visualisiert. Diese visuel-len Beschreibungsmittel stellen unterschiedliche dyna-mische und statische Aspekte von Software-Systemenin den Mittelpunkt: u. A. Datenflüsse, Klassendefini-tionen, Klasseninteraktionen, Kontrollflüsse, Nachrich-tenaustausche, Objektinteraktionen, Systemzustände undÜbergänge. Diese Kernaspekte visueller Modellierungs-mittel sind ebenfalls durch Schema-Moleküle zu be-schreiben. Geeignetes Zusammenfassen, evtl. angepassterSchema-Moleküle der jeweils benötigten Modellierungs-aspekte, liefert Referenz-Schemata konkreter Modellie-rungssprachen (also Referenz-Metaschemata). Entlang ge-meinsam dargestellter Konzepte bzw. Aspekte lassen sichdiese Referenz-Metaschemata zu integrierten Referenz-Metaschemata gruppieren [4]. Je nach Implementierungs-nähe überlappen sich diese Schema-Moleküle mit denSchema-Molekülen aus Sicht der Programmiersprachen(vgl. den Aspekt Klassendefinition).

10.5 Abgeleitete Referenz-Schemata

Referenz-Schemata bieten einerseits mit Schema-Molekülen aus Programmier- und Modellierungsprachen-Sicht bzw. mit jeweils sprach-spezifischen Schemata eineSammlung bewährter Schemata zur Lösung klassischerReverse-Engineering-Probleme. Sie bieten andererseitsaber auch eine Bausteinsammlung, aus der, durch geeig-netes Anpassen und Zusammenfassen einzelner Bausteine,weitere Schemata abgeleitet werden können.So lassen sich beispielsweise Schemata zur Beschrei-bung von Software-Architekturen entlang bekannter Archi-tekturstile [1] durch Variantenbildung und Kompositionaus Schema-Molekülen und Referenz-Schemata ableiten:Schemata zur Beschreibung von Software-Architekturennach dem Pipe-Filer-Style erfordern Konzepte zur Mo-dellierung von Prozessen (Filter), die Daten verändern,und Datenflüssen (Pipe), die den Datenaustausch zwischenProzessen beschreiben. Ein solches Schema entspricht ei-nem stark vereinfachen Metaschema zur Modellierung mitDatenfluss-Diagrammen, und lässt sich leicht aus einemSchema-Molekül zur Beschreibung von Datenflüssen ab-leiten. Ist eine breite Verwendbarkeit eines solchen Sche-mas erwiesen, kann dieses auch in die Sammlung derReferenz-Schemata übernommen werden.

10.6 ZusammenfassungReferenz-Schemata im Reverse Engineering liefern vor-gefertigte Standardlösungen für wiederkehrende Reverse-Engineering-Probleme, bestehend aus Datenstrukturenund den hierzu passenden Extraktor- und Analysediensten.Referenz-Schemata beschreiben charakteristische Eigen-schaften dieser Lösungen und sind durch wenige Änderun-gen an weitere Reverse-Engineering-Probleme anpassbar.Die Bereitstellung eines solchen Referenz-Schema-Werk-zeugkastens erfordert neben der weiteren Entwicklung ein-zelner Schema-Moleküle und Referenz-Schemata, auchdie Entwicklung einer Methodik zur Verwendung dieserSchemata. Diese umfasst u. A. die Bereitstellung vonOperationen zur Anpassung und Integration von Schemataund deren Übertragung auf entsprechende Instanz-Daten.

Literaturverzeichnis

[1] L. Bras, P. Clements, R. Kazman. Software Architec-ture in Practice. Addison-Wesley, Boston, 1998.

[2] R. Ferenc, F. Magyar, Á. Beszédes, Á. Kiss, M. Tar-kiainen. Columbus - Tool for Reverse EngineeringLarge Object Oriented Software Systems. In Procee-dings SPLST 2001, Szeged, Hungary, pp 16–27. June2001.

[3] C. Lange, H. Sneed, A. Winter. Comparing Graph-based Program Comprehension Tools to RelationalDatabase-based Tools. in 9th International Workshopon Program comprehension. IEEE, Los Alamitos, pp209–218. 2001.

[4] A. Winter. Referenz-Metaschemata für visuelle Mo-dellierungssprachen. DUV, Wiesbaden, 2000.

Page 21: 5. Workshop Software Reengineering (WSR 2003)pi.informatik.uni-siegen.de/stt/23_2/01_Fachgruppenberichte/wsr2003.pdfSoftwaretechnik und 5.1.3 Reengineering und Wartung betrieblicher

11 Aspect Mining Using Dynamic Analysis

Silvia Breu, Jens KrinkeLehrstuhl Softwaresysteme, Universität Passau, [email protected]

11.1 Motivation

Concerns express a specific interest in some topic regar-ding a particular system of interest. Separation of con-cerns (originally invented by Dijkstra) is essential in thesoftware development process: It is an important para-digm in software engineering to cope with the increasingnumber of special purpose concerns in today’s applicati-ons. To deal with that increasing complexity, several newapproaches like Composition Filters, Hyperslices and lastbut not least Aspect-Oriented Programming [3] (includingprogramming languages like AspectJ) have been propo-sed. But what about legacy systems, where separation ofconcerns could only be applied in a restricted way withinthe object-oriented paradigm? It is possible to find aspectsand to encapsulate them without changing software beha-vior, improving maintainability and re-usability, reducingtangled and scattered code. This is illustrated in the follo-wing sections.

11.2 Dynamic Analysis

This short report will present a first approach to dynami-cally analyze existing Java software to find aspects andcrosscutting concerns. For this purpose, different generalclasses of aspects have been defined:

1. Outside-Aspects are patterns where a call of methoda is always followed by a call of method b.

2. Inside-Aspects are patterns where a call of method bis always inside a call of method a.

These two main classes of aspects have been split further,each in two more subclasses:

Outside-Aspect can either be before or after a specificmethod call.

Inside-Aspect can either be first- or last-in a specific me-thod call.

Realize that before- and after-set of aspects in a certainsoftware system need not obligatory be equal, based on theassumption that we are looking for exhaustive sets. Thisholds for first-in- and last-in-set as well.However, defining classes of aspects and their structure isnot enough to find real aspects. To identify aspects in exi-sting software systems, a possible approach is to generateprogram traces. The obtained traces are analyzed, usinga tool written in Java. It searches for outside and insideaspect candidates with respect to a certain limitation:

1 B.a() {2 C.d() {3 G.h() {...}4 H.g() {...}5 }6 }7 A.b() {...}8 B.a() {9 C.d() {...}

10 }11 A.b() {...}12 B.a() {13 C.d() {14 G.h() {...}15 H.g() {...}16 }17 C.c() {...}18 }19 F.f() {20 H.i() {...}21 }22 C.c() {...}23 G.h() {...}

24 H.g() {...}25 A.b() {...}26 B.a() {27 C.d() {...}... ...

30 F.f() {31 H.k() {...}32 H.i() {...}33 }34 }35 D.e() {36 C.d() {...}... ...

40 A.b() {...}41 B.a() {42 C.d() {...}43 }... ...

50 G.h() {...}51 E.f() {...}52 }

Abbildung 11.1. Example trace

The pattern has to exist always in the same composition.

This constraint results from the following: A method callto a which is identified as being an outside aspect beforea method call to b has always to be immediately beforemethod calls to b, otherwise it is not a recurring pattern(aspect) in the system. The argumentation for outside afterand inside first-/last-in aspects is analogous.

Figure 11.1 shows an example trace which shall be the ba-sis to explain the dynamic analysis procedure and its resultin more detail. Analyzing the given trace leads to the fol-lowing aspect candidates:

� G.h() before H.g() (3x)� G.h() before E.f() (1x)� B.a() after A.b() (4x)� C.d() first-in B.a() (5x)� C.d() first-in D.e() (1x)� H.i() last-in F.f() (2x)

The example shows that reversing ’before aspects’ 1 doesnot necessarily lead to ’after aspects’: A.b() is alwaysfollowed by B.a() but it is not correct to say that beforeB.a() A.b() is always called—B.a() in line 1 is notpreceded by A.b(). However, in general, we can say thatiff both ’method a before method b’ and ’method b af-ter method a’ applies, the number of occurrences of both

1 In the remaining of the report only ’before’, ’after’, ’first-in’ and ’last-in’ are used to characterize the aspects as the nomenclature is clear.

Page 22: 5. Workshop Software Reengineering (WSR 2003)pi.informatik.uni-siegen.de/stt/23_2/01_Fachgruppenberichte/wsr2003.pdfSoftwaretechnik und 5.1.3 Reengineering und Wartung betrieblicher

patterns is the same—the aspects are symmetric.Additionally, we can see that C.d() has no first-in or last-in aspect: Not every appearance of C.d() in the exampletrace has the same structure. In lines 2-5 as well as in li-nes 13-16 it would have G.h() as first-in and H.g() aslast-in aspect, but in lines 9, 27, 36 and 42 it has no first-in and/or last-in aspect. Therefore, neither G.h() first-inC.d() nor H.g() last-in C.d() are added to the cor-responding result sets. For similar reasons, G.h() afterC.c() has not been detected because this pattern onlyholds for lines 22/23 but not for line 17.Applying a further analysis to the before-/after-/first-in-and last-in-set can now find crosscutting code candidates.Therefore, an additional constraint has to be checked:

The found pattern has to occur inmore than one calling context.

This means, that a method a is a first-in/last-in aspect on-ly if it has this predicate concerning several different me-thods whereas a method b is a before/after aspect if thepattern appears more than once in the trace. Following thisdefinition we can find several candidates for crosscuttingconcerns in the example:

� G.h() is a before aspect of H.g() and E.f()� B.a() is an after aspect of A.b()� C.d() is a first-in aspect of B.a() and D.e()

11.3 First Evaluation

For a first evaluation of the presented technique, a simplevisualization tool for chopping and slicing (AnChoVis),written in Java, has been traced. The presented analysisof traces of AnChoVis runs revealed that there are methodcalls for a certain functionality: logging. Those calls al-ways appear with the same pattern at identical places (asfirst-in and last-in aspect).Another version of AnChoVis without the logging func-tionality scattered throughout the code has been created.The logging functionality has been implemented as sim-ple aspect, written in AspectJ, and woven to the program.That resulted in a program version with the same behavioras before but with better understandability and maintaina-bility of the code.

11.4 Future Work

Up to now, the analysis presented in this short report is notfully assessed and explored but first evaluations are promi-sing.An open question is whether and how to merge identicalfirst-in and last-in aspects. The current analysis does not

provide any information if the aspect is one and the samecall inside another method or if there are two calls of oneand the same method with anything (statements, other me-thod calls) in between.More precise information could be gained by not just tra-cing method calls but also statements. However, this wouldmake the analysis more complex—a tradeoff between hig-her gain and precision on the one hand, reduced speed onthe other hand.Another question is whether it is worthwhile finding mo-re complex aspects: for example summarizing chains ofaspects like a before b, b before c, and c before d to onesingle aspect abc before d. Solutions for these points maygive additional information to the question how simple itis to encapsulate located aspects properly and correctly.Anyhow, there are even more open questions which haveto be explored:

� Do case studies with bigger software systems con-firm the results we have so far?

� Are there other aspects except the already well-known aspects like logging etc.?

11.5 Related Work

There are two other approaches known to the author whichpresent techniques to identify aspects. The work of Han-nemann and Kiczales [2] is a query-based Aspect Mi-ning Tool (AMT): The query specifies a type or a regularexpression; every line of an analyzed system is checkedagainst the query and highlighted if it matches. In the se-cond approach, Aspect Browser [1], crosscuts are identi-fied with textual-pattern matching and highlighted in theprogram files’ windows with a specific color.

Literaturverzeichnis

[1] William G. Griswold, Y. Kato, and J. J. Yuan.Aspect Browser: Tool Support for Managing Disper-sed Aspects. Technical Report CS99-0640, Depart-ment of Computer Science and Engineering, Universi-ty of California, San Diego, Dezember 1999.

[2] Jan Hannemann and Gregor Kiczales. Overcoming thePrevalent Decomposition of Legacy Code. In Work-shop on Advanced Separation of Concerns, 2001.

[3] Georg Kiczales, John Lamping, Anurag Mendhekar,Chris Maeda, Cristina Lopes, Jean-Marc Loingtier,and John Irwin. Aspect-Oriented Programming. InEuropean Conference on Object-Oriented Program-ming (ECOOP), 1997.

Page 23: 5. Workshop Software Reengineering (WSR 2003)pi.informatik.uni-siegen.de/stt/23_2/01_Fachgruppenberichte/wsr2003.pdfSoftwaretechnik und 5.1.3 Reengineering und Wartung betrieblicher

Lehre

12 Software Engineering II für Ingenieure: Wartung, Reengineeringund Evolution

Tobias Rötschke, Andy SchürrTU Darmstadt, Merckstraße 25, 64283 Darmstadt,{tobias.roetschke,andy.schuerr}@es.tu-darmstadt.de

AbstractIn diesem Artikel stellen wir unser Konzept für ei-ne Vorlesung „Software Engineering II“ vor, die abdem WS2003/2004 jährlich für Studenten der Inge-nieurstudiengänge „Elektrotechnik und Informationstech-nik“ sowie „Informations- und Kommunikationstechnik“gehalten wird. In dieser Hauptstudiumsvorlesung sol-len die Themen „Softwarewartung, -reengineering und -evolution“ in einer den Studiengängen angemessenen Wei-se behandelt werden. Der Schwerpunkt soll dabei auf derLösung von praxisnahen Problemen unter Verwendunggängiger Werkzeuge liegen.

12.1 Einleitung

Angesichts von immer komplexer werdenden Systemen,zunehmender Globalisierung und der kontinuierlichenWeiterentwicklung von Betriebssystemen, Programmier-sprachen und Komponentenrahmenwerken spielen Soft-warewartung, -reengineering und -evolution eine immergrößere Rolle in der Softwareentwicklung, die auch voreingebetteten Systemen nicht Halt macht.Ziel der Vorlesung „Software Engineering II“ ist es, Stu-denten der Studiengänge „Elektrotechnik und Informati-onstechnik“ sowie „Informations- und Kommunikations-technik“ – also keine Informatikstudenten – auf die er-folgreiche Mitarbeit in Projekten zur Weiterentwicklungvon bestehenden software-intensiven eingebetteten Syste-men vorzubereiten. Dabei soll unsere Vorlesung nichtspeziell auf eines der folgenden Gebiete ausgerichtetsein: Übersetzerbau, Reengineering [7], Softwarequalitäts-Management [4] oder Prozessmodelle [3]. Wichtige The-men, wie in [2, 11] vorgeschlagen, sollen vielmehr mög-lichst breit abgedeckt werden, ohne diese jedoch im einzel-nen zu vertiefen. Begleitend zur Vorlesung bieten wir eineÜbung an, in welcher die Studenten anhand eines durch-gängigen Beispiels Erfahrungen mit geeigneten CASE-Werkzeugen sammeln können.

12.2 Randbedingungen

Eine besondere Herausforderung ist dabei, den Stoff sozu gestalten, dass er optimal auf den Kenntnissen der

Studenten aufbaut. Die meisten Studenten haben nur ei-ne Programmiersprache gelernt (in der Regel Java) undkennen nur Microsoft Windows als Betriebssystem. Da-mit scheidet eine Übung basierend auf elementaren Unix-Werkzeugen wie in [13] aus. In der Vorlesung „Softwa-re Engineering I“ haben die Studenten bereits erste Er-fahrungen in der Modellierung mit UML gesammelt. DieProgrammierkenntnisse beschränken sich in der Regel aufÜbungsaufgaben aus den Grundstudiumsvorlesungen unddas Softwarepraktikum, bei welchem vor allem das Pro-grammieren im Kleinen im Vordergrund stehen.

12.3 Gliederung der Vorlesung

Die Vorlesung gliedert sich in fünf Kapitel. Zunächstwerden in der Einleitung Vorgehensweisen zur iterativenSoftwareenwicklung mit dem Schwerpunkt auf Wartungund Evolution vorgestellt. Anschließend werden im Ka-pitel „Konfigurationsmanagement“ die Bereiche Release-management, Versions- und Variantenmanagement sowieÄnderungs- und Fehlermanagement behandelt. Im Kapitel„Statische Programmanalyse“ besprechen wir Softwarear-chitekturen, Softwarevisualisierung, kontrollflussorientier-te Analysen, datenflussorientierte Analysen und Metri-ken. Das Kapitel „Dynamische Programmanalyse“ decktdie Bereiche Laufzeit- und Speicherplatzverbrauch, funk-tionsorientierte, kontrollflussorientierte und datenflussori-entierte Testverfahren sowie Testen objektorientierter Pro-gramme ab. Abschließend werden im Kapitel „Programm-transformationen“ Refactoring, reguläre Ausdrücke undTexttransformationen sowie optional kontextfreie Gram-matiken und Baumtransformationen behandelt.

12.4 Beispiele

Unser Ziel bei der Suche nach geeigneten Beispielpro-grammen war es, jeweils ein durchgängiges Beispiel fürdie Vorlesung und die Übung zu finden. Die Anwendungs-gebiete sollten verschieden und potentiell interessant fürunsere Studenten sein. Das Produkt sollte grundsätzlichlauffähig sein, aber genügend offensichtliche Fehler bein-halten, um daran etwas lernen zu können. Der Quelltextmusste zugänglich sein und das Projekt als Ganzen nicht

Page 24: 5. Workshop Software Reengineering (WSR 2003)pi.informatik.uni-siegen.de/stt/23_2/01_Fachgruppenberichte/wsr2003.pdfSoftwaretechnik und 5.1.3 Reengineering und Wartung betrieblicher

zu groß, aber auch nicht trivial sein. Als Programmierspra-che soll C++ verwendet werden, damit die Studenten ler-nen, neben Java noch einer weitere relevante Sprache zuerlernen.Durch Verwenden der vorhandenen Filter von SourceFor-ge.net, der wichtigsten Werkzeugplatform für Open Sour-ce Software-Entwicklung [8], gelang es uns, ein Open-Source-Projekt zu finden, welches uns für die Übunggeeignet scheint: TinyCAD [9] ist ein einfaches CAD-Programm für das Zeichnen von Schaltplänen. Das Pro-gramm verwendet benutzerdefinierte Symbolbibliotheken,kann Teilelisten erstellen und erlaubt es, einfache Ana-lysen auf dem Diagramm auszuführen. Es ist mit VisualC++ unter Verwendung des Microsoft-Foundation-ClassesRahmenwerkes geschrieben.Neben einigen offensichtlichen Bugs enthält das Pro-gramm Speicherlöcher, ist nur oberflächlich dokumentiertund bietet Ansatzpunkte für Refactoring: Dateien enthal-ten mehrere öffentliche Klassen, es gibt keine sichtbarePakethierarchie, einige Klassen sind sehr groß und habenzu viele Abhängigkeiten zu anderen Klassen.Für die Vorlesung sind wir noch auf der Suche nach einemgeeigneten Beispiel. Dieses sollte aus einem anderen An-wendungsgebiet kommen, damit die Studenten sich darangewöhnen, sich in verschiedene Gebiete hineindenken zumüssen.

12.5 WerkzeugeBei der Auswahl von Werkzeugen haben wir auf eine guteMischung von kommerziellen und frei verfügbaren Pro-dukten geachtet, wobei deren Anzahl möglichst klein seinsollte, ohne unsere Vorlesung vollständig auf ein einzi-ges Produkt zu stützen. Das Arbeiten mit den Werkzeugensollte ohne großen Einarbeitungsaufwand zu Ergebnissenführen, damit die Studenten motiviert bleiben, die angege-benen Werkzeuge auch tatsächlich zu benutzen.Als Entwicklungsumgebung verwenden wir Visual Stu-dio, welches die Studenten bereits aus dem vorher statt-findenden C++-Kurs kennen. Für Versions,- Änderungs-und Fehlermanagement verwenden wir SourceForge.net,welches auf dem Concurrent Versions System [6] basiertist. Wie in [5] vorgeschlagen, werden wir dieses Werkzeugauch dazu verwenden, um die Leistung der Studenten in-dividuell zu beurteilen.Für die Konfigurationsverwaltung verwenden wir diemake-Variante „nmake“, welche zu Visual Studio gehört.Für Reverse Engineering, Visualisierung, Metriken, Do-kumentation und Audits verwenden wir sowohl Doxygen[12] als auch Together [1], welches die Studenten bereitsin der Übung zur Vorlesung „Software Engineering I“ undim Softwarepraktikum für Entwicklung und Modellierungbenutzt haben.Für die dynamische Analyse verwenden wir Purify, Pure-Coverage und Quantify, aus der Rational Suite Enterprise[10]. Obwohl dieses Produkt oft auch für andere Aufgabenwie Versionsverwaltung, Bugtracking und Reverse Engi-neering eingesetzt werden, hat sich die Bedienung als zu

kompliziert herausgestellt, um im Rahmen einer einstün-digen Übung eingesetzt zu werden.

12.6 AusblickWir möchten auf dem Workshop zum einen unser Konzeptzur Diskussion stellen, wobei sowohl die Interessen derLehre als auch der Industrie deutlich werden dürften. Zumanderen wollen wir Erfahrungen über geeignete Fallbei-spiele sowie Visualisierungs- und Metrikwerkzeuge aus-tauschen.

Literaturverzeichnis

[1] Borland Software Corporation. Borland To-gether ControlCenter. Produktinformation,2003. www.togethersoft.com/products/controlcenter/.

[2] P. Bourque and R. Dupuis. Guide to the SoftwareEngineering Body of Knowledge (SWEBOK).www.swebok.org/documents/Trial_1_00/Trial_Version1_00_SWEBOK_Guide.pdf, May 2001.

[3] M. Broy. Projektorganisation und Management in derSoftwareentwicklung. Vorlesung TU München, Apr.2001.

[4] K.-P. Fähnrich. Software-Qualitätsmanagement.Vorlesung Universität Leipzig, 2002.

[5] M. Gehrke, H. Giese, U. A. Nickel, J. Niere,M. Tichy, J. P. Wadsack, and A. Zündorf. Reportingon Industrial Strength Software Engineering Coursesfor Undergraduates. In Proc. 24th International Con-ference on Software Engineering (ICSE), pages 395–405. ACM Press, 2002.

[6] D. Grune. Concurrent Versions System, a Method forIndependent Cooperation. Technical Report IR 113,Vrije Universiteit Amsterdam, 1986.

[7] R. Koschke. Vorlesungen zum Thema Software-Reengineering. In J. Ebert and F. Lehner, edi-tors, Proc. 2. Workshop Software-Reengineering,Bad Honnef, 2000. Universität Koblenz-Landau.

[8] Open Source Development Network. An Over-view of the SourceForge.net User Community,2003. sourceforge.net/docman/display_doc.php?docid=9331&group=1.

[9] M. Pyne. TinyCAD. Open Source Project, 2002.tinycad.sourceforge.net.

[10] Rational Software Corporation. Rational Suite Enter-prise. Produktinformation, 2002. www.rational.com/products/entstudio/.

[11] A. E. K. Sobel. Computing Curricula – SoftwareEngineering Volume. sites.computer.org/ccse/know/SecondDraft.pdf, Dec. 2002.

[12] D. van Heesch. Doxygen Manual, Apr. 2003. www.doxygen.org/manual.html.

[13] A. Zeller and J. Krinke. Programmierwerkzeuge:Versionskontrolle - Konstruktion - Testen - Fehlersu-che unter Linux. dpunkt Verlag, Heidelberg, 2000.

Page 25: 5. Workshop Software Reengineering (WSR 2003)pi.informatik.uni-siegen.de/stt/23_2/01_Fachgruppenberichte/wsr2003.pdfSoftwaretechnik und 5.1.3 Reengineering und Wartung betrieblicher

Kontrollflußgraphen

13 Extraktion statischer Objekt-Prozess-Graphen

Thomas Eisenbarth, Rainer Koschke, Gunther VogelUniversität Stuttgart, Institut für Softwaretechnologie, Universitätsstraße 38, D-70569 Stuttgart,{eisenbarth,koschke,vogel}@informatik.uni-stuttgart.de

13.1 Statische Prozess-GraphenEine dynamische Spur (Trace) ist eine Aufzeichnung derwährend einer Programmausführung durchgeführten Ak-tionen. Dynamische Spuren sind abhängig von der Ein-gabe. Statische Spuren hingegen enthalten alle potenti-ell durchgeführten Aktionen einer beliebigen Ausführung,unabhängig von Eingaben. Eine statische Objektspur isteine statische Spur, die nur solche Anweisungen enthält,die sich auf ein bestimmtes Objekt beziehen. Da ein Pro-gramm prinzipiell unendlich viele statische Objektspurenbesitzen kann, werden Mengen von statischen Objekspu-ren durch statische Objekt-Prozesse zusammengefasst.Die Extraktion statischer Objekt-Prozesse ist eine Ba-sistechnologie, die eine Reihe von neuen Anwendun-gen ermöglicht, wie zum Beispiel die Unterstützung vonProgrammverstehen durch die Reduktion des zu unter-suchenden Quellcodes auf die wesentlichen Anweisun-gen (ähnlich wie Program Slicing), die Erkennung undValidierung von Protokollen, das Auffinden von Inter-aktionen zwischen Objekten (wie sie z.B. durch UML-Interaktionsdiagramme beschrieben werden) und die Be-stimmung der Testabdeckung von Testfällen hinsichtlichder verschiedenen Aufrufsequenzen von Schnittstellenele-menten einer Komponente.Objekte werden zur Laufzeit entweder implizit als Teileines Aktivierungsrecords einer Funktion oder explizitdurch Belegung von Speicher auf der Halde erzeugt. Auf-grund von Rekursion und Schleifen lässt sich die Men-ge der Objekte im Allgemeinen nicht statisch bestimmen.Deshalb wird jedem Objekt ein statisches Objekt zugeord-net, das gleichzeitig eine potentiell unendliche Menge vonObjekten repräsentiert. Für jede Deklaration einer Varia-blen und für jeden Aufruf einer Routine zur Speicherbe-legung existiert ein statisches Objekt, für das ein Objekt-Prozess-Graph aus dem Quelltext extrahiert werden kann.Abbildung 13.1 zeigt die verschiedenen Knoten und Kan-ten von Objekt-Prozess-Graphen. Jeder Objekt-Prozess-Graph enthält genau einen Start- und Final-Knoten fürden Programmstart und das Ende der Ausführung. Die Le-bensdauer von lokalen und globalen Variablen wird durchBegin-of-Lifetime und End-of-Lifetime Knoten angezeigt.Lesende und schreibende Zugriffe auf Variablen und Hal-denobjekte werden durch Read- und Write-Knoten reprä-sentiert.

Zugriff Lebensdauer vonVariablen

Routinen-Aufrufe

READ

WRITE

CALL

RETURN

ENTRY

BEGIN-OF-LIFETIME

END-OF-LIFETIME

Start-Knoten

Final-Knoten

Zusammenführung

...

Verzweigung

IntraprozeduralerKontrollfluß

Rückkehr von einerRoutine zum Aufrufer

Aufruf einer Routine

Abbildung 13.1. Objekt-Prozess-Graphen.Für Verzweigungen und Zusammenführungen von Kon-trollfluss existieren entsprechende Knoten. Call-Knotenrepräsentieren Aufrufe von Routinen. Entry- und Return-Knoten zeigen den Eintritt in eine Routine oder den Aus-tritt aus einer Routine an.Kanten in Objekt-Prozess-Graphen repräsentieren intra-prozeduralen und interprozeduralen Kontrollfluss.Abbildung 13.2 zeigt ein kleines Beispiel eines Objekt-Prozess-Graphen für ein Objekt vom Typ Stack, welchesdurch den Aufruf von init erzeugt wird. Die Funktionreverse legt neue Elemente auf dem Stack ab, die dannin main entnommen und gezählt werden.

int main () {int i = 0;Stack �s1 = init ();Stack �s2 = read ();reverse (s2, s1);do {pop (s1);i = i + 1; }

while (!is empty (s1));}void reverse(Stack �from,Stack �to) {while (!is empty (from))push (to,

pop (from));}

init

is_empty

CALL reverse

pop

ENTRY reverse

push

RETURN reverse

Abbildung 13.2. Objekt-Prozess-Graphen für das Ob-jekt, das durch den Aufruf von initerzeugt wird.

Page 26: 5. Workshop Software Reengineering (WSR 2003)pi.informatik.uni-siegen.de/stt/23_2/01_Fachgruppenberichte/wsr2003.pdfSoftwaretechnik und 5.1.3 Reengineering und Wartung betrieblicher

Die primitiven Zugriffsfunktionen des Stacks werden alsatomar angesehen. Die Zugriffe innerhalb dieser Funktio-nen sind deshalb nicht dargestellt.Würden weitere Zugriffeauf andere Objekte in den Quelltext eingebaut werden, sowürde sich an dem Objekt-Prozess-Graph nichts ändern.

13.2 AufrufpfadeFür die automatische Erkennung von Protokollen reicht dieUnterscheidung von statischen Haldenobjekten durch denentsprechenden Aufruf einer Speicher belegenden Funk-tion allein noch nicht aus. Falls der Aufruf innerhalb ei-ner Wrapper-Funktion eingebettet ist, können die erzeug-ten Objekte unterschiedliche Protokolle besitzen.

main malloc

read

init

Abbildung 13.3. Aufrufgraph

Abbildung 13.3 zeigt ein kleines Beispiel eines Aufruf-graphen. Hier existieren zwei Pfade, die von main zudem Aufruf der Speicherbelegungsroutine malloc füh-ren. Auf den Objekten, die durch die beiden unterschiedli-chen Pfade angelegt werden, werden unterschiedliche Ak-tionen ausgeführt. Die Aktionen der Routine readwerdenzum Beispiel nur dann ausgeführt, wenn auch der Aufruf-pfad über read führt.Eine Verfeinerung des ursprünglichen Objektbegriffs be-steht daraus, statische Objekte durch ihre Aufrufpfade zuunterscheiden. Hierzu wird in [EKV02] eine Methode vor-gestellt, die es dem Benutzer erlaubt, beliebige Sequen-zen von rekursiven Funktionsaufrufen durch reguläre Aus-drücke zu beschreiben.Eine weitere Methode, mit der es möglich ist, eine für dieProtokollerkennung interessante Menge von Haldenobjek-ten automatisch zu identifizieren, basiert auf dem Kon-zept des expandierten Aufrufgraphen. Dieser enthält Kno-ten für sämtliche nicht-zyklischen Pfade durch den Auf-rufgraphen, die mit dem initialen Aufruf an die Routi-ne main beginnen. Jeder Knoten des expandierten Auf-rufgraphen, dessen Pfad zu einer Speicherbelegung führt,wird zur Identifikation eines Objekts herangezogen. Wei-tere Einzelheiten zu dieser Methode werden in Bälde ver-öffentlicht.

13.3 Extraktion vonObjekt-Prozess-Graphen

Für Programme, die Zeiger verwenden, ist zunächst ei-ne Zeiger-Analyse notwendig, um alle potentiellen Refe-renzen auf das relevante Objekt zu bestimmen. Zeiger-Analysen werden in flusssensitive/-insensitive und mono-variante/polyvariante Analysen eingeteilt.Unsere Technik der Extraktion von statischen Spurenist unabhängig von der zu Grunde liegenden Zeiger-Analyse. Allerdings werden die extrahierten Objekt-Prozess-Graphen umso genauer, je genauere Zeigeranaly-

sen verwendet werden. Die besten Ergebnisse werden miteiner flusssensitiven, polyvarianten Analyse erzielt.Sobald alle Referenzen auf das relevante Objekt bestimmtsind, kann eine Projektion des Kontrollflusses auf die re-levanten Anweisungen (jene, die sich auf das gegebeneObjekt beziehen) ermittelt werden. Die Projektion wird inzwei Phasen ermittelt. In der ersten Phase wird der Kon-trollflussgraph traversiert und Knoten für die Aktionen aufdem relevanten Objekt erzeugt. Die zweite Phase verbin-det die Knoten durch Kontrollflusskanten. In dieser Phasewerden zusätzlich noch weitere Knoten für Verzweigun-gen eingefügt, falls bestehende Knoten von einer Bedin-gung kontrollabhängig sind.

13.4 FallstudienErste Ergebnisse, die mit einem Werkzeug auf der Basis ei-ner flusssensitiven und polyvarianten Zeiger-Analyse nachWilson [Wil97] ermittelt wurden, zeigen, dass die extra-hierten Graphen im Vergleich zum ursprünglichen Kon-trollflussgraphen des Programms deutlich kleiner sind. Sowurde beispielsweise Concepts [Lin94], ein Programm zurformalen Begriffsanalyse, das aus etwa 8000 Zeilen C-Quellcode mit 143 Routinen besteht, analysiert. Der Kon-trollflussgraph enthält 21.410 Knoten mit 597 Funktions-aufrufen. Es existieren 74 Aufrufe von „malloc“ zur Be-legung von Haldenspeicher.Für die 549 lokalen und globalen Variablen wurdenObjekt-Prozess-Graphen extrahiert. Die mittlere Anzahlvon Knoten pro Graph betrug 22 (min: 5, max: 590).Es wurden insgesamt 770 unterscheidbare Halden-Objektegefunden. Die Prozess-Graphen der Haldenobjekte hatteneine mittlere Größe von 320 Knoten (min: 12, max:789).Auf einem PC mit Athlon XP 1700+ Prozessor und 1GBRAM unter Linux dauerte die Extraktion der Prozess-Graphen für die lokalen und globalen Variablen lediglich13 Sekunden. Für die Haldenobjekte wurden 197 Sekun-den benötigt, da oftmals der gesamte Kontrollflussgraphdurchsucht werden musste.Details über weitere Untersuchungen, bei denen auch eineflussinsensitive Analyse nach Steensgaard [Ste96] einge-setzt wird, werden in Kürze veröffentlicht.

Literaturverzeichnis

[EKV02] Thomas Eisenbarth, Rainer Koschke, and Gun-ther Vogel. Static trace extraction. pages 128–138, 2002.

[Lin94] Christian Lindig. Concepts 0.3e. Availa-ble at URL http://www.eecs.harvard.edu/ lin-dig/src/concepts.html, 1994.

[Ste96] Bjarne Steensgaard. Points-to analysis in almostlinear time. In Symposium on Principles of Pro-gramming Languages, pages 32–41, 1996.

[Wil97] R.P. Wilson. Efficient, Context-Sensitive Poin-ter Analysis. PhD thesis, Department of Electri-cal Engineering, Stanford University, December1997.

Page 27: 5. Workshop Software Reengineering (WSR 2003)pi.informatik.uni-siegen.de/stt/23_2/01_Fachgruppenberichte/wsr2003.pdfSoftwaretechnik und 5.1.3 Reengineering und Wartung betrieblicher

14 Strukturelle Analyse explizit fehlertoleranter Programme

Stefan Gossens, Mario Dal CinUniversät Erlangen-Nürnberg, GermanyInstitut für Informatik, Lehrstuhl 3 (Rechnerarchitektur){gossens,dalcin}@informatik.uni-erlangen.de

Zusammenfassung

Explizit fehlertolerante Programme zeichnen sich durchproaktive Massnahmen aus, die deren Robustheit und Kor-rekturfähigkeit gegenüber Fehlern sichern sollen. In ei-ner gewollt fehlertoleranten Anwendung wird meistens ei-ne von mehreren Standardachitekturen realisiert. Durchgraphbasierte Methoden kann man aus bestehenden An-wendungen eine Kontrollflussabstraktion bezüglich derArchitektur gewinnen. Diese kann dann zur strukturel-len Analyse der implementierten Fehlertoleranzarchitekturoder zur Bestimmung numerischer Zuverlässigkeitsgrös-sen genutzt werden. Dieser Artikel skizziert die zugrunde-liegenden Ideen und Ansätze.Stichworte:Fehlertolerante Programmierung, Analyse fehlertoleranterEigenschaften, explizit fehlertolerante Programmierung,Kontrollflussabstraktion

Eine wichtige Eigenschaft von Systemen in sicherheitskri-tischen Anwendungsbereichen ist die Robustheit und Feh-lertoleranz gegenüber Störungen. Im wesentlichen wer-den diese Eigenschaften durch Replikation der berechnen-den Komponenten gewährleistet (Redundanz), deren un-abhängige Ergebnisse zum Vergleich und gegebenenfallszur Korrektur genutzt werden.Man unterscheidet explizite Fehlertoleranz, bei der dieSoftware die Fehlertoleranz individuell nach den genann-ten Prinzipien aktiv absichert und transparenter Fehlerto-leranz, wo die gewünschten Eigenschaften durch die In-frastruktur, etwa ein Betriebssystem, gewährleistet wer-den [1]. Im Gegensatz zur transparenten Fehlertoleranzsind bei der expliziten Fehlertoleranz die fehlertolerantenEigenschaften eines Programmes in dessen Struktur fest-gelegt und so der Analyse zugänglich.Fehlertolerante Eigenschaften schlagen sich in charakteri-stischen Mustern des Kontrollflusses nieder. So sollte bei-spielsweise in einem System, das einen Einzelfehler erken-nen kann, stets nicht nur eine doppelte Werteberechnungstattfinden, sondern auch in jedem möglichen nachfolgen-den Ablaufpfad ein Vergleich der Ergebnisse stattfinden.Diese Strukturen bieten die Basis fuer ein Reengineeringvorhandener Software mit dem Ziel, Robustheits- und Feh-lertoleranzeigenschaften zu bestimmen und zu klassifizie-ren.Die fehlertolerante Struktur ist in Unterstrukturen desKontrollflussgraphen definiert, die sich aus der Redukti-on des Graphen auf eine spezielle Menge von Knotenty-pen und deren Erreichbarkeit untereinander ergeben. Die-se Unterstrukturen kann man durch Kontrollflussabstrakti-

on [2] gewinnen. Dabei wird der Kontrollflussgraph einesSystems anhand einer bestimmten Klasse von Knoten ab-strahiert. Das Ergebnis dieses Arbeitsschritts ist ein Graph,der die transitive Erreichbarkeit der gewählten Knotenrepräsentiert. Für die Architekturanalyse sind Knotenty-pen wie Bedingungsberechnungen,Bedingungsprüfungen,Abstimmungen (Votingfunktionen) etc. interessant.

Anhand dieser Unterstrukturen kann man die untersuch-te Software bezüglich bekannter Muster [1] des fehler-toleranten Entwurfs (Multi Version Programming, Reco-very Block Scheme, Conversations, . . . ) kategorisieren,die üblicherweise ein Redundanzkonzept zur Sicherstel-lung der fehlertolerierenden Eigenschaften einsetzen. Die-se Kategoriesierung führt auf Grapherkennungsprobleme,wenn sie direkt durchgeführt werden soll. Ist es allerdingsmöglich, eine Architektur durch Pfadbedingungen zu be-schreiben, ist eine effiziente Analyse möglich. In diesemFall kann die Erkennung durch Pfadverfolgung oder Mo-del Checking realisiert werden.

Weiterhin lassen sich numerische Kenngrössen der unter-suchten Programme bestimmen. Sind etwa für die ein-zelnen Elemente des Kontrollflusses Ausfallwahrschein-lichkeiten bekannt, so lässt sich eine Gesamtwahrschein-lichkeit für das Funktionieren des Systems aus den er-mittelten Unterstrukturen berechnen. Diese Analyseme-thode funktioniert analog zur Fehlerbaumanalyse (Über-blick z.B. in [3]) und eignet sich zur Berechnung verschie-dener Zuverlässigkeitsparameter. Je nach gewählter Kno-tenmenge, anhand derer die Abstraktion stattfindet, lassensich differenziert Zuverlässigkeitsparameter berechnen, et-wa auch für ausgewählte Berechnungspfade.

Ein dritter Analyseansatz ist der Nachweis gewünsch-ter Sicherheitseigenschaften des Systems durch Analyseder Fehlertoleranzstruktur. Will man beispielsweise absi-chern, dass ein Ergebnis nie ohne eine vorherige Prüfungdurch Abstimmung (Voting) freigegeben werden kann, soist diese Eigenschaft durch das Nichtvorhandensein einesentsprechenden Kontrollflusspfades bewiesen. Hier bietetsich neben einer direkten Analyse durch Traversierungauch das aus anderen Bereichen bekannte Model Checkingals Methode an, die durch keine bestimmte Traversie-rungsstrategie festgelegt ist. Die Methode dieses Anwen-dungsgebietes ähnelt der Architekturerkennung, ist aber inder Regel effizienter zu realisieren, da üblicherweise nureinzelne Eigenschaften geprüft werden müssen statt eindefinierender Satz von Regeln.

Die Analyse bestehender Software nach den vorgestell-ten Konzepten verspricht nicht nur eine nachgeschalte-te Klassifizierung und Bewertung bereits fertiggestellter

Page 28: 5. Workshop Software Reengineering (WSR 2003)pi.informatik.uni-siegen.de/stt/23_2/01_Fachgruppenberichte/wsr2003.pdfSoftwaretechnik und 5.1.3 Reengineering und Wartung betrieblicher

Software, sondern auch ein Mittel zur Vermeidung vonEntwurfs- und Implementationsfehlern. Da die Analyseauf Sicherheitseigenschaften im wesentlichen automati-siert durchgeführt werden kann, ist der Prüfaufwand ge-ring und kann Gewissheit bringen, dass gewisse Sicher-heitsprinzipien nicht durch Fehler bei Implementation oderEntwurf unterlaufen werden.

Literaturverzeichnis

[1] M. Dal Cin: Zur explizit fehlertoleranten Program-mierung von Parallelrechnern, in Proc. PARS Work-shop, Gesellschaft für Informatik, S. 47-55, Mün-chen, April 1989.

[2] S. Gossens: Enhancing Validation with BehaviouralTypes, in Proc. High-Assurance System EngineeringSymposium HASE 2002. IEEE, S. 201-208, Tokio,Japan, Oktober 2002.

[3] W. G. Schneeweiss: Die Fehlerbaum-Methode,LiLoLe-Verlag, Hagen, 1999.

Toolintegration

15 A-posteriori-Integration verfahrenstechnischerEntwicklungswerkzeuge

Thomas HaaseRWTH Aachen, Lehrstuhl für Informatik III, Ahornstr. 55, D-52074 Aachen,[email protected]

15.1 Einführung

Der SFB 476 IMPROVE beschäftigt sich mit der infor-matischen Unterstützung verfahrenstechnischer Entwick-lungsprozesse zur Konstruktion einer verfahrenstechni-schen Anlage auf Ebene des Basic Engineering [NW99].Hierbei verfolgt der SFB den Ansatz, existierende ver-fahrenstechnische Entwicklungswerkzeuge (z.B. Fließbild-werkzeuge für den Grobentwurf der zu entwickelnden An-lage, 1D- und 3D-Simulatoren zur Simulation von aus demFließbildwerkzeug abgeleiteten mathematischen Modellender Anlage, Tabellenkalkulation zur Kostenschätzung derAnlage, . . . ) a-posteriori zu integrieren und miteinanderzu verschalten.Auf den technischen Werkzeugen aufbauend werden neueinformatische Unterstützungskonzepte (feingranulare Pro-zessunterstützung; feingranulare Integratoren; informelle,multimediale Kommunikation; mittelgranulares Prozess-, Produkt- und Ressourcen-Management) entwickelt, diedie Funktionalität der gegebenen technischen Werkzeugeerweitern [NSW03]. Die Werkzeuge zur Realisierung derneuen Unterstützungsfunktionalitäten werden als erweiter-te Werkzeuge bezeichnet und werden ebenfalls miteinan-der verschaltet. Diese Verschaltung wird mit dem Termi-nus der synergetischen Verschränkung beschrieben.Bei der synergetischen Verschränkung der erweitertenWerkzeuge liegt zum Teil wiederum eine a-posteriori-Integrationsthematik vor, da die Werkzeuge an verschiede-nen Lehrstühlen mit unterschiedlichen Implementierungs-

resp. Generierungsmechanismen entstanden. Eine Anglei-chung dieser Mechanismen wäre aus Aufwandsgründenunrealistisch.Die Gesamtheit der technischen und erweiterten Werkzeu-ge und deren synergetischer Verschränkung ergibt danndie erweiterte Arbeitsumgebung für einen verfahrenstech-nischen Entwickler.

15.2 Wrapper-Klassifikation

Zur Einbindung der angesprochen technischen und erwei-terten Werkzeuge in die Arbeitsumgebung werden Wrap-per eingesetzt. Langfristiges Ziel des SFB bzgl. solcherWrapper ist es, die Konstruktion der Wrapper durch geeig-nete Werkzeuge zu unterstützen und sie letztendlich (semi-)automatisch zu generieren.Dazu wurden in einem ersten Schritt die im SFB-Szenariobetrachteten Werkzeuge hinsichtlich ihrer Integrationsfä-higkeit klassifiziert. Beispiele für Klassifikationsmerkmalesind: (a) die Systemstruktur (interaktives Werkzeug oderBatch-Werkzeug), (b) die Verfügbarkeit (Quelltext vorhan-den oder nicht) oder (c) die statischen und/oder dynami-schen Zugriffsmöglichkeiten auf das Werkzeug (Komman-dozeilenparameter vs. Programmierschnittstelle).Anschließend wurde ein Wrapper in verschiedene Kom-ponenten unterteilt (siehe Abbildung 15.2), d.h. bei ei-nem Wrapper handelt es sich nicht um eine monolithi-sche Komponente, sondern vielmehr um ein softwaretech-

Page 29: 5. Workshop Software Reengineering (WSR 2003)pi.informatik.uni-siegen.de/stt/23_2/01_Fachgruppenberichte/wsr2003.pdfSoftwaretechnik und 5.1.3 Reengineering und Wartung betrieblicher

Abbildung 15.1. Werkzeugunterstützung zur interaktiven Exploration von COM-Schnittstellen

nisches Teilsystem, dessen Bestandteilen verschiedenarti-ge Aufgaben zugeordnet sind. Die Gesamtfunktionalitätdes Wrappers ergibt sich aus dem Zusammenspiel dieserBestandteile.

Semantischer Wrapper(materialisiert / berechnet)

Technischer Wrapper(lesend / schreibend)

Werkzeug-spezifischefeingranulare Schnittstelle

allgemeinegobgranulare Schnittstelle

Homogenisierungs-WrapperSichtenbildungs-Wrapper

Abbildung 15.2. Wrapper-Teilsystem

Auf einer untersten Schicht lassen sich die beiden fol-genden Wrapper-Typen unterscheiden: (1) grobgranularetechnische Wrapper (Black-Box-Sicht auf das Werkzeug)und (2) feingranulare technische Wrapper (White-Box-Sicht auf das Werkzeug). Ein weiteres, orthogonales Dif-ferenzierungsmerkmal ist, ob ein lesender und/oder schrei-bender Zugriff auf das Werkzeug gegeben ist. Die Schnitt-stellen der technischen Wrapper ermöglichen einen orts-und implementierungstransparenten Zugriff auf das Werk-zeug.

Die Schnittstellen der technischen Wrappers wer-den von den semantischen Wrappern genutzt. Hiergibt es die folgende Differenzierung: (1) (Funktions-und/oder Daten-)Homogenisierungs-Wrapper und (2)

Sichtenbildungs-Wrapper.Man kann weiterhin unterschei-den, ob die homogene Sicht auf das Werkzeug (i) nur be-rechnet, (ii) berechnet und anschließend materialisiert oder(iii) eine Mischform aus (i) und (ii) realisiert wird. Seman-tische Wrapper offerieren einen Zugriff auf die Funktionenund Daten eines Werkzeuges auf einem einheitlichen se-mantischen Niveau.

15.3 Werkzeugunterstützung

Für Anwendungen, die über eine COM-Schnittstelle ver-fügen, wurde als eine erste Werkzeugunterstützung zurKonstruktion der Wrapper ein Werkzeug zur interaktivenExploration von COM-Schnittstellen implementiert (sieheAbbildung 15.1).Die Komponenten einer COM-Schnittstelle werden durcheine sogenannte Type-Library textuell beschrieben. AufBasis einer solchen Type-Library erfasst das Werkzeugzunächst die statische Syntax und Semantik der be-trachteten Programmierschnittstelle durch das Parsen derentsprechenden Type-Library. Anschließend können die-se Informationen u.a. graphisch, in Form von UML-Klassendiagrammen, visualisiert werden.Des weiteren bietet das Werkzeug die Möglichkeit, dieProgrammierschnittstelle interaktiv zur Laufzeit der An-wendung zu explorieren. Dazu wird die Anwendung übereine generische Operation der Schnittstelle gestartet, d.h.die initiale Komponente der Schnittstelle wird instanti-iert und eine Referenz auf das erzeugte COM-Objektwird zurückgegeben. Auf Grundlage der vorhandenen sta-tischen Informationen generiert das Werkzeug eine gra-phische Benutzungsoberfläche zum Abfragen und Ändern

Page 30: 5. Workshop Software Reengineering (WSR 2003)pi.informatik.uni-siegen.de/stt/23_2/01_Fachgruppenberichte/wsr2003.pdfSoftwaretechnik und 5.1.3 Reengineering und Wartung betrieblicher

der Attributwerte und zum Aufrufen der Methoden desObjektes. Attributwerte oder die Rückgabewerte von Me-thodenaufrufen können wiederum eine Referenz auf ei-ne Instanz einer Komponente sein, welche wiederum übereine entsprechend generierte Oberfläche inspiziert wer-den kann. Die sich ergebenen Sequenzen von Benutzerin-teraktionen werden durch das Werkzeug aufgezeichnetund können anschließend ebenfalls, in Form von UML-Sequenzdiagrammen, graphisch visualisiert werden.

15.4 Ausblick

Die auf die oben beschriebene Art gewonnenen statischenund dynamischen Informationen bilden die Basis für dieSchnittstellen der technischen Wrapper. Zukünftige Arbei-ten sollen klären, wie diese Informationen genutzt werdenkönnen, die Schnittstellen der semantischen Wrapper zu

spezifizieren, z.B. die Komposition der originären Opera-tionen der Schnittstelle zu semantisch höherwertigen Ope-rationen.

Literaturverzeichnis

[NSW03] M. Nagl, R. Schneider, and B. Westfech-tel. Synergetische Verschränkung bei der A-posteriori-Integration von Werkzeugen. InM. Nagl and B. Westfechtel, editors, Modelle,Werkzeuge und Infrastrukturen zur Unterstüt-zung von Entwicklungsprozessen, pages 137–154. Wiley-VCH, 2003.

[NW99] M. Nagl and B. Westfechtel, editors. Integrati-on von Entwicklungssystemen in Ingenieuran-wendungen: substantielle Verbesserungen derEntwicklungsprozesse. Springer, 1999.

gemeinsame Sitzung mit dem Workshop der GI-Fachgruppe 2.1.4Programmiersprachen und Rechenkonzepte

16 Werkzeuggestützte Qualitätsuntersuchungen: Ein Erfahrungsbericht

Markus Bauer, Olaf SengForschungszentrum Informatik Karlsruhe (FZI), Haid-und-Neu-Straße 10-14, 76131 Karlsruhe,{bauer|seng}@fzi.de

16.1 Einführung

Qualitätsuntersuchungen (Softwareassessments) werdendurchgeführt, um unter Einsatz von ReverseEngineeringTechniken die innere Qualität eines Systems zu untersu-chen. Die innere Qualität eines Systems wird durch die-jenigen Eigenschaften bestimmt, die der Entwickler wahr-nimmt, wie z.B. Erweiterbarkeit, Wiederverwendbarkeit,etc. Für Softwareunternehmen ist es von großem Interes-se, eine quantitative Aussage über die innere Qualität ih-rer Systeme machen zu können, da diese Entwicklungsauf-wand und Wartbarkeit der Systeme beeinflusst und somitdie anfallenden Kosten bestimmt. Zudem können kritischeStellen identifiziert werden. Solche Stellen können für Re-strukturierungsmaßnahmen, Testfälle und Dokumentationbilden.

16.2 Softwareuntersuchungen – Technikenund Vorgehensweise

Zur Durchführung der Qualitätsuntersuchung werden ausdem Bereich Software-Reengineering bekannte Technikeneingesetzt [FAM99] [BC01]. Dazu gehört an erster Stelledie sogenannte Faktenextraktion. Hierbei wir mit Hilfe von

Compilerbautechnolgien und graphtheoretischen Konzep-ten ein Designdatenbank des Systems erstellt, auf der wei-tere Analysetechniken aufsetzen. Visualisierungstechnikenkönnen das Verständnis von Architekturen und Struktu-ren erleichtern und erlauben z.B. eine einfache Überprü-fung geschichteter Architekturen. Mit Hilfe von Abstrak-tionstechniken kann die Information in der Designdaten-bank verfeinert werden, in dem z.B. bei prozeduralen Sy-stem Methoden mit Datentypen zu einer Einheit gruppiertwerden. Mit Hilfe von Software-Heuristiken und -Metrikenkönnen z.B. Schwachstellen gesucht und Entwurfsrichtli-nien überprüft werden [Ciu99].

Der Ablauf werkzeuggestützter Qualitätsuntersuchungengliedert sich in die folgenden Schritte, für die insgesamtmindestens fünf Arbeitstage veranschlagt werden müssen:

1. Zieldefinition: Zuerst muss mit den Entwicklernzusammen geklärt werden, welche Ziele das As-sessment verfolgen soll und welche Analysen über-haupt durchgeführt werden sollen.

2. Faktenextraktion und Analyse: Zu Beginn der Ana-lyse steht die (oft von Problemen begleitete) Fak-tenextraktion, zudem können einfach und schnelldurchzuführende Analysen erste Einschätzungen

Page 31: 5. Workshop Software Reengineering (WSR 2003)pi.informatik.uni-siegen.de/stt/23_2/01_Fachgruppenberichte/wsr2003.pdfSoftwaretechnik und 5.1.3 Reengineering und Wartung betrieblicher

über das System vermitteln.3. Zwischenergebnisse: Die ersten Analyseergebnisse

sollten möglichst bald, idealerweise am zweiten Tagdes Assessments gemeinsam mit einem oder mehre-ren Entwicklern diskutiert werden.

4. Verfeinerte Faktenextraktion und Analyse: Die Fak-tenextraktion kann verfeinert und auf weitere Sy-stemteile ausgeweitet werden.

5. Abschlussworkshop: Die Ergebnisse sollten mög-lichst vielen Entwicklern z.B. in Form einer Präsen-tation gezeigt werden, um sie zu diskutieren und zubewerten.

Abbildung 16.1. Techniken und Werkzeuge

16.3 Fallstudie und Ergebnisse

Bei der von uns untersuchten Fallstudie handelt es sich umein komplett in C geschriebenes Datenbanksystem. Wirkonzentrierten unsere Analysen auf den Server-Teil desSystems (Umfang: 1 Million LOC, 28 Subsystemen, 1347Dateien).Zuerst wurden die grobgranularen Einheiten des Systems– in diesem Fall durch Verzeichnisse gegebene Subsyste-me – analysiert. Auf dieser Ebene wurden Architektur-richtlinien überprüft. Weiterhin konnten durch Kombinati-on von Metriken wie LOC und McCabe die komplexestenSubsysteme identifiziert werden, die im weiteren Verlaufder Analysen besonders intensiv untersucht werden soll-ten. Einige der Subsysteme zeichnen sich durch eine be-sonders hohe Komplexität aus. Diese Subsysteme warenjedoch gut gekapselt (Analyse der Kopplung), so dass diehohe Komlexität kein Problem darstellt.Auf der darunterliegenden Abstraktionsebene wurden inden besonders komplexen Subsystemen die vorhande-nen Datentypen untersucht, indem Daten und zugehörigeFunktionen zu abstrakten Datentypen gruppiert wurden.Dies war in diesem System über Heuristiken (Namens-konventionen, Parametertypen der Funktionen) möglich,da die Programmierer einen objektorientierten Program-mierstil verwendet hatten. Auf diesen abstrakten Datenty-pen konnten dann ebenfalls Komplexitäts- und Kopplungs-analysen angewandt werden. In Abbildung 16.2 sind die

Kopplungswerte für Paare von abstrakten Datentypen zusehen.

Abbildung 16.2. Kopplung abstrakter Datentypen

Manche der Datentypen sind äußerst komplex und zeich-nen sich durch eine hohe Kopplung zu anderen Daten-typen aus. Da sie aber zentrale und komplexe Konzeptewie Transaktionen repräsentieren, kann dies wahrschein-lich nicht vermieden werden.Auf der untersten Abstraktionsebene können Analysen aufMethodenebene ausgeführt werden. Hierzu gehören z.B.die Suche nach unerwünschten Rekursionen oder Kom-plexitätsberechnungen. In dieser Fallstudie konnten – imGegensatz zu Mozilla – keine langen Rekursionsketten ge-funden werden.

16.4 Praxiserfahrungen

Im Verlaufe zahlreicher durchgeführter Softwareas-sessments konnten wir einige Erfahrungen sammeln, überdie wir im Folgenden berichten wollen.

Hindernisse

Die Durchführung von Softwareassessments kann durcheine Reihe von Hindernissen erschwert werden.

� Zunächst behindert die Skepsis (“Hilfe, meine Lei-stung wird begutachtet!”) der Entwickler die Durch-führung der Softwareassessments. Deren Know-How ist für erfolgreiche Assessments jedoch vongroßer Bedeutung (Zieldefinition, Interpretation derAnalyseergebnisse). Abhilfe schaffen hier Kurzprä-sentationen von Zwischenergebnissen, in denen denEntwicklern Potenzial und Nutzen der Untersuchun-gen demonstriert werden.

� Defizite auf Werkzeugebene: Werkzeuge zur Fak-tenextraktion kommen oft mit industriellem Codenicht zurecht. Sie scheitern häufig an unvollstän-digem Code, Makros und speziellen Programmier-sprachendialekten. Zudem bereitet die große Mengean Rohdaten (Fakten) Probleme. Die meisten Analy-sewerkezeuge verarbeiten große Datenmengen nurunzuverlässig, zudem bieten nur wenige Werkzeu-ge Abstraktionsmechanismen zur Reduktion der Da-tenflut, die die Analysten auswerten müssen.

Page 32: 5. Workshop Software Reengineering (WSR 2003)pi.informatik.uni-siegen.de/stt/23_2/01_Fachgruppenberichte/wsr2003.pdfSoftwaretechnik und 5.1.3 Reengineering und Wartung betrieblicher

� Verfahren zur automatisierten Identifikation vonQualitätsmängeln können nur Hinweise auf poten-zielle Schwachstellen liefern. Diese müssen dannvon Analysten anhand des Quelltextes des Systemsuntersucht und bewertet werden. Schwierigkeitenbereiten in diesem Zusammenhang der Zeitmangelwährend der Assessments und ggf. die mangelndeErfahrung der Analysten in der Anwendungsdomä-ne des Systems.

Nutzen

Insbesondere die Workshops zur Präsentation und Diskus-sion der Analyseergebnisse mit den Entwicklern zeigenjedoch, dass Softwareassessments von Auftraggebern undEntwicklern überwiegend positiv bewertet werden. Nebendem eigentlichen Ziel, objektive Aussagen über die inne-re Qualität der Software zu bekommen, lassen sich einigeweitere positive Effekte identifizieren:

� Schon im Verlaufe der Abschlussworkshops beginntin der Regel eine ausführliche Diskussion der Ent-wickler über Softwarequalität und über möglicher-weise verbesserungsbedürftige Teile des Systems.Häufig entsteht so, motiviert durch die Analyseer-gebnisse, ein verbessertes Qualitätsbewusstsein.

� Entwickler interessiert oft der Vergleich mit ande-ren Softwaresystemen. Externe Analysten könnenhierzu leichter Aussagen machen, obgleich die Ver-gleichbarkeit von Softwaremaßen nur schwer zu ge-währleisten ist: Anwendungsdomäne, Programmier-sprache und -stil beeinflussen die Messwerte maß-geblich.

16.5 Schlussbemerkung

In diesem Papier haben wir gezeigt, dass mit werkzeug-gestützten Qualitätsuntersuchungen quantitive Aussagenüber die innere Qualität eines Softwaresystems gemachtwerden können. Wir haben in diesem Papier Nutzen undHindernisse solcher Assessments aufgezeigt. Hinsichtlichder Hindernisse erhoffen wir uns insbesondere für den Be-reich der Werkzeugunterstützung in Zukunft einige Ver-besserungen. Das FZI arbeitet mit verschiedenen Partnernim Rahmen der Forschungsprojekte COMPOBENCH undQBENCH an diesen Themen.

Literaturverzeichnis

[BC01] BAUER, MARKUS und OLIVER CIUPKE: Ob-jektorientierte Systeme unter der Lupe. in Pro-ceedings of the third German Workshop onSoftware-Reengineering. Universität Koblenz-Landau, Institut für Informatik, 2001.

[Ciu99] CIUPKE, OLIVER: Automatic Detection of De-sign Problems in Object-Oriented Reenginee-ring. in Technology of Object-Oriented Langua-ges and Systems - TOOLS 30. IEEE ComputerSociety, 1999.

[FAM99] FAMOOS PROJEKTTEAM: The FAMOOSObject-Oriented Reengineering Handbook.Technischer Bericht, Forschungszentrum In-formatik, Karlsruhe, Software CompositionGroup, University of Berne, 1999.

17 (Linear) Algebra for Program Analysis

Markus Müller-OlmFernUniversität Hagen, LG Praktische Informatik V, 58084 Hagen, GermanyOn leave from Universität Dortmund, [email protected]

Helmut SeidlUniversität Trier, FB 4-Informatik, 54286 Trier, Germany, [email protected]

This talk reported on onging research in which we usetechniques from algebra and linear algebra to constructhighly precise analysis routines for imperative programsor program fragments. We are interested in programs thatwork on variables taking values in some fixed ring or field�, e.g., the integers or the rationals. Our analyses pre-cisely interpret assignment statements with affine or poly-nomial right hand side and treat other assignment state-

ments as well as guarded branching statements conserva-tively as non-deterministic statements. More specifically,we have constructed

1. an interprocedural analysis that determines for everyprogram point of an affine program all valid affinerelations1;

1 An affine relation is a condition of the form �0 �∑�

��1 ���� � 0, where �0� � � � ��� � � are constants from the underlying field and �1� � � � ��� are theprogram variables. A relation is valid at a program point, if it holds whenever control reaches that program point.

Page 33: 5. Workshop Software Reengineering (WSR 2003)pi.informatik.uni-siegen.de/stt/23_2/01_Fachgruppenberichte/wsr2003.pdfSoftwaretechnik und 5.1.3 Reengineering und Wartung betrieblicher

2. a generalization of this analysis to polynomial re-lations of bounded degree2 and to affine programswith local variables; and

3. an intraprocedural analysis that decides validity ofpolynomial relations in polynomial programs.

The running time of analysis 1 and 2 is linear in the sizeof the program and polynomial in the number of programvariables. For analysis 3 we have a termination guaran-tee but do not know an upper complexity bound. Theseanalyses have many potential applications, because anal-ysis questions can often be coded as affine or polynomialrelations easily. Some obvious examples are:

� � is a constant of value � � � at a program point �iff the affine relation � �� � 0 is valid at �;

� � and � have always the same value at � iff the affinerelation � � � � 0 is valid at �; and

� � only takes values in the set ��1� � � � ����� � iff thepolynomial relation �� ��1� � � � � � �� ���� is valid.

Preliminary results of this line of research can be found inthe references.

Bibliography

[1] M. Müller-Olm. Variations on Constants. Habilita-tionsschrift, Fachbereich Informatik, Universität Dort-mund, 2002.

[2] M. Müller-Olm and H. Seidl. Polynomial constantsare decidable. In M. Hermenegildo and G. Puebla, ed-itors, SAS 2002 (Static Analysis of Systems), volume2477 of Lecture Notes in Computer Science, pages 4–19. Springer, 2002.

[3] M. Müller-Olm and H. Seidl. Computing interpro-cedurally valid relations in affine programs. Techni-cal report, Universität Trier, Fachbereich 4-Informatik,2003.

18 Verstehen dynamischer Programmaspekte mittelsSoftware-Instrumentierung1

Christoph Steigner, Jürgen WilkeUniversität Koblenz-Landau, Postfach 201 602, D-56016 Koblenz{steigner,wilke}@uni-koblenz.de

Abstract

Die Performance-Analyse und die dynamische Analysezum Zwecke des Programmverstehens verfolgen im Kernein gemeinsames Ziel: Beide Disziplinen möchten Ein-sicht in das dynamische Verhalten von Programmen ge-winnen. Laufzeitdaten, die im Rahmen der Performance-Analyse erhoben werden, können daher auch für das Ver-stehen dynamischer Programmaspekte von Interesse sein.Da die Performance-Analyse gegenüber der dynamischenProgrammanalyse auf eine wesentlich längere Traditionzurückblickt, bietet es sich an, etablierte Techniken undWerkzeuge der Performance-Analyse auf ihre Verwendbar-keit hinsichtlich des Verstehens dynamischer Programmas-pekte zu untersuchen. Dieser Beitrag stellt das Performan-ce-Analyse-Tool CoSMoS vor und diskutiert, inwieweit dievon CoSMoS aufgezeichneten Daten für das Verstehen dy-namischer Programmaspekte nutzbar sind.

18.1 Einführung

Um ein Programm zu verstehen, kommen – abgesehenvom Studium der Programmdokumentation – hauptsäch-lich zwei Vorgehensweisen in Betracht: die Analyse desQuelltexts (statische Analyse) und die Analyse von Lauf-zeitdaten, die bei Programmausführungen gewonnen wur-den (dynamische Analyse). Die Forschung im Bereich desSoftware Reengineering hat sich lange auf die statischeAnalyse konzentriert. Erst in jüngerer Vergangenheit wur-de erkannt, dass das Studium des dynamischen Verhaltensvon Programmen wertvolle Erkenntnisse liefern kann, dieaus der Quelltextanalyse nicht zu erschließen sind [1].

Eine systematische Gewinnung von Laufzeitdaten ist oh-ne geeignete Werkzeugunterstützung nicht möglich. Dasolche Werkzeuge auch für die Performance-Analyse vonProgrammen essentiell sind und dort schon seit langer Zeiteingesetzt werden, liegt es nahe, deren Verwendbarkeit fürdie Zwecke der dynamischen Programmanalyse zu unter-suchen. Im Folgenden stellen wir den Applikationsmonitor

2 A polynomial relation is a condition of the form ���1� � � � ��� � � 0 where ���1� � � � ��� � is a multi-variate polynomial in �1� � � � ��� over �. Apolynomial relations is bounded by � � IN if the sum of exponents of every monomial in � is less than or equal � .

1 Die in diesem Papier dargestellten Forschungsarbeiten wurden teilweise durch die Stiftung Rheinland-Pfalz für Innovation gefördert

Page 34: 5. Workshop Software Reengineering (WSR 2003)pi.informatik.uni-siegen.de/stt/23_2/01_Fachgruppenberichte/wsr2003.pdfSoftwaretechnik und 5.1.3 Reengineering und Wartung betrieblicher

des Performance-Analyse-Werkzeugs CoSMoS vor. Wirwerden zeigen, dass die Laufzeitdaten, die von dem Mo-nitor aufgezeichnet werden, direkt für die Rekonstruktiondes Aufrufgraphen der vermessenen Programmausführungverwendet werden können.

18.2 Der CoSMoS-Applikationsmonitor

Das Performance-Analyse-System CoSMoS2 besteht imKern aus drei eigenständigen Monitoring-Komponenten,die Daten auf unterschiedlichen Systemebenen aufzeich-nen [2]. Die für die Datenerfassung auf Applikations-ebene zuständige Komponente ist der Applikationsmoni-tor. Um Daten mit diesem Werkzeug gewinnen zu kön-nen, müssen in einem ersten Schritt zusätzliche Anwei-sungen (Messsensoren) in den Quelltext der Applikati-on eingebracht werden, die der Erhebung und Aufzeich-nung von Messdaten dienen. Dieser Schritt wird Quell-text-Instrumentierung genannt. Er kann wahlweise auto-matisch (Vollinstrumentierung) oder interaktiv (selektiveInstrumentierung) erfolgen.

Die eingefügten Messsensoren bestehen im Falle von CoS-MoS aus Aufrufen einer Messmethode. Jeder dieser Auf-rufe wird mit einer Nummer versehen, die die Quelltext-stelle, an der der Sensor eingefügt wurde, eindeutig iden-tifiziert. Bei jedem Aufruf zur Laufzeit erhebt der Sensoreinen Zeitstempel und speichert diesen zusammen mit sei-ner Sensornummer in einem Ereignisdatensatz ab. Die Fol-ge der Ereignisdatensätze (Ereignisspur) wird für jede se-quentielle Ausführungseinheit (Prozess bzw. Thread) ge-trennt gespeichert, so dass die Ereignisfolge jeder Ereig-nisspur streng sequentiell ist.

Meist werden Sensoren paarweise eingesetzt, wobei einSensor den Beginn und ein Sensor das Ende einer be-stimmten Programmaktivität markiert. Um etwa einen Me-thodenaufruf 3 zu instrumentieren, wird je ein Sensor vorund hinter den Aufruf gesetzt, so dass der Eintritt und dieRückkehr aus der Methode registriert werden.

Eine Alternative zur Instrumentierung des Aufrufs bestehtdarin, die Methode selbst zu instrumentieren. In diesemFall wird im Rumpf der Methode ein Sensor vor der erstenAnweisung eingefügt und je ein weiterer Sensor vor je-dem Ausgang der Methode. Die Instrumentierung des Me-thodenrumpfes ist insbesondere dann sinnvoll, wenn alleAufrufe der Methode erfasst werden sollen.

Nach der Einbringung der Sensoren in den Quelltext mussdie Applikation neu kompiliert und mit einer Bibliothek(Messbibliohek) gebunden werden, die den Objektcodeder Messmethode bereitstellt. Die so präparierte Applikati-on erzeugt beim nächsten Programmlauf die gewünschtenMessdaten.

18.3 Erstellung des Aufrufgraphen

Ein wesentlicher Mehrwert, der von der dynamischen Pro-grammanalyse erbracht werden kann, besteht darin, Auf-rufbeziehungen zwischen den Methoden einer Applikationnachzuweisen, die durch statische Analyse nicht ermittel-bar sind. Die Verwendung von Polymorphismus in objek-torientierten Sprachen, aber auch der Einsatz von Funkti-onszeigern in C-Programmen führen dazu, dass sich unterUmständen erst zur Laufzeit entscheidet, welche Methodean einer bestimmten Programmstelle tatsächlich aufgeru-fen wird.Die von den CoSMoS-Sensoren aufgezeichneten Ereignis-spuren erlauben eine Rekonstruktion des Aufrufgraphenfür den vermessenen Programmlauf. Voraussetzung ist ei-ne Instrumentierung aller Methodenrümpfe. Die Datenauf-zeichnung erfolgt dadurch nicht beim Aufrufer, sondernbeim Aufgerufenen, so dass die Identifikation des Aufge-rufenen grundsätzlich gewährleistet ist.Wurden sowohl der Aufrufer als auch der Aufgerufene in-strumentiert, sind beide aus der Ereignisspur an Hand derZeitstempel eindeutig identifizierbar: seien ��1 und ��2

der Eintritts- bzw. der Austrittszeitstempel eines Aufrufsder Methode � und seien ��1 und ��2 die entsprechen-den Zeitstempel eines Aufrufs der Methode � und seiweiterhin � von � aufgerufen worden, so muss gelten:��1 � ��1 � ��2 � ��2 . Wegen der Sequentialität der Er-eignisse in einer Ereignisspur gilt aber auch die Umkeh-rung, d.h. aus der zeitlichen Ordnung der Methodenein-und -austrittsereignisse lässt sich die Aufrufbeziehung her-leiten. Allerdings ist zu beachten, dass die Zeitinformationkeinen Rückschluss erlaubt, ob � von � direkt aufgerufenwurde. Sei � eine Methode einer (nicht instrumentierten)Fremdklasse bzw. -bibliothek, so ist der indirekte Aufruf�� � � � vom direkten Aufruf �� � an Hand derEreignisspur nicht zu unterscheiden. Die Erfassung vonAufrufen solcher Fremdmethoden ist allerdings prinzipiellmöglich, indem neben den Methodenrümpfen zusätzlichalle Methodenaufrufe instrumentiert werden.4

Zu beachten ist ferner, dass es bei Programmiersprachenund -umgebungen, die eine asynchrone Unterbrechung derProgrammausführung erlauben, zur Herleitung falscherAufrufbeziehungen kommen kann. Trifft beispielsweise ineinem C-Programm während der Bearbeitung einer Me-thode � ein Signal ein, welches zur Ausführung eines (in-strumentierten) Signal-Handlers � führt, legen die Zeitin-formationen der Ereignisspur fälschlicherweise nahe, dass� von � aufgerufen wurde.Für die Berechnung des Aufrufgraphen aus den Zeitdateneiner Ereignisspur implementierten wir das C-Programmmkcallgraph. Abbildung 18.1 zeigt einen Ausschnittdes Aufrufgraphen, der aus der Ereignisspur einer Aus-führung des Programms mkcallgraph selbst gewonnenwurde. Der Visualisierung des Graphen wurde mit dem

2 Coblenz Software Monitoring System3 Mit dem Begriff Methode bezeichnen wir im Folgenden sowohl Methoden objektorientierter Sprachen als auch Prozeduren und Funktionen proze-

duraler Sprachen.4 Die automatische Instrumentierung aller Methodenaufrufe einer Applikation wird derzeit von CoSMoS allerdings noch nicht unterstützt.

Page 35: 5. Workshop Software Reengineering (WSR 2003)pi.informatik.uni-siegen.de/stt/23_2/01_Fachgruppenberichte/wsr2003.pdfSoftwaretechnik und 5.1.3 Reengineering und Wartung betrieblicher

Programm dot aus dem graphviz-Paket [3] erzeugt.Neben der reinen Aufrufinformation sind durch farblicheUnterlegungen diejenigen Knoten markiert, die den amhäufigsten aufgerufenen Methoden entsprechen (gelb bzw.hellgrau), bzw. denjenigen Methoden, die die meiste Be-rechnungszeit verbraucht haben (rot bzw. dunkelgrau).

is_topcallee is_toptimekiller

dumpgraph_dot_format

get_mpoint

sql_query

query_mpoint_table query_event_tablequery_process_table

read_mpoints read_eventscheck_pid

build_callgraph output_call_graph

main

Abbildung 18.1. Aufrufgraph von mkcallgraph

18.4 Fazit

Die Technik der Software-Instrumentierung zur Gewin-nung von Laufzeitdaten auf Applikationsebene ist fürdie dynamische Programmanalyse gewinnbringend nutz-bar und wurde vereinzelt auch schon eingesetzt [4]. Wieam Beispiel des Applikationsmonitors des CoSMoS-Sy-stems gezeigt wurde, sind aus dem Bereich der Performan-ce-Analyse bereits fertige Werkzeuge verfügbar, die die-

se Technik implementieren und Laufzeitdaten liefern, diefür die Erzeugung von Aufrufgraphen direkt verwendbarsind. Aufgrund der hochgradig laufzeitoptimierten Sen-soren, die im Bereich des Performance-Monitoring un-abdingbar sind, gewährleisten solche Werkzeuge zudem,dass das Ablaufverhalten der instrumentierten Applikationgeringstmöglich verändert wird. Desweiteren werden oh-ne zusätzlichen Aufwand Zeitinformationen verfügbar, diedie Lokalisierung wichtiger (weil häufig genutzter) Metho-den unterstützen.

Literaturverzeichnis

[1] T.A. Corbi, “Program Understanding: Challenge forthe 1990’s,” IBM Research Report, 1989

[2] Ch. Steigner und J. Wilke, “Performance Tuning ofDistributed Applications with CoSMoS,” in Procee-dings of the 21st International Conference on Dis-tributed Computing Systems (ICDCS-21), Phoenix,Arizona, USA, April 2001.

[3] Stephen North et al., GraphViz – Graph VisualizationProject, http://www.graphviz.org.

[4] T. Richner, S. Ducasse, “Recovering High-LevelViews of Object-Oriented Applications from Staticand Dynamic Information,” in Proceedings of theInternational Conference of Software Maintenance(ICSM), Oxford, England, 1999.

Werkzeugbau

19 Erfahrungen bei der Entwicklung von Werkzeugen zum ReverseEngineering

Uwe Kaiserpro et con, Innovative Informatikanwendungen GmbH, Annaberger Straße 240, 09125 [email protected]

Seit 1994 entwickelt ”pro et con” Software-Werkzeuge fürdas Reverse Engineering und die Migration von kommer-ziellen Programmsourcen. Dieser Beitrag vermittelt einenÜberblick über die Werkzeuge und stellt resultierende Er-fahrungen ihrer Entwicklung zur Diskussion.

19.1 Compiler front-end’s

Für eine Reihe von Programmiersprachen wurden front-end’s entwickelt. Der Begriff ”front-end” besagt, daß derjeweilige Preprozessor der Programmiersprache sowie diesyntaktische und die statisch semantische Analyse reali-siert wurden, und daß die Abbildung in einen internen, ab-

strakten Syntaxbaum erfolgt. Die Liste existierender front-end’s besteht aus:

� PL/I,� COBOL,� NATURAL,� TAL (Tandem Application Language),� SQL,� C,� Java.

Im Beitrag kann nur ein Überblick vermittelt werden, Dis-kussionen von Details sprengen seinen Rahmen. Aus die-sem Grund folgen zu den einzelnen front-end’s nur kurze

Page 36: 5. Workshop Software Reengineering (WSR 2003)pi.informatik.uni-siegen.de/stt/23_2/01_Fachgruppenberichte/wsr2003.pdfSoftwaretechnik und 5.1.3 Reengineering und Wartung betrieblicher

Anmerkungen:

� Sie laufen auf den Betriebssystemen Windows (NT,2000, XP) und UNIX (Linux, Solaris).

� Verschiedene front-end’s laufen ebenso auf denHost-Rechnern, auf denen die jeweilige Sprache im-plementiert ist, z.B. PL/I und COBOL auf MVS,COBOL und TAL auf NonStop Servern von HP.

� Für COBOL und PL/I auf MVS werden Panva-let und Librarian unterstützt, embedded SQL, CICSund IMS werden analysiert.

� Die COBOL-Analyse läßt sich für verschiedeneDialekte skalieren (COBOL II, OS/VS COBOL,NonStopCOBOL 85, ScreenCOBOL).

� Die Entwicklung eines front-end’s für SQL warnotwendig, weil verschiedene Sprachen (PL/I, CO-BOL, NATURAL,..) eine Schnittstelle zu SQL be-sitzen (embedded SQL) und die SQL-Abschnitte inden Sourcen ebenfalls analysiert werden.

� Wenn in den Aufzählungen realisierter front-end’s Caufgeführt ist, C++ aber fehlt, dann liegt die Ursachedarin, daß bisher der hohe Entwicklungsaufwand fürC++ gescheut wurde (z.B. bei der Realisierung vonTemplates).

� Das TAL front-end entstand im Zuge eines Projek-tes, bei welchem ein kommerzielles Softwarepaketvon TAL nach C migriert wurde.

� Das Java front-end unterstützt Java, Version 1.4. DasWerkzeug ist UNICODE-fähig.

19.2 Entwicklungserfahrungen

Aus der Entwicklung der front-end’s resultieren eine Rei-he von Erfahrungen, welche nachfolgend zusammenge-faßt werden. Insbesondere interessieren Unterschiede zwi-schen der Analyse bei Compilern und bei Reengineering-Werkzeugen.

1. Für Reengineering und Migration ist es wesentlich,daß keine Informationen der Source während desAnalyseprozesses verlorengehen. Dazu gehören un-ter anderem Informationen zu Preprozessoranwei-sungen und Kommentaren. Die Realisierung erfolgtdurch die Aufnahme dieser Informationen in die To-kenliste, d.h., Preprozessoranweisungen und Kom-mentare bilden eigene Token im Tokenstrom.

2. Für Reverse Engineering und Migration ist das ge-naue Führen der Sourcecodeposition von Objektenwichtig. Die Sourcecodeposition wird zur Kompo-nente des Wertestroms des Scanners. Eine konkre-te Anwendung besteht z.B. darin, beim COBOL-Reengineering die Deklarationsstelle eines Date-nobjektes zu dokumentieren (In welcher COPY-Strecke und dort in welcher Zeile und Spalte ist dasDatenobjekt lokalisiert ?).

3. Reengineering von komplexen Programmen gehtüber die Analyse von Sourcecode hinaus. BekanntesBeispiel sind Java-Programme, für deren Analyseneben verschiedenen in der Import-Liste aufgeführ-

ten Java-Sourcen ebenso die Analyse von ”.class”-Files bzw. ”rt.jar”-Files notwendig ist. Ein alterna-tives Beispiel ist NATURAL, hier werden Daten-definitionen in spezieller Notation in sogenannten”DATA-AREA”-Files abgelegt, auf die im Source-programm Bezug genommen wird. Als Konsequenzfür die Programmanalyse sind spezielle Analysa-toren zu entwickeln, z.B. bei Java für das Lesenvon ”.class”-, bzw. ”rt.jar”-Files, bei NATURAL fürdas Aggregieren der Informationen aus den ”DATA-AREA”-Files.

4. front-end’s müssen eine gewisse Robustheit gegen-über fehlerhaften bzw. unvollständigen Sourcen be-sitzen. Sie müssen auch dann noch Informatio-nen liefern. Praktische Anwendungen sind fehlendeCOPY-Books bei der Analyse oder die Kundenan-forderung, separate COPY-Books von COBOL ana-lysieren zu können.

5. Der Arbeitsaufwand für die Entwicklung o.g. front-end’s wurde quantifiziert. Für den Entwicklungspro-zeß ausgehend von der Spezifikation bis zur GA-Version und nach Durchlaufen des gesamten QA-Prozesses ergibt sich ein durchschnittlicher Zeitrah-men von ca. 18 Monaten und ein durchschnittlicherAufwand von ca. 3.5 Entwicklungsjahren je front-end.

19.3 Tools und Metatools

Parallel zur Entwicklung der front-end’s entstanden ei-ne Reihe von Meta-Tools, welche der Produktion vonReengineering-Werkzeugen dienen. Alle o.g. front-end’swurden mit einem eigenentwickelten Parsergenerator rea-lisiert. Sein Name ”Backtracking Compiler Compiler”(BTRACC) verweist auf das zugrundeliegende Gramma-tikanalyseverfahren der generierten Parser. In der Theoriewird auf die schlechtere Performance des Backtracking-Verfahrens gegenüber anderen Analyseverfahren verwie-sen. Praktische Erfahrungen zeigen jedoch, daß diese zuvernachlässigen ist. Durchgeführte Tests ergaben, daß aufeinem mit 1.2 GHz getakteten Pentium z.B. eine C-Sourcevon 13.000 LOC in 1.2 Sekunden mit diesem Verfahrenanalysiert wird. Das Backtracking-Verfahren besitzt denVorteil, daß Grammatikbeschreibungen von Programmier-sprachen, welche in Dokumentationen vorkommen undüberwiegend pragmatisch entstanden, keiner aufwendigenUmstellung von Grammatikregeln bzw. Konfliktbereini-gung bedürfen, um von BTRACC akzeptiert zu werden.

Die front-end’s sind Bestandteil von Werkzeugen für dasReverse Engineering oder sie werden in Form von Ser-vice bei Migrationsprojekten eingesetzt. Ein kommerziel-les Tool für das Reverse Engineering und die Redokumen-tation von Programmsourcen ist “Flow Graph Manipula-tor´´ (FGM).

Page 37: 5. Workshop Software Reengineering (WSR 2003)pi.informatik.uni-siegen.de/stt/23_2/01_Fachgruppenberichte/wsr2003.pdfSoftwaretechnik und 5.1.3 Reengineering und Wartung betrieblicher

19.4 Aktuelle Entwicklungen

Aktuelle Entwicklungen betreffen die Weiterentwicklungdes Tools FGM:

� Es werden Steuerflußinformationen in Form vonProgrammablaufplänen entwickelt.

� Ein NATURAL front-end wird in das Werkzeug in-tegriert.

Über die feingranulare Analyse auf der Ebene eines Pro-grammes hinaus soll Applikationswissen aufgebaut wer-den. Ein Sourceprogramm existiert nicht unabhängig vonseiner Umwelt, sondern es existieren Schnittstellen (Da-tenbanken, Files, Transaktionsmonitore). In FGM soll ausdiesem Grund eine SQL-Datenbasis eingebunden werden,welche dieses Applikationswissen zukünftig verwaltet unddem Nutzer durch Anfragen zur Verfügung stellt.

20 BTRACC-Ein Parsergenerator auf der Basis einesBacktracking-Verfahrens

Uwe Erdmengerpro et con, Innovative Informatikanwendungen GmbH, Annaberger Straße 240, 09125 [email protected]

Einige Besonderheiten der syntaktischen Analyse vonQuellcode im Reengineering-Bereich sind mit den bekann-ten Parsergeneratoren nur schwer realisierbar. Insbesonde-re der Wunsch, sehr schnell brauchbare Analysewerkzeu-ge erstellen zu können, war der Anlaß für die Entwicklungdes neuen Parsergenerators BTRACC.

Der folgende Beitrag beschreibt die grundlegende Arbeits-weise des Werkzeugs. Ausgehend von der bekannten Er-weiterten Backus-Naur-Form (EBNF) wird die Generie-rung des Parsers und seine Funktionalität beschrieben, wo-bei auch auf die Frage der Attributierung eingegangenwird.

20.1 Einleitung und Motivation

Bei der Erstellung von Analysewerkzeugen fürReengineering-Zwecke liegt die Grammatik meist in einerForm vor, welche für bekannte Parsergeneratoren (YACC,PCCTS, COCO/R; ...) nicht optimal geeignet ist. Insbe-sondere der große Sprachumfang und der Wunsch, meh-rere Dialekte mit einem Parser bearbeiten zu können, sinddie Ursache dafür. Außerdem stehen hier häufig Korrek-turen und Erweiterungen an, welche bei oben genanntenWerkzeugen zu größeren Umstellungen der vorhandenenGrammatik führen.

Um vorliegende Grammatiken ohne große Umstellung inParsern verwenden und diese auch einfach pflegen zu kön-nen, wird bei der Erstellung von Parsern in der Firmapro et con GmbH ein eigener Parsergenerator BTRACC(BackTRAcking Compiler Compiler) verwendet, dessenFunktionsweise im Weiteren beschrieben werden soll. Mitdiesem Werkzeug wurden bereits ein SQL-, ein Natural-ein Java- und ein C-Parser realisiert, die auch in kommer-ziellen Produkten Verwendung finden.

20.2 Interne Darstellung der Grammatik

Ausgangspunkt ist die attributierte Grammatik der zu ana-lysierenden Sprache in EBNF. Diese liest der Parserge-nerator BTRACC, prüft ihre syntaktische Korrektheit undbaut eine interne Darstellung auf.

Dabei handelt es sich um eine Datenstruktur, welche alsGraph angesehen werden kann. Weil BTRACC in C++ ge-schrieben wurde, lag die Verwendung von dynamisch allo-kierten Strukturen als Knoten des Graphen und Zeigern alsKanten nahe. Dabei gibt es folgende Arten von Knoten:

Terminalsymbol: Nichtterminalsymbol:

Regelende: Verzweigungs- undSammelknoten:

Aus diesen Grundbausteinen kann die interne Repräsenta-tion der Regeln zusammengesetzt werden. Dabei wird zujeder Regel ein Graph aufgebaut, welcher die rechte Re-gelseite wiederspiegelt. Alle diese Regeln werden, sortiertnach ihrem Namen, in einer Hash-Liste verwaltet, welcheeinen schnellen Zugriff über den Regelnamen (Nichttermi-nalsymbol) gestattet.

Die Strukturen der Erweiterten Backus-Naur-Form werdenwie folgt zusammengesetzt:

Page 38: 5. Workshop Software Reengineering (WSR 2003)pi.informatik.uni-siegen.de/stt/23_2/01_Fachgruppenberichte/wsr2003.pdfSoftwaretechnik und 5.1.3 Reengineering und Wartung betrieblicher

Sequenz A B Option [A]

Alternative A | B Wiederholung {A}

Dabei stehen A und B für Terminalsymbol-Knoten,Nichtterminalsymbol-Knoten oder wiederum kompletteStrukturen (rekursive Definition).

20.3 Generierung der Parser-Quellcodes

Die Graphen dürfen keine Zyklen ohne mindestens einTerminalsymbol enthalten. Das führt zu einer Endlos-schleife im Algorithmus. Dies wird vor der Generierunggetestet. Praktisch bedeutet das, daß die Eingabegramma-tik nicht linksrekursiv sein und keine Verschachtelung op-tionaler Konstrukte der Art {[ A ]} enthalten darf.Der zu generierende Parser-Quellcode besteht in derHauptsache aus einem Feld von C-Strukturen, welche alsMaschinenbefehle einer virtuellen Maschine angesehenwerden können. Dabei wird zu jedem Knoten im Graphenein solcher Befehl erzeugt. Er enthält auch die Kante zumnächsten/alternativen Knoten als Feldindex des ihm zuge-ordneten Befehls. Das ist möglich, da nach obiger Vor-schrift ein Knoten maximal 2 Nachfolger haben kann. Fol-gende C-Struktur wird dabei verwendet:struct BEFEHLE {

int mnemonic; // Art des Befehlsint next; // naechster Befehlint alt; // alternativer Befehlint token; // bei Terminalen

};

Die folgenden Befehle werden generiert:Befehl Knoten Befehl Knoten

BRANCH GOTO

TEST CALL

RETURN

20.4 Arbeitsweise der virtuellen Maschine

Die virtuelle Maschine verwaltet einen Stack mit zwei ver-schiedenen Arten von Stackframes:

1. EntscheidungspunkteBei Alternativen (Befehl BRANCH) wird der ersteWeg (Komponente next der Struktur BEFEHLE)weiter verfolgt, wohingegen der 2. Weg in diesenEntscheidungspunkten gemerkt wird. Sie beinhaltendaher die folgenden Komponenten:� aktuelle Position des Scanners

� Index des Stackframes des vorhergehendenEntscheidungspunktes

� Index des beim Anlegen aktuellen Call-Frames� Index des ersten Befehls des alternativen

Weges2. Call-Frames

Beim Auftreten von Nichtterminalsymbolen (BefehlCALL) müssen Informationen zum Weg nach demAufruf gespeichert werden (ähnlich wie beim Funk-tionsaufruf in Programmiersprachen). Dies sind:� Index des beim Aufruf aktuellen Call-Frames� Index des nachfolgenden Befehls im Feld der

BefehleDazu werden 5 Variablen mit folgender Bedeutung verwal-tet:

1. ip Index des aktuell abzuarbeitenden Befehls2. sp Index des 1. freien Stackframes3. btp Index des zuletzt angelegten Entscheidungs-

punktes4. bp Index des zuletzt angelegten Call-Frames5. tok Position des aktuellen Tokens als Index in eine

lineare Liste aller TokenDie nebenstehende Skizzeverdeutlicht diesen Sachver-halt.Die Abarbeitung beginnt mitdem 1. Befehl der Regel,welche zum Startsymbol ge-hört. Dabei ist der Stack leerund sp, btp, bp und tokhaben den Wert 0.

Die einzelnen Befehle bewirken folgendes:1. BRANCH: Es wird ein neuer Entscheidungspunkt

auf dem Stack abgelegt und dabei btp und sp ak-tualisiert. Es wird beim Befehl, auf den next ver-weist, weitergearbeitet (ip=next).

2. GOTO: Die Variablen und der Stack werden nichtgeändert. Es wird beim Befehl, auf den next ver-weist, weitergearbeitet.

3. CALL: Es wird ein neuer Call-Frame auf dem Stackangelegt und dabei sp und bp aktualisiert. Dannwird beim 1. Befehl der gerufenen Regel weiterge-arbeitet, der in der next-Komponente gespeichertist.

4. RETURN: Ist bp!=0, so wird bp aus dem aktu-ellen Call-frame zurückgestellt und beim dort an-gegebenen Befehl weitergearbeitet. Wichtig ist hier,daß dabei sp und btp nicht verändert werden.Der Stack wird also nicht verkleinert, damit dienach dem Aufruf der Regel eingerichteten Entschei-dungspunkte im Backtracking-Fall auch erreichtwerden können.Ist bp==0, so ist die Regel zum Startsymbol voll-ständig abgearbeitet und das Parsen erfolgreich be-endet.

5. TEST: Falls das aktuelle Token gleich dem geteste-ten ist, so wird tok auf die Position des nächsten

Page 39: 5. Workshop Software Reengineering (WSR 2003)pi.informatik.uni-siegen.de/stt/23_2/01_Fachgruppenberichte/wsr2003.pdfSoftwaretechnik und 5.1.3 Reengineering und Wartung betrieblicher

Tokens gestellt. Dann wird bei next weitergearbei-tet.Sind beide Token nicht gleich und ist btp!=0, sowird Backtracking ausgelöst. Das heißt, bp, btpund tok werden aus dem stackobersten Entschei-dungspunkt wieder hergestellt und sp wird auf btpgesetzt. Damit wird der Stack reduziert. Weitergear-beitet wird mit dem Befehl, welcher im stackober-sten Entscheidungspunkt angegeben ist.Ist btp==0, so gibt es keine offene Alternativemehr und das Parsen wird ohne Erfolg beendet.

20.5 Berechnung der Attribute

Die Berechnung der Attribute (meist Syntaxbäume) ist imBacktracking-Fall nur schwer rückgängig zu machen. Da-her erfolgt sie in einem separaten Durchlauf nach erfolg-reichem Parsen. Die Besonderheit dabei ist, daß in diesem2. Durchlauf noch der Stackinhalt zur Verfügung steht, derim 1. Durchlauf aufgebaut wurde. Dieser wird nun als eineArt „roter Faden“ verwendet, so daß der Durchlauf deter-

ministisch erfolgen kann.Zum Zwecke der Attributierung generiert BTRACC zu je-der Regel eine Funktion. Die Regelparameter sind die Pa-rameter der Funktion und die Berechnung der Attributegeschieht innerhalb des Funktionsblocks. Diese Funktio-nen rufen sich gegenseitig auf. Dies ist analog zum Ver-fahren des rekursiven Abstiegs, welches auch von LL(1)-Parsergeneratoren, wie z.B. COCO/R verwendet wird.Die Funktionen ändern die Variablen wie oben beschrie-ben, manipulieren aber den Stack nicht. Im Falle einerVerzweigung (wenn also ein alternativer Weg existiert),wird verglichen, ob dieser Weg im stackobersten Entschei-dungspunkt steht und die dort angegebene Position in derTokenliste der aktuellen Position entspricht. Ist dies derFall, so führte in der Parsing-Phase der 1. Weg zum Ziel.Dieser ist nun auch hier zu wählen. Ist es nicht der Fall, soist der alternative Weg der richtige.Auf diese Weise kann in der Attributierungsphase der kor-rekte Weg deterministisch (ohne Backtracking) gefundenwerden und eine aufwendige Rücknahme der Attributbe-rechnung entfallen.

Aufwandsschätzung

21 Aufwandsschätzung von Software-Reengineering-Projekten

Harry M. SneedInstitut für Wirtschaftsinformatik Universität Regensburg

21.1 Rechtfertigung für Reengineering

Reengineering bestehender Anwendungssysteme ist ei-ne preiswerte Alternative zur kompletten Neuentwick-lung. Neuentwicklungen sind bekanntlich teuer und risi-koreich. Auch mit den neuen agilen Entwicklungsansät-zen sind die Kosten eines ganzen Anwendungssystemsschwer abschätzbar. Bei den besten Schätzmethoden bleibtimmer noch ein großer Unsicherheitsfaktor mit Schwan-kungen bis zu 80%. Ohne jedoch genau zu wissen,was ein Ersatzsystem kostet, ist es kaum möglich, eineKosten/Nutzen-Rechnung zu erstellen. Also bleibt der Re-turn on Investment für eine Neuentwicklung weitestge-hend im Dunklen. Der ROI � �Nutzen�Kosten��Kostenläßt sich nur errechnen, wenn die Kosten bekannt sind.

Der Hauptvorteil von Reengineering bleibt nach wie vordie Berechenbarkeit. Der Aufwand für ein Reengineering-Projekt läßt sich im Verhältnis zu einer Neuentwicklungrelativ leicht und genau abschätzen. Andererseits kann derNutzen einer ”reengineered” Anwendung nie so hoch seinwie der einer neuen Anwendung. Man kann zwar die Soft-

ware modernisieren, die Oberflächen austauschen, die Da-ten migrieren und das System sogar webfähig gestalten.Dennoch bleibt die Fachlichkeit unverändert. Es handeltsich um eine neue Verpackung eines alten Inhaltes.Dennoch kann ein Reengineering-Projekt auch bei be-schränktem Nutzen ein höheres Return on Investment auf-weisen als eine Neuentwicklung mit hohem Nutzen, aberebenso hohen Kosten und Risiken. Vor allem sind es dieüberschaubaren Risiken, die ein Reengineering-Projekt zueiner attraktiven Alternative machen. Es wird weniger ris-kiert und weniger ausgegeben.

21.2 Unterschiedliche ZielsetzungDas Ziel eines Reengineering-Projektes ist es, den beste-henden Code zu verändern und eventuell in eine ande-re Sprache zu transformieren. Eigentlich gibt es drei ver-schiedene potentielle Ziele die hier als

� Kapselung,� Sanierung und� Konvertierung

bezeichnet werden.

Page 40: 5. Workshop Software Reengineering (WSR 2003)pi.informatik.uni-siegen.de/stt/23_2/01_Fachgruppenberichte/wsr2003.pdfSoftwaretechnik und 5.1.3 Reengineering und Wartung betrieblicher

Das Ziel Kapselung bedeutet, daß der Code nur so weitgeändert wird, daß man ihn in eine neue Umgebungoder Architektur einbinden kann. Beispielhaft für dieseProjekte sind Integrationsprojekte, die darauf zielen, alteHostprogramme in eine Webanwendung einzubinden. Hierwird nicht auf die Qualität und auch nicht auf die Sprachedes Codes geachtet. Es geht ausschließlich darum, den Co-de in einer anderen Umgebung wiederverwendbar zu ma-chen. Lediglich die Schnittstellen der Module werden an-gepaßt. Dies ist die billigste Art des Reeingineering, dennsie hat die geringste Auswirkung auf den Code, unter 20%.Das Ziel Sanierung bedeutet, daß der Code im Hinblickauf eine Steigerung der internen Qualität verändert wird.Es soll möglich werden, den Code mit geringerem Auf-wand zu warten. Restrukturierung und Refakturierung sindBeispiele für diese Art Reengineering. Der Code wird zwi-schen von 20-40% verändert.Das Ziel Konvertierung bedeutet die Transformation deskompletten Codes in eine andere Programmiersprache,z.B. Assembler in COBOL oder COBOL in Java. In die-sem Falle ist der Änderungsgrad mehr als 90%. Fast je-de einzelne Anweisung wird übersetzt. Oft ist eine Kon-vertierung mit einer Sanierung gebunden, denn die neueSprache wird nur strukturierte und modulare Programmeverkraften. Je größer die Kluft zwischen der alten und derneuen Sprache, um so näher kommt ein Konvertierungs-projekt an ein Entwicklungsprojekt heran. Im Grunde ge-nommen bewahrt man nur die fachliche Funktionalität undsonst nichts.

21.3 Der Weg zu einer systematischenSchätzung

In dem hier vorgestellten Verfahren zur Aufwandsschät-zung und Risikoanalyse eines Software-Reengineering-Projektes werden acht Schritte benötigt:

� Schritt 1 ist die Erfassung der Reengineering-Anforderungen,

� Schritt 2 ist die Analyse der vorhandenen Program-me und Daten,

� Schritt 3 ist die Auswertung der Analyseergebnisse,� Schritt 4 ist die Übernahme der Quantitäts- und

Komplexitätsdaten,� Schritt 5 ist die Einstellung der Qualitätsziele und

der Projekteinflußfaktoren,� Schritt 6 ist die Kalibrierung der Produktivitätsdaten

aufgrund der bisherigen Erfahrungen,� Schritt 7 ist die Risikoanalyse und Errechnung des

Risikofaktors und� Schritt 8 ist die Schätzung der erforderlichen Auf-

wände und der Mindestdauer des Projektes.

Erfassung der Reengineering-Anforderungen

Im ersten Schritt bekommt der Besitzer des Legacy-Anwendungssystems einen Fragebogen, den er mit Hilfeeines erfahrenen Reengineering-Beraters auszufüllen hat.

Es werden im Fragebogen Fragen zum Istzustand und zumgewünschten Sollzustand der betreffenden Software ge-stellt. Im Fragebogen werden drei Anforderungskategorienangesprochen:

� Komplexitätsanforderungen,� Quantitätsanforderungen und� Qualitätsanforderungen.

Bei den Komplexitätsanforderungen wird nach der gegen-wärtigen und geplanten technischen Umgebung, nach dengegenwärtigen und geplanten Datenbanken, nach den ge-genwärtigen und geplanten Programmiersprachen sowienach der gegenwärtigen und geplanten Entwicklungsum-gebung gefragt, um hier den Abstand zwischen Ist und Sollzu messen. Ein Reengineering-Projekt soll schließlich dieKluft zwischen Ist und Soll überbrücken, und es empfiehltsich, gleich von Anfang an die Breite der Kluft zu kennen.Außerdem soll der Besitzer des Anwendungssystems dieKomplexität seines jetzigen Systems und die des künfti-gen Systems einstufen und zwar auf einer ordinalen Skalavon sehr niedrig, niedrig, mittel, hoch und sehr hoch. Beiden Quantitätsanforderungen geht es um das Mengenge-rüst der vorhandenen Software. Der Systembesitzer mußangeben

� die Anzahl der Dialoge,� die Anzahl der Batchläufe,� die Anzahl der Programme nach Sprache,� die Anzahl der Datenbanken nach Typ,� die Anzahl der Masken und Berichte und� die Anzahl der JCL-Prozeduren bzw. -Skripte.

Damit hat man wenigstens eine Ahnung von der Größedes Zielsystems. Bei den Qualitätsanforderungen soll derSystembesitzer sein System selbst beurteilen, und zwar

� nach dem Grad der Benutzerzufriedenheit,� nach der Performance,� nach der Bedienbarkeit und� nach der Wartungsfreundlichkeit.

Dazu verwendet er die gleiche ordinale Skala wie beider Komplexität. Hinzu kommt die jährliche Fehlerrate,um die Zuverlässigkeit des Systems beurteilen zu können.Wenn er dies für das vorhandene System gemacht hat, soller das gleiche auf das geplante System projektieren. Damitläßt sich der Grad der Qualitätssteigerung grob bemessen.Schließlich soll der Benutzer aus seiner Sicht die wesentli-chen Risiken für ein Reengineering-Projekt auflisten, ihreWahrscheinlichkeit angeben und den Grad ihrer Auswir-kung auf die Projektkosten schätzen. Diese Informationsoll der späteren Risikoanalyse zugute kommen.

Analyse der bestehenden Software

Im zweiten Schritt werden sämtliche Source-Programme,Masken, Datenbankschemen und JCL-Prozeduren desZielsystems einer statischen Analyse unterzogen. Für je-den Sourcetyp muss es einen eigenen Analysator geben.Dennoch produziert jeder Analysator in etwa die gleichenBerichte.

Page 41: 5. Workshop Software Reengineering (WSR 2003)pi.informatik.uni-siegen.de/stt/23_2/01_Fachgruppenberichte/wsr2003.pdfSoftwaretechnik und 5.1.3 Reengineering und Wartung betrieblicher

Zum Ersten entsteht ein Mängelbericht, in dem Schwach-stellen und Normabweichungen im Code registriert wer-den. Dieser zeugt von der Qualität der jeweiligen Sour-cen. Die Mängel werden in schwere, mittlere und leichteMängel kategorisiert und eine Konformitätsrate relativ zurSourcegröße errechnet.Zum Zweiten entsteht ein Metrikbericht mit Quantitäts-,Komplexitäts- und Qualitätsmetriken. Die Quantitätsme-triken belegen die Größe der Software z.B. in Codezeilen,Anweisungen, Data-Points und Function-Points. Es wer-den auch jede Menge andere Eigenschaften gezählt, wiedie Anzahl Attribute, die Anzahl Referenzen, die AnzahlSchnittstellen und die Anzahl Bedingungen. Für das Reen-gineering besonders relevant ist die Anzahl wiederver-wendbarer Datenstrukturen und Programmbausteine sowiedie Anzahl konvertierbarer Datenstrukturen und Codeab-schnitte.Zu den Komplexitätsmetriken gehören die Datenkom-plexität, die Datenverwendungskomplexität, die Datenzu-griffskomplexität, die Schnittstellenkomplexität, die Ab-laufkomplexität, die Entscheidungskomplexität, die Ver-zweigungskomplexität und die Sprachkomplexität.Zu den Qualitätsmetriken gehören die Konformität, Mo-dularität, Flexibilität, Portierbarkeit, Testbarkeit, Wieder-verwendbarkeit, Konvertierbarkeit und allgemeine Wart-barkeit.Zur Nachdokumentation gehören Strukturdiagramme, Da-tenflußtabellen, Datenbäume und Pseudocodes bzw. Struk-togramme. Mustermasken werden aus den Maskenbe-schreibungen und Datenbäume aus den Datenbanken ab-geleitet. Diese Dokumente gewähren Einblick in die Logikder Programme sowie in die Zusammensetzung der Daten-strukturen. Sie werden benutzt, um die Risiken der Codes-anierung und -konvertierung abschätzen zu können.Zuletzt wird eine Exportschnittstelle mit den wichtigstenMetriken für das Schätzwerkzeug - SoftCalc - generiert.In dieser Schnittstelle werden die Anweisungen, Datenele-mente, Ein- und Ausgaben und die Prozeduren gezählt unddie Komplexität des Codes als hoch, mittel oder niedrigeingestuft. Von dieser Schnittstelle werden dreierlei Artenerstellt - eine für die Programme bzw. die Prozesse, einefür die Dateien und Datenbanken und eine für die System-schnittstellen. Damit ist die Brücke zum 4. Schritt geschaf-fen - zur Übertragung der Quantitäts- und Komplexitätsda-ten in das Schätzwerkzeug.

Auswertung der Analyseergebnisse

Im dritten Schritt werden die Ergebnisse aus der System-analyse ausgewertet. Ausgewertet werden

� die Metriken,� die Mängelberichte und� die Programmdokumente,

um zu einer Gesamtbewertung des Systems zu kommen.Aus den Metriken ist zu entnehmen, wie es mit der Größe,Komplexität und Qualität der Software im Ganzen steht.Die Größe drückt sich in verschiedenen Mengen aus wie

z.B. Modulen, Codezeilen, Anweisungen, Bedingungen,Verzweigungen, benutzte Daten, Data-Points, Function-Points und Object-Points. Kein einziges Maß ist für sichgenügend, denn jedes Maß mißt eine andere Eigenschaftder Software. Die Modulanzahl gibt an wie viele Einhei-ten zu verarbeiten sind. Die Anzahl Codezeilen erfaßt dasrein physikalische Volumen des Codes, während die An-zahl Anweisungen das logische Volumen ausdrückt. DieAnzahl Bedingungen ist ein Indikator für die Komplexi-tät der Entscheidungslogik und die Anzahl Verzweigungenein Maß für die Komplexität der Ablauflogik. Die Anzahlbenutzter Daten verweist auf die Größe der Datendomains.Data- Points sind ein aggregiertes Maß für die Größe desDatenmodells in Bezug auf die Entitäten, Beziehungen,Attribute und Sichten in den E/R-Diagrammen. Function-Points hingegen sind ein aggregiertes Maß für die Größedes Funktionsmodells in Bezug auf die Kanten und Knotenin einem Datenflußgraph. Object-Points sind schließlichein aggregiertes Maß für die Größe eines Objektmodellsan Hand der Anzahl Klassen, Schnittstellen, Attribute undMethoden. Die wahre Größe eines Softwaresystems läßtsich nur über die Kombination dieser vielen Einzelgrößenmessen. Software ist letztendlich ein multidimensionalesPhänomen, das mit einem einzigen Meßwert nicht zu fas-sen ist.

Übernahme der Quantitäts- und Komplexitätsdaten

Im vierten Schritt handelt es sich im Wesentlichen umeinen technischen Vorgang. Die Exportschnittstellen, dieaus der Sourceanalyse erzeugt wurden, werden mit ei-nem Eintrag pro Programm, Schnittstelle und Datei bzw.Datenbankentität in die Datenbank des Schätzwerkzeugsübertragen. Danach sind die Prozeß-, Daten- und Kom-munikationstabellen des Schätzwerkzeugs mit Daten ausdem vorhandenen System gefüllt. So bleibt es dem Schät-zer nur übrig, die Änderungsrate einzustellen. Die Ände-rungsrate ist der Prozentsatz, zu dem jedes Element - Pro-zeß, Schnittstelle und Datentabelle - zu ändern ist.

Einstellung der Qualitätsziele und der Projekteinfluß-faktoren

Im fünften Schritt obliegt es dem Schätzer, die Qualitäts-ziele zu definieren und die Projekteinflußfaktoren zu be-stimmen. Bei den Qualitätszielen hat er die Möglichkeit,den Grad der Steigerung bzw. Senkung der Qualität gegen-über der Qualität des bestehenden Systems zu setzen. Diebestehende Qualität ergibt sich aus der Metrikbewertungdes alten Codes. Z.B. hat das alte System eine Modulari-tät von 0�45. Wenn das neue System den gleichen Grad anModularität haben soll, ist der Qualitätsjustierungsfaktorbzw. Quality Adjustment Factor� 1. Also wird das keinenEinfluß auf den Aufwand haben. Wenn aber die Modulari-tät steigen soll von 0�45 auf 0�60, dann ergibt sich aus der

Formel Soll-QualitätIst-Qualität ein Multiplikationsfaktor von 1�33

oder 33% mehr Aufwand. Andererseits, falls der Anwen-

Page 42: 5. Workshop Software Reengineering (WSR 2003)pi.informatik.uni-siegen.de/stt/23_2/01_Fachgruppenberichte/wsr2003.pdfSoftwaretechnik und 5.1.3 Reengineering und Wartung betrieblicher

der bereit sein sollte, einen Verlust an Modularität in Kaufzu nehmen, z.B. von 0�45 auf 0�30, dann ist der Multipli-kationsfaktor 0�67 oder 33% weniger Aufwand.

Die Kalibrierung der Produktivitätsdaten

Produktivität wird an Hand der Anzahl Anweisungen,Function-Points, Data-Points, Object-Points und Doku-mente pro Personenmonat gezählt. Da dies von Betriebzu Betrieb stark variieren kann, bleibt es jedem Betriebüberlassen, seine eigene Produktivitätskurve zu plotten.Man kann zwar Produktivitätsdaten aus der einschlägigenLiteratur oder von anderen Betrieben übernehmen, aberdies dürfte nur als Ausgangsbasis dienen, denn Studienbelegen Produktivitätsunterschiede von 1:5 zwischen Fir-men. Für Reengineeringprojekte sind diese Schwankungennicht ganz so stark, können aber bis zu 1:2 schwanken.Sanierungsprojekte lassen sich am besten durch Anwei-sungen berechnen. Konvertierungsprojekte werden in derRegel über Codezeilen abgerechnet. Kapselungsprojektebeschränken sich auf ein Reengineering der Schnittstellen.Also spielt die Anzahl Anweisungen keine Rolle. Hier sinddie Function-Points ausschlaggebend.

Die Berrechnung des Risikofaktors

Der letzte Schritt vor der eigentlichen Aufwandsschätzungist die Analyse der Risiken und die Errechnung des Ri-sikofaktors. Bereits im ersten Schritt hat der Besitzer desLegacy-Systems die Risiken für das Reengineering- Pro-jekt aus seiner Sicht identifiziert und deren Wahrschein-lichkeit des Auftretens geschätzt. Jetzt werden diese Ri-siken im Schätzwerzeug erfaßt und durch andere Risikenergänzt, die sich im Laufe der Analyse ergeben haben.Für jedes Risiko wird nicht nur die Wahrscheinlichkeit desAuftretens als Prozentsatz von 0 bis 99% angegeben. Eswird auch die Risikoauswirkung als Multiplikationsfak-tor von 0�1 bis 2 angegeben. Dieser Multiplikationsfaktordrückt aus, welche zusätzlichen Kosten durch das Auftre-ten des Risikos verursacht werden. Der Risikofaktor ist dasProdukt aus der Wahrscheinlichkeit und der Auswirkungplus 1

Rf � 1��WahrscheinlichkeitAuswirkung�

Um die Auswirkung der Risiken zu mildern, können Ge-genmaßnahmen eingesetzt werden. Die Gegenmaßnahmenkönnen ein Risiko um % (1 bis 99%) neutralisieren. So-mit ist der endgültige Risikofaktor

Rf � 1��WahrscheinlichkeitAuswirkung�Gegenwirkung

Da es aber nicht ein Risiko, sondern mehrere gibt und dieRisiken sich gegenseitig potenzieren, wird der Gesamtri-sikofaktor als das Produkt aller einzelnen Risikofaktorenerrechnet. Bei vier Risikofaktoren von 1�125 ist dann dasGesamtrisko 1�6. D.h., zum Abfangen dieser Risiken wer-den 60% mehr Kosten kalkuliert.

Schätzung des Aufwands

In diesem letzten Schritt wird nach jeder Methode, dieder Benutzer auswählt, eine Kalkulation durchgeführt. Jenachdem welche Methode gewählt wird, wird was an-ders gezählt — Anweisungen, Komponenten, Function-Points, Data-Points, Object-Points, u.s.w. — um zur Sy-stemgröße zu kommen. Diese Größe wird zunächst mitdem Qualitätsfaktor und anschließend mit dem jeweiligenProjekteinflußfaktor justiert. Der Qualitätsfaktor ist für al-le Methoden gleich. Der Einflußfaktor ist jedoch, wie ausdem 5. Schritt hervorging, für jede Methode anders. DieMethoden unterscheiden sich also dadurch, wie sie die Sy-stemgröße ermitteln und welche Einflußfaktoren sie hin-zuziehen. Um so wichtiger ist es, nach verschiedenen Me-thoden vorzugehen, um zu erkennen, wo sie voneinanderabweichen.Mit der justierten Größe wird jetzt in die Produktivitätsta-belle eingegangen und der zu dieser Größe passende Auf-wand in Personenmonaten herausgeholt. Dies ist der ent-scheidende Schritt im Schätzverfahren, bei dem Größe inAufwand umgesetzt wird. Wenn hier die Produktivitätsda-ten nicht stimmen, wird auch das genaueste Größenmaß zuirreführenden Ergebnissen führen.Nun erfolgt der Einfluß des Risikofaktors, der mit demAufwand multipliziert wird. Ein Risikofaktor von 1�6 wirdden Aufwand um 60% erhöhen. Dieser justierte Aufwandfließt dann in das Endergebnis ein. Mit der COCOMO-Formel 2�5 Aufwand 0�35 wird aus dem Projektaufwanddie Mindestprojektdauer errechnet. Allerdings wird die-se Formel für Reengineering-Projekte verändert, da imReengineering-Projekt eine viel größere Parallelität in derArbeit möglich ist. Reengineering-Projekte dauern in derRegel nur halb so lange wie Entwicklungsprojekte dergleichen Größenordnung. Dies ist neben den geringerenKosten und den reduzierten Risiken ein Hauptmotiv fürReengineering.

Page 43: 5. Workshop Software Reengineering (WSR 2003)pi.informatik.uni-siegen.de/stt/23_2/01_Fachgruppenberichte/wsr2003.pdfSoftwaretechnik und 5.1.3 Reengineering und Wartung betrieblicher

Application-Wrapping

22 Ist Web-to-Host bereits alles? Die Kunst der Integration

Christian SynwoldtFogelberg & Partner GmbH, Frankfurt [email protected]

Der weitaus größte Teil aller geschäftskritischen Anwen-dungen wird nach wie vor auf Mainframe-Systemen ab-gewickelt - und deren Ablösung ist ferner denn je. Nebender traditionellen Rolle in der Unternehmens-IT steht in-zwischen die Nutzung über das Internet immer mehr imVordergrund. Und es drängt sich die Frage auf: Ist Web-to-Host bereits alles?Schon auf den ersten Blick handelt es sich bei dieserWortschöpfung um einen Irrtum: Nicht das World wideWeb kommt zum Host, sondern der Mainframe soll ein(neues) Tor zum Internet erhalten! Waren dies ursprüng-lichen 3270-Terminals, die rasch durch PCs mit Terminal-Emulationen abgelöst wurden, so stehen heute Browser-basierte Clients im Mittelpunkt des Interesses - das FatClient Paradigma scheint überholt. Wie aber werden dieMainframe-Applikationen über das Internet genutzt?Können komplexe und in der Bedienung wenig komfor-table Host-Anwendungen tatsächlich einfach ins Web ge-bracht werden (= Host-to-Web)? Wer sind die Benutzer- gut geschulte Sachbearbeiter oder ungeübte Gelegen-heitsanwender? Was sind ihre Aufgaben? Selbst wenn -auf Grund der Art der Nutzung - ein umfassendes Re-Design zunächst nicht notwendig erscheint, so ist doch ge-rade im Unternehmensumfeld das Zusammenspiel mit an-deren Applikationen zunehmend wichtiger. Folglich kannein unreflektiertes Web-Enabling auch nur sehr kurzfristigErfolg versprechen.

Von der Migration zur Integration

Aber noch ein ganz anderer Aspekt wird erkannt: Domi-nierten bislang Ideen wie die Ablösung des Mainframesdurch Client-/ Server-Systeme, so ist inzwischen klar ge-worden, dass trotz großer Migrationsanstrengungen im-mer mehr der technischen Entwicklung hinterher gelaufenwird. Infolgedessen wird auch eher an die Integration derverschiedenen IT-Welten gedacht. Das führt dazu, dass in-zwischen bis zu 40% aller IT-Aufwändungen im Zusam-menhang mit der Integration der unternehmensweit ver-teilten Applikationen stehen. - Letztlich wird dieses Vor-gehen als deutlich weniger Risiko behaftet angesehen, dadie wohl erprobten Backend-Systeme praktisch unangeta-stet bleiben. Doch auch Integration ist nicht gleich Inte-

gration: Mittlerer Weile geht der Trend zu standardisiertenKonnektoren und Lösungen die eine unternehmensweiteIntegration unterstützen.

Hohe Kosten . . .

Da die Aufwändungen für die Integration unternehmens-weit verteilter Applikationen so enorm hoch sind, stelltsich unwillkürlich die Frage, warum nicht an einer zen-tralen Applikations- und Systeminfrastruktur festgehal-ten wird? Das Thema Enterprise Application Integration(EAI) wäre unmittelbar von der Tagesordnung! Doch esgibt treibende Kräfte:

� Neue Anforderungen der Endanwender machen dieIntegration der Benutzerschnittstelle mit Back-end-Systemen notwendig.

� Unternehmenszusammenschlüsse bedingen die Not-wendigkeit schneller Integration extrem heterogenerIT-Landschaften

� Integration von performanten und zuverlässigen Al-tanwendungen mit modernen Softwarepaketen

. . . führen zu verschiedenen Ansätzen

In die Integration von Geschäftsprozessen sind regel-mäßig heterogenste Applikationen und Systeme invol-viert - die Spanne reicht vom Mainframe bis zum Java-Applikationsserver mit EJB-Containern. Entsprechendhoch ist die Anzahl der Freiheitsgrade, die von einer In-tegrationslösung erwartet werden: Von der Präsentations-ebene bis hin zur Integration von Funktionen und Daten.

Integration auf Präsentationsebene

Mittels eines Java Frameworks lässt sich ein integrier-ter GUI Arbeitsplatz für alle Geschäftsprozesse erstellen.Prinzipiell ist die Funktionalität durch die zu integrieren-den Anwendungen determiniert. Darüber hinaus ist hierbesonderes Augenmerk auf die Performance zu legen, dameist zusätzliche Softwareschichten einbezogen werdenmüssen. Erst wenn das gewählte Tool seinerseits entspre-chend leistungsfähige Schnittstellen besitzt, kann über die

Page 44: 5. Workshop Software Reengineering (WSR 2003)pi.informatik.uni-siegen.de/stt/23_2/01_Fachgruppenberichte/wsr2003.pdfSoftwaretechnik und 5.1.3 Reengineering und Wartung betrieblicher

gemeinsame Oberfläche sogar weitere Funktionalität ein-gebunden werden.

Abbildung 22.1. Erst durch eine Kapsel auf Präsenta-tionsebene wird für den Endanwendereine durchgängige Bedienung erzielt.

Integration auf Datenebene

Mittels neu programmierter Logik werden die notwendi-gen Geschäftsprozesse abgebildet, die auf die Datenbe-stände vorhandener Applikationen zugreifen. Dabei sindregelmäßig Fragen der Integration durch die Umgebungder bisherigen Applikationen, die ebenfalls auf den Da-tenbeständen arbeitet, zu beachten. Auf der anderen Seitekann beim Einsatz geeigneter Tools und Paradigmen (UseCases) ein hohes Maß an Widerverwendbarkeit der neuenKomponenten erreicht werden, obwohl diese zunächst neuerstellt werden müssen.

Funktionale Integration

Über eine Middleware-Schicht wird versucht, die in ab-geschlossenen Modulen hinterlegten Funktionen zusam-men zu führen. Bei diesen Modulen kann es sich um EJBsoder Mainframe Transaktionen handeln - der Bandbreiteist praktisch unbegrenzt.Eine wesentliche Schwierigkeit bei dieser Form der Inte-gration liegt meist in den technisch sehr unterschiedlichausgeführten Interfaces, die erst mittels Konnektoren andie Middleware angefügt werden können. Auf der Basiseines Aufbaus aus Middleware plus Konnektoren lassensich Softwarekomponenten mit hoher Widerverwendbar-keit gestalten. Gleichzeitig ist bei diesem Ansatz zu be-denken, dass Modifikationen in den zu integrierenden An-wendungen vorgenommen werden müssen.

Abbildung 22.2. Die Middleware ermöglicht eine ge-meinsame Sicht auf die Geschäftspro-zesse.

Das Tool: NetPhantom

Über zahlreiche so genannte User Exits kann mittels gän-giger Java-Standards (J2EE) gegen den Serverprozess pro-grammiert werden. Diese Schnittstellen stellen nicht nurClient- wie auch Host-seitig Interfaces zur Verfügung, son-dern erlauben ebenso Eingriffe in die Zugriffssteuerungoder die Kontrolle des Serverprozesses als solchem.

Abbildung 22.3. NetPhantom als zentrale Middleware:Für eine gemeinsame Sicht auf die Ge-schäftsprozesse und die funktionale In-tegration von Applikationen.

Page 45: 5. Workshop Software Reengineering (WSR 2003)pi.informatik.uni-siegen.de/stt/23_2/01_Fachgruppenberichte/wsr2003.pdfSoftwaretechnik und 5.1.3 Reengineering und Wartung betrieblicher

Interfaces für Menschen . . .

Je nach gewünschter Funktionalität der Benutzungsober-fläche und der technischen Randbedingungen können ver-schiedene Client-Interfaces genutzt werden:

� Java-SWING� HTML-Interface

. . . und Maschinen

Moderne IT-Architekturen sind auf die direkte Integrationunterschiedlichster Systeme angewiesen! Neben den tradi-tionellen Mainframe-Anwendungen spielen hier regelmä-ßig auch Applikationsserver (EJB, JSP, JMS) eine wichti-ge Rolle. Für die - ansonsten meist schwierige - Integrationbeider Welten wird über ein Remote Application ProtocolInterface (RAPP-API) der Weg zu neuen Standards (u. a.SOAP, Web Services, . . . ) geöffnet.

XML/Query

23 Simplifying Source Code Analysis by an XML Representation

G. Fischer, J. Wolff v. GudenbergUniversität Würzburg, Institute for Computer Science, Am Hubland, D-97074 Würzburg,Germany, {fischer,wolff}@informatik.uni-wuerzburg.de

Abstract

JAML is an XML notation for Java sourcecode. It retains all formatting informationand comments, hence the original source isobtained by stripping all XML–tags and –attributes. Simple queries allow to retrieve in-formation about the source that considerablyimproves the understanding of the program.

Keywords: XML, source code representation, source codeanalysis, tool

23.1 XML Representation of Source Code

The source code of a program is the most important meansof labour for a software developer. Even in times wheresource is partially generated automatically by case toolsor other integrated programming environments, it is essen-tial that the source code is readable and comprehensible.Hence, source is usually formatted to support structuralinformation. Linebreaks, empty lines, spaces and inden-tation group together or seperate code in order to enhancethe readability, properly chosen names and comments helpto understand the meaning. A lot of programming con-ventions therefore impose specific rules how to write thesource code. Some tools even process the contents of(structured) comments.On the other hand, a source code document is a structureddocument rather than a free-form text. It obeys certainrules given by the programming language. With these rulesinformation from the code can be extracted. The more in-formation we can get out of the source, the better.

Our goal is to retrieve as much information as possible outof the source text. We want to performe different kinds ofanalyses with different kinds of data in different degrees ofdetail.Usually, the compiler or parser extracts (and derives) allthe information from the source code that is needed tocompile the program. This includes information about pa-rameter types of a method or operation, points of variabledefinitions, etc. It does not include, however, comments orthe meaning of names. The parser stores its informationin internal data structures like a parse tree (abstract syntaxtree) and a symbol table. These structures usually are notaccessible, and, even if they are, they are hard to read andcomprehend without deeper knowledge of the compilationprocess.

23.2 JAML

Hence we propose to store all the data needed for variouschecks in an augmented version of the source code doc-ument. As we already stated, source code is a structureddocument. The best way to represent this structured doc-ument, is to choose an appropriate XML application [2]where all the structural information is represented as tags.Two rules are mandatory:

� The original source code is obtained by removing allthe tags.

� Comments and white spaces are not changed.

It is essential for program comprehension to have all infor-mation available.The developer will not recognize his source code or accept

Page 46: 5. Workshop Software Reengineering (WSR 2003)pi.informatik.uni-siegen.de/stt/23_2/01_Fachgruppenberichte/wsr2003.pdfSoftwaretechnik und 5.1.3 Reengineering und Wartung betrieblicher

any modifications or transformations on it, if these rulesdo not hold. Also exact localisation of problems would bewearisome in a changed/reformatted document.The rules are not fulfilled by JavaML [1], a XML repre-sentation for Java Source. The second rule is even failedby most parsers.In contrast to srcML [3] we restrict ourselves to Java, sincewe are interested in a working and applicable tool. Theideas certainly can be applied to other programming lan-guages.Our XML (JAML ) representation of the source docu-ment contains all the information the parser detected. Thisincludes detailed information about types of variables orcalls of methods. All additional information about theprogram is considered as meta-information and stored inXML-elements and -attributes. The JAML document fur-ther contains all the comments and text formatting proper-ties of the original source code. Hence, the original sourcecode may be regained by just stripping the tags.

23.3 Applications and Examples

Based on JAML many applications from querying thesource code for certain constructs to automated sourcecode quality checks, from improving program understand-ing to generating different views of the code can be real-ized. This section demonstrates some of the possibilities.

Querying

Information from the JAML -data can be queried using dif-ferent techniques. Applicable methods depend on the en-vironment but range from SQL or Prolog to more nativeXML languages like XQuery an XPath.We will now demonstrate some examples that retrieve in-formation from the JAML -document:

1. This expression selects the names of all publiclyavailable attributes(fields)://class-definition/field-declaration[@visibility=’public’]/ @name

2. This expression selects the signatures of all nativemethods://method-declaration[@native=’true’]/@signature

3. This expression selects all attributes in class Sortthat are of a type that implements Comparable://class-definition[@name=’Sort’]/field-declaration[@type-ref=//class-definition[all-interfaces/interface/@name= ’java.lang.Comparable’]/@name]/@name

Views

Given the highly annotated source document, now differ-ent views of the source can be generated.

1. Obvoiusly the unchanged source can be reextractedfrom the JAML -document. Furthermore, the con-tained structural information can be used to auto-matically highlight the code and even add e.g. typeinformation or documentation (from comments) atthe point of usage, that can be displayed on demand.

2. The class hierarchy of all classes used directly or in-directly in the code can be easily derived from thedocument.

3. The signatures of methods and associated commentscan be as easily retrieved from the document. Thiscan facilitate e.g. the automatic documentation gen-eration.

Navigation

JAML can also support navigation of the source code. Aview can be extended to include not only additional infor-mation but also to provide links, that enable the user tonavigate to other locations of interest for a certain codefragment. Class-, method- or attribute-definitions can belinked from where they are used. More such links, likefrom interface-methods to their implementations, can bethought of.

23.4 Conclusion and Future Work

In this paper we focused on simple applications of theJAML approach collected during the development of aJava program examination tool. These applications en-sure some quality features by enforcing given program-ming conventions, e.g. Clearly, all these tasks may beperformed by an appropriate Java compiler, but we haveshown that the XML approach is easier and more flexible.This ease of use and the flexibility proof that it is worthto assemble a comprehensive document containing all theinformation.Being defined by a DTD, JAML provides a solid founda-tion for tools to be developed. It also is used to ensure thevalidity of JAML documents before further processing aswell as the integrity of the JAML generator itself.

Bibliography

[1] G. Badros: JavaML: A Markup Language for JavaSource Code Proceedings of WWW9, Amsterdam,2000 http://www9.org/w9cdrom/342/342.html

[2] G. Fischer, J. Wolff v. Gudenberg JAML - An XMLRepresentation of Java Source Code, Würzburg Uni-versity, Technical Report, 2003

[3] J. Maletic, M. Collard, A. Marcus Source Code Filesas Structured Documents, Proceedings of IWPC2002, p.289-292

Page 47: 5. Workshop Software Reengineering (WSR 2003)pi.informatik.uni-siegen.de/stt/23_2/01_Fachgruppenberichte/wsr2003.pdfSoftwaretechnik und 5.1.3 Reengineering und Wartung betrieblicher

24 Reasoning about Source Code in XML–Representation

Marbod HopfnerUniversity of Tübingen, Wilhelm–Schickard Institute for Computer Science, Sand 13, D – 72076Tübingen, Germany, [email protected]

Dietmar Seipel, Jürgen Wolff von Gudenberg, Gregor FischerUniversity of Würzburg, Institute for Computer Science, Am Hubland, D – 97074 Würzburg,Germany, {seipel,wolff,fischer}@informatik.uni-wuerzburg.de

Overview of VISUR/RAR

We have implemented a PROLOG–tool VISUR/RAR forreasoning about various types of source code, such asPROLOG–rules or JAVA–programs. RAR provides re-trieval, update and inference operations for a deductivedatabase storing XML–representations of the investigatedcode, rules for analysing PROLOG–code based on suitabledependency graphs and rules for recovering the design ofJAVA–software; it uses a query language FNQUERY that isbased on path expressions. VISUR/RAR can be applied forimproving the design of rule–based systems, for comput-ing certain software metrics, and for supporting refactor-ing techniques. The obtained results are visualised usinggraphs or tables in VISUR.

Figure 24.1. Graphical User Interface of VISUR

VISUR/RAR is part of the toolbox DISLOG [7], which isalso developed under XPCE/SWI–PROLOG; the function-ality of DISLOG ranges from reasoning in disjunctive de-ductive databases to applications such as the managementand visualisation of stock information.

Representing Source Code in XML

The following JAVA–method implements the well–knownsorting algorithm merge sort on a “globally defined” ar-ray. The method for merging two sorted sub–arrays is notshown here.

public void sort (int l, int r) {if (l<r) {

int m = (l+r)/2;

sort(l,m);sort(m+1,r);merge(l,m,r); } }

In [3] an XML–language JAML is introduced for rep-resenting the parse trees of JAVA–code – we could alsouse other XML–representations such as JavaML and sr-cML. In the following we show an abbreviated JAML–representation for a small portion of the JAVA–code,namely the method invocation sort(l,m):

<method-invocationname="sort" qualifier=""argument-0="l" argument-1="m"signature= "sort(int, int)"return-type-ref="void"><le literal="sort" type-ref=""/><symbol kind="left-parenthesis"/><le literal="l" type-ref="int"/><symbol kind="comma"/><le literal="m" type-ref="int"/><symbol kind="right-parenthesis"/>

</method-invocation>

In VISUR/RAR complex structured objects – i.e., JAVA–programs and PROLOG–programs – are conceptionallyrepresented in XML–notation, which itself is physicallystored in a PROLOG–term representation called field no-tation. We query and manipulate this field notation usinga library FNQUERY developed in [7]. FNQUERY also con-tains additional, more advanced methods, such as the se-lection/deletion of all elements/attributes of a certain pat-tern, the transformation of sub–components according tosubstitution rules in the style of XSLT, and the manipula-tion of path or tree expressions.

Reasoning about Source Code

The following rules define some basic relations be-tween methods and classes using path expressions inFNQUERY. For example, references_cc/3 de-scribes that the class C1 has an attribute of the typeC2. This holds, if at arbitrary depth in the JAML –representation Code of the source code there exists aclass-definition–element U which itself containsa field-declaration V (at arbitrary depth) with anidentifier–subelement. In that case C1 is taken to bethe name–attribute of U and C2 is the type–attribute ofV.

Page 48: 5. Workshop Software Reengineering (WSR 2003)pi.informatik.uni-siegen.de/stt/23_2/01_Fachgruppenberichte/wsr2003.pdfSoftwaretechnik und 5.1.3 Reengineering und Wartung betrieblicher

references_cc(Code,C1,C2) :-U := Code^_^class-definition,V := U^_^field-declaration,C1 := U@name,C2 := V@type,_ := V^identifier.

calls_mm(Code,M1,M2) :-U := Code^_^method-declaration,V := U^_^method-invocation,M1 := U@signature,M2 := V@signature.

owns_cm(Code,C,M) :-U := Code^_^class-definition,V := U^_^method-declaration,C := U@name,M := V@signature.

For visualising the call structure of rule–based systemswe use the concept of dependency graphs, which is well–known from deductive databases [2]; the call graph of ourexample is shown in Figure 24.1.The second layer of rules is based on the basic predi-cates. These rules allow for a more complex analysis ofthe JAVA–source code. They have been proposed in [6] forthe pattern–based design recovery of JAVA–software. Forexample, aggregations and associations provide a higher–level view of the original design in contrast to the imple-mentational view of the source code:

calls_cc(Code,C1,C2) :-calls_mm(Code,M1,M2),owns_cm(Code,C1,M1),owns_cm(Code,C2,M2).

assoc_cc(Code,C1,C2) :-calls_cc(Code,C1,C2),references_cc(Code,C1,C2).

Conclusions

The integration of XML–processing, visualisation, andreasoning in the logic programming environment XPCE–PROLOG has created a powerful and flexible tool. VI-SUR/RAR allows for analysing various types of complexstructures including PROLOG–rules, JAVA–statements, andeven ER–diagrams.In the future, we will gradually extend VISUR/RAR withadditional features. E.g., it is conceivable to integrate apossibility to move predicates from one location in a fileto another location in another file (or the same file) usingdrag–and–drop operations; heuristic rules in RAR might beused for ensuring that the moves do not change the mean-ing of the program.

Bibliography

[1] S. Abiteboul, P. Bunemann, D. Suciu: Data on theWeb – From Relations to Semi–Structured Data andXML, Morgan Kaufmann, 2000.

[2] S. Ceri, G. Gottlob, L. Tanca: Logic Programmingand Databases, Springer, 1990.

[3] G. Fischer, J. Wolff von Gudenberg: JAML – AnXML–Representation of JAVA–Source Code, Techni-cal Report, University of Würzburg, 2003.

[4] M. Fowler: Refactoring – Improving the Design ofExisting Code, Addison–Wesley, 1999.

[5] M. Hopfner, D. Seipel: Comprehending and Visual-ising Software based on XML–Representations andCall Graphs. Proc. 11th Intl. Workshop on ProgramComprehension, IEEE Press, 2003.

[6] J. Seemann, J. Wolff von Gudenberg: Pattern–BasedDesign Recovery of JAVA Software, Proc. Intl. Sym-posium on the Foundations of Software Engineering1998.

[7] D. Seipel: Processing XML–Documents in PRO-LOG, Proc. 17th Workshop on Logic ProgrammingWLP 2002.

Tool-Präsentation

Bauhaus

Referent: R. Koschke([email protected])

Anbieter/Hersteller: Universität Stuttgart, Institut fürSoftwaretechnologie

Kurzbeschreibung: Das Forschungsprojekt Bauhaus inStuttgart erforscht Methoden und Techniken derProgrammanalyse und Architekturrekonstruktion.Im Bereich der Programmanalysen unterstützt

Bauhaus die Erkennung duplizierten Quellcodes,die Suche nach Verwendungen potentiell uninitial-isierten Variablen (globale Analyse) und totenRou-tinen, verschiedene Zeigeranalysen, Ermittlung vonSeiteneffekten sowie Program Slicing.Auf Architekturebene bietet Bauhaus Methodenzur Komponentenerkennung, Herleitung und Va-lidierung von Protokollen, Objektinteraktionen,Validierung von Software-Architekturen sowieLokalisierung funktionaler Eigenschaften im Quell-code.

Page 49: 5. Workshop Software Reengineering (WSR 2003)pi.informatik.uni-siegen.de/stt/23_2/01_Fachgruppenberichte/wsr2003.pdfSoftwaretechnik und 5.1.3 Reengineering und Wartung betrieblicher

Gegenwärtig ist das System für Programme in Canwendbar. Eine Erweiterung auf objektorientierteSysteme ist in Arbeit.Techniken im Bauhaus wurden bereits mehrfachim industriellen Umfeld erprobt. (http://www.bauhaus-stuttgart.de)

CCWB/1 CollCare Workbench

Referent: S. Knöpfler([email protected])

Anbieter/Hersteller: Collogia UnternehmensberatungGmbH (im Rahmen des BMBF-geförderten Ver-bundprojektes DARE (1996-1998) mit Verbundpart-ner FZI (Karlsruhe) und TWS (Stuttgart))

Kurzbeschreibung: CCWB/1 dient der interaktivenAnalyse (“Exploration”) des Kontroll- und beson-ders des Datenflusses von Programmen zum Zweckeder Code-Anpassung, etwa bei

� Migrationsprojekten (Wechsel vonHW/Betriebssystem, Übergang zu RDBMSetc),

� Wrapping von Legacy-SW (z.B. zwecks Ein-passung in OO-Architektur)

� und sonstigen begrenzten Umbauten (Einsatz-Beispiel: Y2k-Umstellung).

NetPhantom

Referent: C. Synwoldt([email protected])

Anbieter/Hersteller: TietoEnator Financial Solutions,Stockholm, Schweden

Kurzbeschreibung: Kapselung bestehender Mainframe-Applikationen, Integration mit modernen Architek-turen und Ergänzung der FunktionalitätDazu stehen die beiden Komponenten “Editor”(fürdie Gestaltung des grafischen Front-Ends) und“NetPhantom- Server” (als Ablaufumgebung undIntegrations-Hub) zur Verfügung.

CMAD

Referent: T. Rötschke([email protected])

Anbieter/Hersteller: Philips Medical Systems, Eind-hoven; TU Darmstadt

Kurzbeschreibung: CMAD erlaubt es, Trends vonMetriken auf Architekturniveau darzustellen unddarin zu navigieren.

FGM Flow Graph Manipulator

Referent: U. Kaiser([email protected])

Anbieter/Hersteller: pro et con GmbH, ChemnitzKurzbeschreibung: Reverse Engineering Tool

GUPRO - Generische Umgebung zum Pro-grammverstehen

Referent: V. Riediger([email protected])

Anbieter/Hersteller: Universität Koblenz-Landan, Insti-tut für Softwaretechnik

Kurzbeschreibung: GUPRO is an integrated workbenchto support program understanding of heterogenoussoftware systems on arbitrary levels of granularity.GUPRO can be adapted to specific needs by an ap-propriate conceptual model of the target software.GUPRO is based on graph-technology. It heavily re-lies on graph querying and graph algorithms. Sourcecode is extracted into a graph repository which canbe viewed by an integrated querying and browsingfacility. For C-like languages GUPRO browsing in-cludes a complete treatment of preprocessor facili-ties. (http://www.gupro.de)

PapView

Referent: U. Kaiser([email protected])

Anbieter/Hersteller: pro et con GmbH, ChemnitzKurzbeschreibung: Kontrollflußgraph-Darstellung von

C-Programmen

Strafunski

Referent: Ralf Laemmel([email protected])

Anbieter/Hersteller: R. Laemmel (VU & CWI, Amster-dam), J. Visser (SIG & CWI, Amsterdam)

Kurzbeschreibung: Strafunski is a Haskell-centeredsoftware bundle for generic programming and lan-guage processing. Strafunski provides program-ming support for generic traversal as useful for theimplementation of program analyses and transfor-mation components of language processors. Thedemo will illustrate Strafunski’s use for Cobol re-verse engineering. (http://www.cs.vu.nl/Strafunski/)