Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Grundlegende Analysen & Zwischendarstellungen Aus: Programmverstehen und statische Analysetechniken, Kapitel 5 Seminar 3D-Visualisierung von objektorientierten.

Ähnliche Präsentationen


Präsentation zum Thema: "Grundlegende Analysen & Zwischendarstellungen Aus: Programmverstehen und statische Analysetechniken, Kapitel 5 Seminar 3D-Visualisierung von objektorientierten."—  Präsentation transkript:

1 Grundlegende Analysen & Zwischendarstellungen Aus: Programmverstehen und statische Analysetechniken, Kapitel 5 Seminar 3D-Visualisierung von objektorientierten Codestrukturen, WS 06/07 Prof. Dr. E.-E. Doberkat, Dr. A. Fronk Priv.-Doz. Dr. G. Rinkenauer, Dr. D. Gude Jasper Lauterbach

2 Einführung Worum geht es? –Techniken aus dem Compilerbau, die das Programmverstehen unterstützen sollen. Welche Techniken sind das? –Grundlegendes wie lexikalische u. syntaktische Analyse. –Zusätzliches wie Kontroll- und Datenflussanalyse.

3 Lexikalische Analyse Fasst einzelne Zeichen zu Lexems zusammen. Unterstützt Programmverstehen durch –Hervorheben von Schlüsselwörtern, Variablen, etc. w, h, i, l, e while-Schlüsselwort.

4 Syntaxanalyse Liefert Struktur des Programms (Syntaxbaum). Unterstützt Programmverstehen durch –Formatierung des Codes, –Hervorheben von Variablen, Klassen, Sichtbarkeit, etc.

5 Symbolanalyse Erstellt Verknüpfungen im Syntaxbaum. –Z. B. Deklaration einer Variablen mit ihrer Benutzung. Unterstützt Programmverstehen durch Darstellung dieser Verknüpfungen.

6 Kontrollflussanalyse Untersucht das Zusammenwirken funktionaler Einheiten wie –Basisblöcken (intraprozedural) und –Prozeduren (interprozedural). read(x) a = 0 x > max x < min x = max a = 1 x = min a = 1 print(x) print(a) f t f t

7 Kontrollflussanalyse (Forts.) Unterstützt das Programmverstehen –durch grafische Darstellung (statt Text) –durch Übersichtsinformation (Wo wird diese Methode überall benutzt?; Wo wird diese Klasse verwendet?)

8 Datenflussanalyse Baut auf den Knoten des Kontrollflussgraphen auf. Zeigt Abhängigkeiten in der Variablenbenutzung auf. = Datenabhängigkeit f f t t print(x) print(a) read(x) a = 0 x > max x < min x = max a = 1 x = min a = 1

9 Datenflussanalyse (Forts.) Beantwortet Fragen wie –An welchen Stellen wird der an Stelle X gesetzte Wert verwendet? –Welche möglichen Werte kann eine Variable einnehmen? –Welche Variablen sind für Abschnitt Y relevant? Dadurch Unterstützen des Programmverstehens.

10 Slicing Berechnet einen Teilbereich des Codes –Wähle eine zu betrachtende Zeile und –blende alle irrelevanten Zeilen aus. Was wird durch diese Zuweisung beeinflusst? Wie entsteht der Wert dieser Variablen?

11 Slicing (Forts.) Forward SliceBackward Slice

12 Slicing (Forts.) Unterstützt Programmverstehen –durch Ausblendung von irrelevantem Code bzgl. einer bestimmten Frage.

13 Bis hierher … Nutzung von grundlegenden Techniken des Compilers wie –Lexikalische, syntaktische und Symbolanalyse sowie –Kontroll- und Datenflussanalyse. Visuelle Darstellung ihrer Ergebnisse, um Programmverstehen zu unterstützen.

14 Darstellende Verfahren Aus: Programmverstehen und statische Analysetechniken, Kapitel 6

15 Einführung Wie sucht man nach –Architekturmustern (od. architektonischen Stilen), –Entwurfsmustern (design patterns) und –Idioms? Daraus: Weitere Möglichkeiten zur Darstellung von Code.

16 Struktursuche Das Composite-Muster: –Modelliert zusammengesetzte Objekte. –Zusammengesetzte Teile sollen wie Einzelteile behandelt werden können. –Beispiele Menüs mit Menü-Punkten und Untermenüs Zusammengesetzte und einfache Elemente in einem Grafikprogramm. Component LeafComposite

17 Struktursuche (Forts.) Aufgabe: Suche das Composite-Muster. Mögliche Vorgehensweise: –Mittels lexikalischer Informationen, –anhand eines relationalen Modells des Systems sowie –durch Metriken.

18 Lexikalische Suche Versucht, das Muster durch Suchen nach Schlüsselwörtern zu entdecken. Genauigkeit: –Hoch, falls passende Bezeichner vergeben, –sonst niedrig. Rolle im Programmverstehen: –Entdeckung von Mustern; keine wirkliche Darstellung des Codes. Leaf, Composite

19 Relationales Modell Erzeuge Modell des Systems mit –Entitäten und –Relationen dazwischen. Formuliere Anfragen daran, um das Composite-Muster zu finden. Rel(Component, Composite, Leaf) := INHERITANCE(Composite, Component) ^ CONTAINMENT(Composite, Component) ^ INHERITANCE(Leaf, Component) ^ ! CONTAINMENT(Leaf, Component);

20 Relationales Modell (Forts.) Höhere Genauigkeit, aber rechenintensiv. Rolle im Programmverstehen: –Durch Finden von Strukturen oder –Visuelle Darstellung der Relationen.

21 Metriken Analyse des Codes durch –Zerlegung in Entitäten –Berechnung von Zahlenwerten (z.B. Anzahl Member-Variable, Tiefe im Vererbungsbaum, etc.) Rolle im Programmverstehen: –Ebenfalls durch Finden von Strukturen / Eigenschaften, –visuelle Darstellung der Metrik-Werte.

22 Zusammenfassung Compiler-Techniken zur Unterstützung des Programmverstehens. Alternative Darstellungen des Codes –durch Entitäten und Relationen –sowie durch Zahlenwerte an diesen, berechnet durch Metriken. Ausblick: Welche dieser Möglichkeiten können wie genutzt werden?


Herunterladen ppt "Grundlegende Analysen & Zwischendarstellungen Aus: Programmverstehen und statische Analysetechniken, Kapitel 5 Seminar 3D-Visualisierung von objektorientierten."

Ähnliche Präsentationen


Google-Anzeigen