Vorlesung Software-Reengineering Prof. Dr. Rainer Koschke Arbeitsgruppe Softwaretechnik Fachbereich Mathematik und Informatik Universität Bremen Wintersemester 2006/07 Überblick I 1
1 Über diese Folien Lernziele Reengineering Kontext Programm-Visualisierung Statische Programm-Visualisierung Dynamische Programm-Visualisierung Visualisierung von Metriken Klassenblaupause Evolutionäre Aspekte Zusammenfassung Wiederholungsfragen Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2006/2007 3 / 45 Über diese Folien Diese Folien entstammen einer Präsentation von Michele Lanza (Universität Bern), mit dessen freundlicher Genehmigung. Die Unterschiede zum Original sind: Übersetzung ins Deutsche Kleinere Restrukturierungen und Verkürzungen Zusatz Spektrograph (Courtesy Jingwei Wu, Richard C. Holt, Ahmed Hassan, University of Waterloo, Canada) Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2006/2007 4 / 45
Software-Visualisierung I Lernziele Software-Visualisierung in einem Reengineering-Kontext Statische Code-Visualisierung Dynamische Code-Visualisierung Visualisierung von Metriken Visualisierung der Evolution Leichtgewichtige Ansätze Kontext Reengineering ist meist interaktiv Große Datenmengen müssen verstanden werden Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2006/2007 5 / 45 Software-Visualisierung II Software Visualization is the use of the crafts of typography, graphic design, animation, and cinematography with modern human-computer interaction and computer graphics technology to facilitate both the human understanding and effective use of computer software. Price, Baecker and Small, Introduction to Software Visualization Software is intangible, having no physical shape or size. Software visualisation tools use graphical techniques to make software visible by displaying programs, program artifacts and program behaviour. Thomas Ball Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2006/2007 6 / 45
SV im Reengineering-Kontext Ziele: Reduktion der Komplexität Herausforderungen: Skalierbarkeit Aufgabenabhängigkeit der Visualisierung Art der Visualisierung Begrenzte Ressourcen Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2006/2007 7 / 45 Programm-Visualisierung Program visualization is the visualization of the actual program code or data structures in either static or dynamic form. [Price, Baecker und Small] Gebiete Statische Programm-Visualisierung Dynamische Programm-Visualisierung Aufgaben Verschiedene Sichten generieren Inferenzen ermöglichen Spezifische Probleme (aktives Forschungsgebiet) Effiziente Ausnutzung des Platzes, Kantenüberschneidungen, Layout-Probleme, Fokus, Human-Computer-Interaction,... Keine Konventionen (Farben, Symbole, Interpretation,... ) Granularität? Ganze System, Subsysteme, Module, Klassen, Hierarchien,... Wofür, wie und wann anzuwenden? Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2006/2007 8 / 45
Statische Programm-Visualisierung Visualisierung von Information, die statisch abgeleitet ist. Hängt von Sprache und Sprachparadigma ab: objektorientierte Sprachen: Klassen, Methoden, Attribute, Vererbung,... prozedurale Sprachen: Prozeduren, Aufrufe,...... Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2006/2007 9 / 45 Klassendiagramme Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2006/2007 10 / 45
Klassendiagramme (wie von herkömmlichen CASE-Werkzeugen dargestellt... ) Vorteile: Stellen objektorientierte Konzepte dar Geeignet für kleine Ausschnitte Nachteile: Skalieren nicht Benötigen Filter für relevante Informationen Nur voreingestellte Sichten Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2006/2007 11 / 45 Beispiel 1a: Rigi Entity-Relationship- Visualisierung generische Präsentation durch typisierte Graphen Probleme: Filterung Navigation Skalierbarkeit Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2006/2007 12 / 45
Beispiel 1b: Rigi Entities können gruppiert werden Vorteile: Skaliert besser generisch Nachteile: Wenig Programmiersprachensemantik Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2006/2007 13 / 45 Beispiel 2: Klassen-Hierarchien Jun/OpenGL Smalltalk Klassenhierarchie Probleme: Keine weitere Bedeutung der Farbe Überladen Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2006/2007 14 / 45
Beispiel 3: Tree Maps Vorteile: hierarchisch (m.e.) 100% Raumnutzung skaliert Nachteile: Grenzen Wirres Bild Interpretation Nur Blätter Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2006/2007 15 / 45 Beispiele 4 und 5 Euklidische Kegel Vorteile: Nutzen dritte Dimension Nachteile: Mangelnde Tiefe Navigation Hyperbolische Bäume Vorteile: Fokus ist wählbar Dynamisch Nachteile: Copyright Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2006/2007 16 / 45
Dynamische Programm-Visualisierung Visualisierung dynamischen Verhaltens Ausführungs-Trace Ressourcenverbrauch (Speicher/Laufzeit) Objekt-Interaktion... Schritte: 1 Code-Instrumentierung 2 Gewinnung der Laufzeitinformation 3 Auswertung der Laufzeitinformation 4 Visualisierung der Auswertung Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2006/2007 17 / 45 Beispiel 1: JInsight (http://www.research.ibm.com/jinsight) Visualisierung von Ausführungs-Traces Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2006/2007 18 / 45
2006-12-13 Vorlesung Software-Reengineering Dynamische Programm-Visualisierung Beispiel 1: JInsight (http://www.research.ibm.com/jinsight) Beispiel 1: JInsight (http://www.research.ibm.com/jinsight) Visualisierung von Ausführungs-Traces Visualisiert Sequenzdiagramme; jeder vertikale Streifen repräsentiert ein Objekt; die Farbe des Streifens kodiert die Klasse. Die Zeit schreitet von oben nach unten fort. Aufrufe sind durch Kanten zwischen Objekten dargestellt und haben die aufgerufene Methode als Label. Die zeitlichen Bereiche, in denen ein Objekt tatsächlich aktiv sind (d.h. nicht nur eine andere Methode aufrufen, sondern tatsächlich selbst rechnen), sind im Streifen etwas heller dargestellt. JInsight erlaubt es auch, wiederkehrende Aufrufmuster automatisch zu erkennen und darzustellen. Ähnliche, aber leicht unterschiedliche Muster können dabei übereinandergelegt werden, um so die Unterschiede darzustellen. Beispiel 2: Aufrufmatrix für Klassen einfach skaliert reproduzierbar Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2006/2007 19 / 45
2006-12-13 Vorlesung Software-Reengineering Dynamische Programm-Visualisierung Beispiel 2: Aufrufmatrix für Klassen Beispiel 2: Aufrufmatrix für Klassen einfach skaliert reproduzierbar Inter-Class Call Matrix: This view provides an overview of the communication between classes. The matrix plots which classes call which other classes. Classes are arranged along both axes in the order they are instantiated. The color of the dots indicate the frequency of that communication. Dynamische SV: Probleme Code-Instrumentierungsproblem Logging, erweiterte Virtual Machines, Method-Wrapping Skalierbarkeitsproblem Fülle der Details Traces werden sehr schnell enorm groß Vollständigkeitsproblem Information gilt nur für betrachtete Szenarien Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2006/2007 20 / 45
Visualisierung von Metriken (Lanza 2003; Lanza und Ducasse 2003) Kombination von Metriken und Software-Visualisierung Graph-Repräsentation Bis zu fünf Metriken bestimmen die Visualisierung der Knoten: Größe (1+2) Farbe (3) Position (4+5) Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2006/2007 21 / 45 System Complexity View Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2006/2007 22 / 45
Method Efficiency Correlation View Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2006/2007 23 / 45 Inheritance Classification View Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2006/2007 24 / 45
2006-12-13 Vorlesung Software-Reengineering Visualisierung von Metriken Inheritance Classification View Inheritance Classification View Added: Ganz neue Methoden. Overridden: Ererbt und redefinierte Methoden. Extended: Overridden + Aufruf der gleichen Methode via super (Smalltalk), d.h. Aufruf zur entsprechenden Methode, die überschrieben wurde. Data Storage Class Detection View Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2006/2007 25 / 45
2006-12-13 Vorlesung Software-Reengineering Visualisierung von Metriken Data Storage Class Detection View Data Storage Class Detection View Von links nach rechts nach Breite (Number of Methods) geordnet. Dieselbe Metrik (Number of Methods) wird hier auf dreifache Weise dargestellt: Breite, Position innerhalb der Ordnung und Farbe. Dadurch kann ein verstärkender Effekt erzeugt werden. Granularitätsproblem Hübsch... aber was verbirgt sich dahinter? Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2006/2007 26 / 45
Klassenblaupause (Ducasse und Lanza 2005) Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2006/2007 27 / 45 2006-12-13 Vorlesung Software-Reengineering Klassenblaupause Klassenblaupause (Ducasse und Lanza 2005) Klassenblaupause (Ducasse und Lanza 2005) Die Einteilung hängt etwas von der Ausdruckskraft der Programmiersprache ab, auch von dem, was der Benutzer tatsächlich sehen möchte: aus Sicht der Spezifikation bzw. aus Sicht der tatsächlichen Verhältnisse. Initialization: Kontruktoren (soweit die Programmiersprache sie explizit darstellt, auch: Methoden, die Init und ähnliche Zeichenketten im Namen enthalten oder solche, die einen new-operator für die Klasse enthalten Interface: öffentliche Methoden; auch: solche, die tatsächlich von außerhalb aufgerufen werden (Accessors sind in einer anderen Kategorie; siehe unten) Implementation: versteckte Methoden bzw. solche, die von außerhalb nicht benutzt werden Accessors: Öffentliche Methoden, die nichts weiter tun als ein Attribut zu setzen bzw. zu lesen Attribute: versteckte Attribute
Semantische Information Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2006/2007 28 / 45 Kategorisierung von Klassen Basiert auf Klassenblaupausen Zwei Perspektiven: Einzelne Klasse Vererbungskontext Klassenblaupause für jede einzelne Klasse Sind als Baum angeordnet Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2006/2007 29 / 45
Klassenblaupause: Data Storage Viele Attribute Kann viele Zugriffsoperationen haben (Accessors) Harmloses Verhalten Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2006/2007 30 / 45 Klassenblaupause: Wide Interface Viele Methoden in der Schnittstelle Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2006/2007 31 / 45
Klassenblaupause: Large Implementation Geschachtelte Aufrufstruktur Viele Methoden Hohe Komplexität Breite Schnittstelle Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2006/2007 32 / 45 Evolutionäre Aspekte (Lanza 2003) Die Gegenwart ist oft verständlicher, wenn man die Vergangenheit kennt. Betrachtung von Aspekten des Systems über die Zeit. Metrikwerte können besser eingeschätzt werden. Erlaubt, Trends auszumachen. Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2006/2007 33 / 45
Evolutionsmatrix Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2006/2007 34 / 45 Kategorisierung von Klassen anhand der Evolutionsmatrix Dargestellte Metriken für Klassen: NOM (number of methods) NOA (number of attributes) Kategorisierung anhand der individuellen Evolution und der System-Evolution : Pulsar Supernova Weißer Zwerg Roter Riese Dornröschen Eintagsfliege Methusalem Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2006/2007 35 / 45
Pulsar & Supernova Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2006/2007 36 / 45 Weißer Zwerg, Roter Riese, Dornröschen Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2006/2007 37 / 45
Eintagsfliege & Methusalem Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2006/2007 38 / 45 Fallstudie MooseFinder (38 Versionen) Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2006/2007 39 / 45
Spektrograph x-achse: Zeit; y-achse: Softwareeinheit; Farbe: #commits Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2006/2007 40 / 45 2006-12-13 Vorlesung Software-Reengineering Evolutionäre Aspekte Spektrograph Spektrograph x-achse: Zeit; y-achse: Softwareeinheit; Farbe: #commits Courtesy Jingwei Wu, Richard C. Holt, Ahmed Hassan, University of Waterloo, Canada
Färbung im Spektrograph linearer Gradient exponentieller Gradient Stufen Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2006/2007 41 / 45 Software-Visualisierung (SV) I SV ist unabdingbar im Reengineering-Kontext Match-Mismatch-Hypothese: problem-solving performance depends on whether the structure of a problem is matched by the structure of a notation Gilmore und Green Jede SV betont bestimmte Information und vernachlässigt andere Information. Geeignete SV ist abhängig von der zu lösenden Aufgabe. Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2006/2007 42 / 45
Software-Visualisierung (SV) II Alphabetismus der SV Wie drücke ich es aus? Wie interpretiere ich es? Vieles noch in der Forschung, wenig in kommerziellen Werkzeugen Software-Wahrnehmung: Andere menschliche Sinne werden genutzt Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2006/2007 43 / 45 Wiederholungs- und Vertiefungsfragen I Wofür eignen sich Tree Maps und wie sind sie zu interpretieren? Welche Probleme gibt es bei der Visualisierung dynamischer Daten? Wie lassen sich Metriken visualisieren? Was ist eine Klassenblaupause? Wie lassen sich damit Klassen charakterisieren? Welche zusätzlichen Aspekte lassen sich durch die Visualisierung evolutionärer Daten gewinnen? Was sagt die Match-Mismatch-Hypothese (Gilmore und Green) aus? Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2006/2007 44 / 45
1 Ducasse und Lanza 2005 Ducasse, Stephane ; Lanza, Michele: The Class Blueprint: Visually Supporting the Understanding of Classes. In: IEEE Computer Society Transactions on Software Engineering 31 (2005), Januar, Nr. 1, S. 75 90 2 Lanza 2003 Lanza, Michele: Object-Oriented Reverse Engineering - Coarse-grained, Fine-grained, and Evolutionary Software Visualization. http: //www.inf.unisi.ch/faculty/lanza/downloads/lanz03b.pdf, University of Bern, Dissertation, 2003 3 Lanza und Ducasse 2003 Lanza, Michele ; Ducasse, Stephane: Polymetric Views A Lightweight Visual Approach to Reverse Engineering. In: IEEE Computer Society Transactions on Software Engineering 29 (2003), Nr. 9, S. 782 795 Rainer Koschke (Univ. Bremen) Vorlesung Software-Reengineering WS 2006/2007 45 / 45