Softwarevisualisierung - More than meets the eye (Stand der Technik und zukünftige Perspektiven) Vortrag von Dr. Stephan Diehl In dem Vortrag von Dr. Stephan Diehl ging es darum, was Softwarevisualisierung ist, wozu sie gebraucht wird und was sie bewirkt. Softwarevisualisierung ist ein wichtiger Teil der Softwareentwicklung. Bereits Aristoteles sagte ca. 350 vor Christus: "Denken ohne Bilder ist unmöglich." Auch René Descartes war der Meinung, dass die (visuelle) Darstellung von wissenschaftlichen Problemen oder Aspekten die Forschung vorantreibt: "Imagination oder Visualisierung und besonders die Benutzung von Diagrammen haben einen entscheidenden Anteil an der wissenschaftlichen Forschung". Emanuel Kant treibt diese Theorie noch weiter und sagt: "Der Verstand vermag nichts anzuschauen und die Sinne nichts zu denken. Nur daraus, dass sie sich vereinigen, kann Erkenntnis entspringen." Die Softwarevisualisierung bedient sich sehr oft der Metaphern: es wird z.B. von Bäumen, Schlangen, Fenstern oder Akten gesprochen. Im Englischen sind diese Metaphern noch viel deutlicher zu erkennen. Da ist z.B. die Rede von Trees, Windows (man beachte das Betriebssystem namens "Fenster"), Files und Folders etc. Die Softwarevisualisierung bedient sich aber auch der Techniken aus Computergrafik, Softwaretechnik und Programmiersprachen und vereinfacht stark das Arbeiten mit und am Computer: 40 von 100 befragten Forschern halten Softwarevisualisierung unabdingbar für ihre Arbeit, 42% halten sie für wichtig, aber nicht kritisch, also nicht absolut notwendig. In Bezug auf Softwarevisualisierung gibt es eine enggefasste und eine weitgefasste Definition. Die enggefasste Definition sagt, dass Softwarevisualisierung die Visualisierung von Algorithmen und Programmen ist. Im Gegensatz dazu sagt die weitgefasste Definition, dass Softwarevisualisierung die Visualisierung von Artefakten ist, die mit Software und deren Entwicklungsprozess verbunden sind. Kurz: die Softwarevisualisierung ist die Visualisierung von Struktur, Verhalten und Evolution von Software. Aus der Aufteilung der Softwarevisualisierung in Bereiche nach Price et al. im Jahre 1993 entsprangen zwei Kategorien: zum einen die Algorithmenvisualisierung, zum anderen die Programmvisualisierung. Die Algorithmenvisualisierung umfasst die statische Algorithmenvisualisierung und die Animation von Algorithmen. Die Programmvisualisierung dient zur Daten- und Codeanimation. Statische Codevisualisierung und statische Datenanimation fasst man unter dem Begriff "Visuelle Programmierung" zusammen. Die Vorteile der Softwarevisualisierung liegen auf der Hand. Zum einen kann man sich die Software durch die Visualisierung sehr gut vorstellen, was zu ihrem besseren Verständnis führt. Damit eng verknüpft ist der Punkt, dass somit die Fehlersuche erleichtert und dadurch eine Erhöhung der Produktivität erzielt werden kann. Das Resultat dieser Überlegungen ist, dass man durch Softwarevisualisierung also Zeit und somit Geld einspart. Was sich im Moment viele noch wünschen, ist die Integration von Softwarevisualisierungs-Werkzeugen in andere Werkzeuge und einen besseren Import/Export von Daten und Visualisierungen. Es gibt einige berühmte Beispiele für Softwarevisualiserung. Diese wären z.B. CallGraph, X-Tango, Rube, PSDoom oder SeeSoft. Das Entwicklungswerkzeug aiCall visualisiert Kontrollflussgraphen von eingebetteten Anwendungsprogrammen. Durch dieses Programm kann z.B. ein Stack-Overflow leicht gefunden und eliminiert werden, indem die Ergebnisse der Programmanalyse (in dem Fall z.B. die Stackbelegung) dargestellt werden. X-Tango dient zur Algorithmenanimation. Mann kann z.B. Suchbäume, Listen oder Sortieralgorithmen wie z.B. Bubblesort, Quicksort oder Heapsort darstellen. Anim3D visualisiert Algorithmen in 3D. rube dient zur Modellierung und 3D-Simulation. Es visualisiert das Betriebssystem in der Form eines Hauses. Die Kern-Komponenten werden als Stockwerk dargestellt; in jedem Stockwerk gibt es dann Zimmer und in jedem Zimmer Tische. Die Prozesse wandern (im wahrsten Sinne des Wortes) dann z.B. von Tisch zu Tisch oder im restlichen Haus herum. PSDoom visualisiert das Betriebssystem. Dabei werden z.B. die laufenden Prozesse als Monster dargestellt, die man dann - wörtlich genommen - abschiessen oder "schwächen" (niedrigere Priorität geben) kann. SeeSoft exisitiert schon seit geraumer Zeit und dient der Visualisierung der Evolution von Software. Beispielsweise kann eine Codezeile in einem Computerprogramm als Pixel dargestellt werden oder z.B. auch als Linie. Diese Pixel sind verschieden gefärbt, sodass man ohne große Mühe an der Färbung das Alter einer Codezeile ablesen kann. Evaluation Um ein statisches Bild, wie z.B. eine Darstellung, auf einem Blatt Papier besser zugänglich zu machen, versuchte man über sogenannte "Flowlinks", Animation mit einzubringen. Dies muss man sich so vorstellen, dass verschiedene Knoten durch Pfeile miteinander verbunden sind und eine Markierung - sei es farblich oder mit Buchstaben oder Zahlen - diesen gewissen Grad an Animation ermöglicht. Die Erfahrung hat gezeigt, dass man durch die Arbeit mit Flowlinks ca. 20% schneller ist, wenn man die Variante nimmt, die ohne Labels (Bezeichnungen der Pfeile mit Buchstaben oder Zahlen) auskommt. In der Variante, die vorzuziehen ist, sind die Pfeilstriche und die -spitzen eingefärbt (weiß, schwarz und grau). Wenn man z.B. mit einem grauen Pfeilrumpf beginnt und die Spitze dieses Pfeils weiß ist, so weiß man genau, dass man auf dem Pfeil vom Knoten weiter wandern muss, der einen weißen Rumpf hat. Eine andere Möglichkeit, Software darzustellen sind sogenannte Geons. Dabei werden einzelne Objekte durch Form und Farbe voneinander abgegrenzt. Alle Unterobjekte haben jedoch die gleiche Form und werden nur durch ihre Farbe getrennt. Zur Softwarevisualisierung gibt es generell zwei Zugänge: 1. Von der Informationsvisualisierung zur Softwarevisualisierung: Hier ist es so, dass man sich die tollsten Bilder ausgedacht hat und man lediglich noch Daten braucht, um die "Konstruktionen" anzuwenden. 2. Von der Softwaretechnik zur Softwarevisualisierung: Bei diesem Zugang hat man die Daten wie z.B. Programmcode, Softwarearchive, Ergebnisse von Testläufen oder Dokumentationen zur Verfügung. Was man hier lediglich braucht, sind die passenden Bilder zu den vorhandenen Daten. Beobachtet wurde, dass sehr wenige Forscher konsequent den Einsatz von Softwaretechnik-Techniken in verschiedenen Bereichen untersuchen. Als die zwei einzigen Namen wären Stasko und Eick zu nennen. Oft ist es so, dass Forscher die in ihrem Gebiet existierenden Techniken ad hoc anwenden und nachher mit ihren Ergebnissen sehr unzufrieden, wenn nicht sogar enttäuscht, sind. Aus den Punkten Datenerfassung, Analyse und Visualisierung besteht die Visualisierungspipeline. Datenerfassung gehört eindeutig zur Softwaretechnik. Die Analyse ist gleichermaßen in Softwaretechnik und Visualisierung vertreten. In dieser Visualisierungspipeline kann man nun navigieren (Visual Steering): z.B. kann man von der Visualisierung wieder zurück zur Analyse oder sogar ganz zur Datenerfassung zurückkehren. Die Arbeitsgruppe von Herrn Diehl beschäftigt sich mit Datenerfassung (Reifikation), Analyse (Fokussierung) und Visualisierung (Foresighted Graphlayout). Das ganze Projekt nennt sich Ganimal. Eine Studie von Herrn Diehl aus dem Jahre 2002 ergab, dass in den Bereichen "Static Structure" und "Concrete Execution" relativ viele Arbeiten veröffentlicht wurden und in den Bereichen "Abstract Execution" und "Evolution of Static Structure" jeweils weniger als zehn. Dies will er zum Anlass nehmen, die Forschungen seiner Arbeitsgruppe auf die letzeren Fachgebiete zu fokussieren. Ich persönlich halte Softwarevisualisierung für einen wichtigen Teil der Entwicklung von Software. Gerade bei komplexeren Strukturen können entsprechende Tools durch Visualisierung helfen, Quelltexte besser zu verstehen oder sich einen Überblick über den Verlauf und Fortschritt eines Projekts zu machen. Programme wie z.B. PSDoom sind zwar nett, aber eher "just for fun" als produktiv. Mich persönlich verwirrt die 3D-Darstellung von Algorithmen wie z.B. bei Anim3D.