Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Grundlegende Analysen & Zwischendarstellungen

Ähnliche Präsentationen


Präsentation zum Thema: "Grundlegende Analysen & Zwischendarstellungen"—  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? Welche Techniken sind das?
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 print(x) print(a) 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. f t print(x) print(a) read(x) a = 0 x > max x < min x = max a = 1 x = min = Datenabhängigkeit

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 Slice Backward 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 Leaf Composite

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 Rolle im Programmverstehen:
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"

Ähnliche Präsentationen


Google-Anzeigen