Die hier aufgeführte Literatur soll den Einstieg in die Thematik erleichtern. Darüber hinaus ist eigenständig Literatur zu recherchieren, beachten Sie hierfür die Recherchehinweise. Die angegebenen kurzen Absätze zum Thema sollen einen Einstieg ermöglichen, bei Fragen zu den Themen klären Sie diese bitte rechtzeitig mit dem Betreuer ab.
Das Seminar soll sich mit Visualisierung im Software Engineering beschäftigen. Dabei ist einmal die Frage interessant ist, welche speziellen Techniken des Software Engineerings im Bereich Visualisierung angewendet werden, andererseits ist zu fragen wie Software und Entwicklungsartefakte selbst dargestellt werden können.
In dem einen Fall wird also die Visualisierung die Anwendungsdomäne des Software Engineering, im anderen Fall ist es gerade umgekehrt. Entsprechend sind die einzelnen Themen des Seminars zweigeteilt: Zunächst soll untersucht werden, welche Techniken im Bereich der Visualisierung eingesetzt werden und diese aus Sicht des Software Engineerings kritisch beleuchtet werden. Im weiteren werden dann ausgewählte Anwendung der Visualisierung im Bereich Software und Software Engineering vorgestellt.
Zu den jeweiligen Themen sind bereits ein paar Literaturhinweise angegeben, die als Startpunkt dienen können. Besonders hervorzuheben ist dabei das Buch von Stephan Diehl [Diehl07a], welches sich wie ein roter Faden insbesondere durch den zweiten Teil des Seminar zieht und im Prinzip für alle Teilnehmer von Interesse ist. ([Diehl03a] ist mehr oder weniger eine gekürzte Version der Einleitung von [Diehl07a]). Weitere Sammelbände zum Thema Softwarevisualisierung sind [Stasko98a] und [Diehl01a]. Daneben sind die Beiträge zu einschlägigen Konferenzen und Workshops als Literatur heranzuziehen. Wichtigste Veranstaltungen sind hier:
In diesem ersten Bereich gehen wir der Frage nach, wie Visualisierungen technisch realisiert werden können. Dabei fokussieren wir auf Softwarevisualisierungen, also Darstellung von Software oder Entwicklungsartefakten, wie sie im zweiten Teil ausführlicher besprochen werden. Unser Blick wird dabei von Verfahren wie der modellgetriebenen Softwareentwicklung gelenkt, bei denen Modelle (etwa in Form von UML-Modellen) in den Mittelpunkt des Entwicklungsprozesses gerückt werden und dabei dargestellt (und editiert) werden müssen. Als Axiome nehmen wir also an, dass die Darstellung nicht losgelöst von der Semantik ist und dass das die Darstellungen nicht nur rein deskriptiven Charakter haben, sondern konstruktiv eingesetzt werden.
Wir interessieren uns hierbei weniger für spezielle bildgebende Verfahren, wie sie etwa in den Kursen zur Computergrafik [Straser02a] [Straser02b] vorgestellt werden, sondern beschränken uns auf Techniken, die Modelle aus dem Entwicklungsprozess, i.A. graphische Strukturen, darstellen und editierbar machen. Ebenso wenig behandeln wir explizit spezielle Frameworks für Visualisierung, teilweise können aber Beispiele mit eben solchen Werkzeugen umgesetzt werden.
Grundlage für die folgenden Themen sind die verwendeten Datenstrukturen -- sowohl der grafischen Elemente wie der zugrunde liegenden Modelle. Die meisten eingesetzten Frameworks, wie etwa GEF, setzen dabei das Model-View-Control-Muster (MVC) um. Da die dargestellten (semantischen) Modelle als Entwicklungsartefakte meist keine graphischen Informationen enthalten, werden dafür sogenannte Notationsmodelle eingesetzt. Interessant ist hierbei, wie die beiden Modelle (Notationsmodell und semantisches Modell) miteinander in Beziehung gesetzt werden und welche Muster beim Zugriff auf die Modelle Verwendung finden. Zum Vergleich soll eine an der Darstellung orientierte Datenstruktur dienen: sogenannte Szenegraphen, wie sie etwa bei Java3D zum Einsatz kommen.
Mit "Diagram Interchange" hat die OMG ein Standardnotationsmodell vorgeschlagen. Das Eclipse Graphical Modeling Framework (GMF) bringt sein eigenes Notationsmodell mit. Vergleichen Sie die Modelle aus Sicht des Software Engineering: Welche Vor- und Nachteile haben die Modelle, welche Überlegungen stecken dahinter. Wie können Notationsmodelle in das MVC integriert werden, welcher Aufwand entsteht dabei? Vielleicht können Sie die Diskussion anhand eigener Beispiele (mit GEF) veranschaulichen.
Die meisten Modelle, die bei der Softwareentwicklung verwendet werden, sind Graphen bzw. können als Graph interpretiert und dargestellt werden. Damit wird das Problem der Darstellung von Modellen auf die Darstellung von Graphen verallgemeinert. Kernproblem ist dabei die Knoten des Graphen so anzuordnen, dass bestimmte Optimierungskriterien erfüllt werden, etwa möglichst wenig sich überschneidende Kanten. Insbesondere bei zweidimensionalen Darstellungen sind hierbei eine ganze Reihe von Algorithmen bekannt, daneben soll auch auf spezielle Probleme eingegangen werden, wie die Darstellung in 3D oder dynamischer Modelle (wenn also Modellelemente hinzugefügt oder gelöscht werden).
Bei der Beschreibung der Algorithmen sind Kenntnisse aus dem Bereich der Graphentheorie unabdingbar. Gehen Sie allerdings bei der Ausarbeitung und im Vortrag nur so kurz wie möglich darauf ein. Geben Sie einen Überblick der bekannten Algorithmen und beschreiben Sie ein paar ausgewählte Verfahren im Detail. Vielleicht versuchen Sie, ein paar Algorithmen selbst zu demonstrieren oder gar zu implementieren (mit GEF und Zest) und beschreiben Sie, auf welche Probleme Sie dabei gestoßen sind.
Die Erstellung graphischer Editoren mit Frameworks wie Eclipse GEF erfolgt meist sehr kanonisch. Damit bietet sich die automatische Generierung graphischer Editoren an. Mit dem Eclipse Graphical Modeling Framework (GMF) existiert ein Tool, welches GEF erweitert und Tools zur Generierung eigener Editoren bietet. Dabei müssen die dargestellten Modelle mittels des Eclipse Modeling Framework umgesetzt sein. DiaGen und DiaMeta sind konkurrierende Ansätze.
Beschreiben Sie die Ansätze von GMF und DiaGen/DiaMeta im Vergleich. Beachten Sie dabei, dass zu Notationsmodellen ein eigenes Themen vergeben wird. Vielleicht können Sie anhand eines kleinen Beispieleditors selbst beide Tools evaluieren und dabei Probleme untersuchen. Wie können erstellte Editoren erweitert werden, welche Features bieten die Tools und welche Einschränkungen. Da das Thema sehr komplex ist, ist hier Gruppenarbeit möglich.
Die Darstellung von Modellen muss nicht zwangsläufig graphisch sein. Häufig sind textuelle Darstellungen ausreichend oder sogar besser geeignet. Die dabei eingesetzten Techniken sind aus dem Compilerbau hinlänglich bekannt. Gerade in den letzten Jahren wurden etliche Tools erstellt, die automatisch Parser und Editoren, inklusive Features wie Syntaxhighlighting oder Content-Assist, auf Grundlage von Grammatiken oder Modellen generieren. Im Rahmen von openArchitectureWare ist hierbei etwa xText zu nennen, dass auf Grundlage einer annotierten Grammatik entsprechende Editoren als Eclipse-Plugins generieren kann.
Beschreiben Sie kurz die notwendigen Grundlagen zum Bau von Parsern. Geben Sie einen Überblick über die Tools und gehen Sie dann näher auf ein Tool (xText) ein. Entwickeln Sie selbst eine kleine Demonstration mit xText und diskutieren Sie Features und Probleme von xText.
Im zweiten Teil wollen wir nun umgekehrt untersuchen, wie Software und Entwickungsartefakte visualisiert werden können -- Software Engineering wird nun also zur Anwendungsdomäne der Visualisierung. Im Gegensatz zur visuellen Programmierung ist die Softwarevisualsierung analytisch. D.h. gegebene Artefakte werden untersucht und dargestellt. Wir wollen diese Trennung hier nicht konsequent aufrecht erhalten. Ein UML-Diagramm kann sowohl der Analyse eines Systems dienen, aber natürlich kann auch ausgehend von einem Diagramm Code erstellt werden. Die folgenden Themen orientieren sich teilweise an den Titeln verschiedener Sessions der Softvis der letzte Jahre, wobei auch in anderen Bereichen entsprechende Beiträge vorkommen können.
Die im folgenden angegebenen Literaturhinweise sind bewusst knapp angegeben, die eigene Recherche ist hier wesentlicher Teil der Aufgabenstellung. Die Beiträge sollen verschiedene Lösungen vorstellen und vergleichen. Vielleicht können Sie das ein oder andere Tool selbst testen und entsprechend eigene Visualisierungen erstellen. Diskutieren Sie die Lösungen kritisch, dabei können Ihnen die ein oder anderen Ergebnisse aus dem Bereich der Evaluierung [Diehl07a, Chapter 6: Evaluation] helfen.
Die Visualisierung der Struktur von Programmen zu Analyse- und Verständniszwecken ist wohl die häufigste Art der Softwarevisualisierung, man denke hier nur an UML-Klassendiagramme. Allerdings stoßen diese Diagramme häufig an ihre Grenzen, die Lesbarkeit etwa von Aktivitätsdiagrammen mit Objektflüssen, größerer Sequenzdiagramme oder hierarchischer Zustandsdiagramme lässt häufig zu wünschen übrig. Daneben finden sich Lösungen für spezielle Probleme, wie die Visualisierung von Software Architekturen, Exceptions oder Entwurfsmustern.
Gerade bei der Suche nach Fehlern können gute Visualisierungen gute Dienste leisten. Das Thema soll sich, neben der Visualisierung zum Zwecke des Testens, Debuggens oder der Fehlersuche, auf die Visualisierung der Ausführung konzentrieren. Mögliche Anwendungen sind also visuelles Debuggen, die Lokalisierung von Fehlern oder "Code Smells", die Darstellung von Execution Traces oder die Animation von Algorithmen und Programmen.
Die Visualisierung der Evolution von Systemen wurde bislang eher weniger untersucht. Häufig wird "Software Evolution" mit Entwicklungsprozess gleichgesetzt, die Veränderung in Bezug auf die Artefakte während der Entwicklung eines Systems betrachtet. Ein verwandtes Thema ist die Darstellung von Metriken: Die Veränderung etwa von bestehenden Systemen führt häufig zu veränderter Produktqualität, die dann wiederum mittels der Visualisierung von Metriken dargestellt werden kann.
FernUniversität in Hagen, Lehrgebiet Software Engineering, D-58084 Hagen, Telefon: +49 (2331) 987-2964