Projekt Transport semantischer Informationen in der Programmvisualisierung

Überblick

Ziel dieses Projektes ist die Entwicklung eines Systems, das zur Laufzeit eine Visualisierung von Programmen erzeugt, ohne darin zusätzlichen Code einfügen zu müssen. Durch den Transport semantischer Information über den aktuellen Programmzustand soll die Visualisierung besonders aussagekräftig sein. Programmvisualisierung (eigentlich genauer: Software - Visualisierung) ist schon seit Jahren ein wichtiges Forschungsgebiet in der Informatik. Man versteht darunter "die Verwendung von Schrift, Grafik, Animation und Film in Mensch - Computer Systemen zum besseren Verstehen und Benutzen von Software" [PRBA93]. Dieses erhöhte Verständnis kann durch eine Analyse des Programmcodes selbst erreicht werden oder durch eine Beobachtung des Programmablaufs. Ersteres resultiert in Metriken oder automatisch generierten alternativen Darstellungsweisen des Programms [RE85], zweites in Methoden zur Visualisierung des Programmzustands bzw. dessen zeitliche Änderungen. Neben den allgemeinen Visualisierungssystemen zur Programmentwicklung und Fehlersuche gibt es eine Reihe von spezialisierten Systemen zur Animation von Algorithmen, ein bereits gut behandeltes Forschungsgebiet [BR92, ST92, FO93]. Ein zusätzlicher Bedarf an leistungsfähigen Visualisierungswerkzeugen ist in den letzten Jahren durch die Technik der objektorientierten Programmierung entstanden: der Ablauf solcher Programme läßt sich nicht mehr wie bei konventioneller Programmierung einfach aus dem Programmcode durch Verfolgen der Prozedur-aufrufe erkennen, sondern ist durch polymorphe Objekte oft erst zur Laufzeit festgelegt (siehe Yo - yo -Effekt [TAGA89]). Ebenso ist es in solchen Systemen schwer, Daten - und Kontrollfluß eindeutig zu trennen, da objektorientierte Programme meist durch Datenanalyse und nicht wie konventionelle Programme durch eine Dekomposition des Ablaufs entworfen werden.

Verwandte Forschungsergebnisse

Die bestehenden Software - Visualisierungssysteme lassen sich in zwei Gruppen einteilen. Zum einen existieren eine Reihe von Systemen, die quasi in Erweiterung eines Debuggers die Daten eines Programms bzw. dessen Kontrollfluß visualisieren. Auf der anderen Seite stehen die Systeme zur Unterstützung der Lehre, insbesondere zur Animation von Algorithmen.

Projektziel

Das Projekt soll ein System hervorbringen, das automatisch ansprechende und aussagekräftige Visualisierungen für Programme erzeugt, ohne daß der Programmierer zusätzlichen Code für die Visualisierung erstellen muß. Der Anwender des Visualisierungssystems soll während der Laufzeit auf die Visualisierung Einfluß nehmen und die Präsentation von anzuzeigenden Daten ändern können. Im Gegensatz zu den bestehenden Systemen, die obigen Anforderungen genügen, soll das System die Daten nicht in der von Debuggern gewohnten Weise (Ziffernfolgen) präsentieren, sondern semantische Informationen aus den Daten gewinnen und anzeigen. Beispielsweise soll anstatt der konventionellen Anzeige einer Hash - Tabelle als Feld semantische und statistische Information über das Objekt ausgegeben werden: Piktogramm als Symbol für die Datenstruktur Hash - Tabelle; Belegungsfaktor; durch-schnittliche Anzahl der Kollisionen pro Zugriff usw.. Durch diese übergeordnete Visualisierung soll eine Datenverdichtung erreicht werden, sodaß auch komplexe Programme noch gut beobachtet werden können. Außerdem soll es dem Programmierer durch geeignete Wahl der Visualisierungsmethoden möglich sein, während des Programmablaufs immer eine aktuelle Übersicht über den momentanen Zustand des Programmes zu haben. Kritische Zustände, die sich in der Repräsentation eines Objekts widerspiegeln, können durch Zuordnung eines akustischen Signals oder einer Änderung der Darstellung einfach erfaßt werden. Beispielsweise könnte die Hintergrundfarbe der Hash - Tabelle auf Rot wechseln, wenn ein kritischer Belegungsfaktor überschritten ist.

Anwendungsgebiete

Programmentwicklung

Eine auch für umfangreiche objektorientierte Programme geeignete Visualisierung würde ein wichtiges Hilfsmittel zur besseren Beherrschung der systemimmanenten Komplexität darstellen und damit ein wesentlicher Beitrag zur Steigerung der Produktivität bei der Programmentwicklung insgesamt schaffen. Durch die Visualisierung von Objekten auf einer höheren Abstraktionsebene werden auch solche Fehler bzw. Designschwächen im Programm besser sichtbar, die nicht ein offensichtlich fehlerhaftes Programmverhalten zur Folge haben. Wichtig ist dabei, daß die Programmierer auf die bereitgestellten Visualisierungskomponenten zurückgreifen können, ohne das zu beobachtende Programm verändern oder anpassen zu müssen.

Simulation

Wenn Simulationen auf einer zur Verfügung gestellten Klassenbibliothek aufgebaut werden, dann ergibt sich automatisch eine einfache Visualisierung des Simulationslaufes. Die Visualisierung selbst ist damit für solche Aufgaben die Benutzerschnittstelle.

Prozeßvisualisierung (Prototyping)

Die Suche nach einer passenden Darstellung ist eines der Hauptprobleme in der Prozeßvisualisierung. Es ist denkbar, daß sich das Visualisierungssystem als Prototyping Werkzeug für Prozeßvisualisierungsaufgaben einsetzen läßt.

Didaktik

Die gedankliche Umsetzung der Textzeilen in einem Quellcode in den implizierten Programmablauf fällt den meisten Programmierneulingen schwer. Eine Visualisierung der zur Laufzeit vorliegenden Datenstrukturen kann hier helfen. Die automatisch generierte Visualisierung hat hier gegenüber üblichen Algorithmen - Animationssystemen besondere Vorteile, da von Lernenden nicht erwartet werden kann, daß sie neben der Implementierung ihres Programms auch noch eine (fehlerlose!) Visualisierung selbst erstellen. Mit programmierbaren Systemen festgelegte Animationen von bestimmten Algorithmen sind dem hier vorgeschlagenen Ansatz von der grafischen Aufbereitung vermutlich überlegen. Solche Systeme funktionieren allerdings auf keinen Fall automatisch, außerdem können sich durch verschiedene abstrakte Visualisierungen durchaus interessante und neue Blickwinkel auf Algorithmen ergeben