grundlegende analysen & zwischendarstellungen aus: programmverstehen und statische...
TRANSCRIPT
![Page 1: Grundlegende Analysen & Zwischendarstellungen Aus: Programmverstehen und statische Analysetechniken, Kapitel 5 Seminar 3D-Visualisierung von objektorientierten](https://reader035.vdocuments.net/reader035/viewer/2022062622/55204d6649795902118bbc7a/html5/thumbnails/1.jpg)
Grundlegende Analysen & Zwischendarstellungen
Aus: Programmverstehen und statische Analysetechniken, Kapitel 5
Seminar 3D-Visualisierung von objektorientierten Codestrukturen, WS 06/07Prof. Dr. E.-E. Doberkat, Dr. A. Fronk
Priv.-Doz. Dr. G. Rinkenauer, Dr. D. Gude
Jasper Lauterbach
![Page 2: Grundlegende Analysen & Zwischendarstellungen Aus: Programmverstehen und statische Analysetechniken, Kapitel 5 Seminar 3D-Visualisierung von objektorientierten](https://reader035.vdocuments.net/reader035/viewer/2022062622/55204d6649795902118bbc7a/html5/thumbnails/2.jpg)
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.
![Page 3: Grundlegende Analysen & Zwischendarstellungen Aus: Programmverstehen und statische Analysetechniken, Kapitel 5 Seminar 3D-Visualisierung von objektorientierten](https://reader035.vdocuments.net/reader035/viewer/2022062622/55204d6649795902118bbc7a/html5/thumbnails/3.jpg)
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.
![Page 4: Grundlegende Analysen & Zwischendarstellungen Aus: Programmverstehen und statische Analysetechniken, Kapitel 5 Seminar 3D-Visualisierung von objektorientierten](https://reader035.vdocuments.net/reader035/viewer/2022062622/55204d6649795902118bbc7a/html5/thumbnails/4.jpg)
Syntaxanalyse
• Liefert Struktur des Programms (Syntaxbaum).
• Unterstützt Programmverstehen durch– Formatierung des Codes,– Hervorheben von Variablen, Klassen,
Sichtbarkeit, etc.
![Page 5: Grundlegende Analysen & Zwischendarstellungen Aus: Programmverstehen und statische Analysetechniken, Kapitel 5 Seminar 3D-Visualisierung von objektorientierten](https://reader035.vdocuments.net/reader035/viewer/2022062622/55204d6649795902118bbc7a/html5/thumbnails/5.jpg)
Symbolanalyse
• Erstellt Verknüpfungen im Syntaxbaum.– Z. B. Deklaration einer Variablen mit ihrer
Benutzung.
• Unterstützt Programmverstehen durch Darstellung dieser Verknüpfungen.
![Page 6: Grundlegende Analysen & Zwischendarstellungen Aus: Programmverstehen und statische Analysetechniken, Kapitel 5 Seminar 3D-Visualisierung von objektorientierten](https://reader035.vdocuments.net/reader035/viewer/2022062622/55204d6649795902118bbc7a/html5/thumbnails/6.jpg)
Kontrollflussanalyse
• Untersucht das Zusammenwirken funktionaler Einheiten wie– Basisblöcken (intraprozedural) und– Prozeduren (interprozedural). read(x)
a = 0
x > max
x < min
x = maxa = 1
x = mina = 1
print(x)print(a)
ft
f
t
![Page 7: Grundlegende Analysen & Zwischendarstellungen Aus: Programmverstehen und statische Analysetechniken, Kapitel 5 Seminar 3D-Visualisierung von objektorientierten](https://reader035.vdocuments.net/reader035/viewer/2022062622/55204d6649795902118bbc7a/html5/thumbnails/7.jpg)
Kontrollflussanalyse (Forts.)
• Unterstützt das Programmverstehen– durch grafische Darstellung (statt Text)– durch „Übersichtsinformation“ („Wo wird diese
Methode überall benutzt?“; „Wo wird diese Klasse verwendet?“)
![Page 8: Grundlegende Analysen & Zwischendarstellungen Aus: Programmverstehen und statische Analysetechniken, Kapitel 5 Seminar 3D-Visualisierung von objektorientierten](https://reader035.vdocuments.net/reader035/viewer/2022062622/55204d6649795902118bbc7a/html5/thumbnails/8.jpg)
Datenflussanalyse
• Baut auf den Knoten des Kontrollflussgraphen auf.
• Zeigt Abhängigkeiten in derVariablenbenutzung auf.
= Datenabhängigkeit
f
ft
t
print(x)print(a)
read(x)a = 0
x > max
x < min
x = maxa = 1
x = mina = 1
![Page 9: Grundlegende Analysen & Zwischendarstellungen Aus: Programmverstehen und statische Analysetechniken, Kapitel 5 Seminar 3D-Visualisierung von objektorientierten](https://reader035.vdocuments.net/reader035/viewer/2022062622/55204d6649795902118bbc7a/html5/thumbnails/9.jpg)
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.
![Page 10: Grundlegende Analysen & Zwischendarstellungen Aus: Programmverstehen und statische Analysetechniken, Kapitel 5 Seminar 3D-Visualisierung von objektorientierten](https://reader035.vdocuments.net/reader035/viewer/2022062622/55204d6649795902118bbc7a/html5/thumbnails/10.jpg)
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?
![Page 11: Grundlegende Analysen & Zwischendarstellungen Aus: Programmverstehen und statische Analysetechniken, Kapitel 5 Seminar 3D-Visualisierung von objektorientierten](https://reader035.vdocuments.net/reader035/viewer/2022062622/55204d6649795902118bbc7a/html5/thumbnails/11.jpg)
Slicing (Forts.)
Forward Slice Backward Slice
![Page 12: Grundlegende Analysen & Zwischendarstellungen Aus: Programmverstehen und statische Analysetechniken, Kapitel 5 Seminar 3D-Visualisierung von objektorientierten](https://reader035.vdocuments.net/reader035/viewer/2022062622/55204d6649795902118bbc7a/html5/thumbnails/12.jpg)
Slicing (Forts.)
• Unterstützt Programmverstehen– durch Ausblendung von irrelevantem Code
bzgl. einer bestimmten Frage.
![Page 13: Grundlegende Analysen & Zwischendarstellungen Aus: Programmverstehen und statische Analysetechniken, Kapitel 5 Seminar 3D-Visualisierung von objektorientierten](https://reader035.vdocuments.net/reader035/viewer/2022062622/55204d6649795902118bbc7a/html5/thumbnails/13.jpg)
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.
![Page 14: Grundlegende Analysen & Zwischendarstellungen Aus: Programmverstehen und statische Analysetechniken, Kapitel 5 Seminar 3D-Visualisierung von objektorientierten](https://reader035.vdocuments.net/reader035/viewer/2022062622/55204d6649795902118bbc7a/html5/thumbnails/14.jpg)
Darstellende Verfahren
Aus: Programmverstehen und statische Analysetechniken, Kapitel 6
![Page 15: Grundlegende Analysen & Zwischendarstellungen Aus: Programmverstehen und statische Analysetechniken, Kapitel 5 Seminar 3D-Visualisierung von objektorientierten](https://reader035.vdocuments.net/reader035/viewer/2022062622/55204d6649795902118bbc7a/html5/thumbnails/15.jpg)
Einführung
• Wie sucht man nach– Architekturmustern (od. architektonischen
Stilen),– Entwurfsmustern (design patterns) und– Idioms?
• Daraus: Weitere Möglichkeiten zur Darstellung von Code.
![Page 16: Grundlegende Analysen & Zwischendarstellungen Aus: Programmverstehen und statische Analysetechniken, Kapitel 5 Seminar 3D-Visualisierung von objektorientierten](https://reader035.vdocuments.net/reader035/viewer/2022062622/55204d6649795902118bbc7a/html5/thumbnails/16.jpg)
Struktursuche
• Das Composite-Muster:– Modelliert zusammengesetzte Objekte.– Zusammengesetzte Teile sollen wie
Einzelteile behandelt werden können.– Beispiele
• Menüs mit Menü-Punktenund Untermenüs
• Zusammengesetzte undeinfache Elemente ineinem Grafikprogramm.
Component
Leaf Composite
![Page 17: Grundlegende Analysen & Zwischendarstellungen Aus: Programmverstehen und statische Analysetechniken, Kapitel 5 Seminar 3D-Visualisierung von objektorientierten](https://reader035.vdocuments.net/reader035/viewer/2022062622/55204d6649795902118bbc7a/html5/thumbnails/17.jpg)
Struktursuche (Forts.)
• Aufgabe: Suche das Composite-Muster.
• Mögliche Vorgehensweise:– Mittels lexikalischer Informationen,– anhand eines relationalen Modells des
Systems sowie– durch Metriken.
![Page 18: Grundlegende Analysen & Zwischendarstellungen Aus: Programmverstehen und statische Analysetechniken, Kapitel 5 Seminar 3D-Visualisierung von objektorientierten](https://reader035.vdocuments.net/reader035/viewer/2022062622/55204d6649795902118bbc7a/html5/thumbnails/18.jpg)
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“
![Page 19: Grundlegende Analysen & Zwischendarstellungen Aus: Programmverstehen und statische Analysetechniken, Kapitel 5 Seminar 3D-Visualisierung von objektorientierten](https://reader035.vdocuments.net/reader035/viewer/2022062622/55204d6649795902118bbc7a/html5/thumbnails/19.jpg)
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);
![Page 20: Grundlegende Analysen & Zwischendarstellungen Aus: Programmverstehen und statische Analysetechniken, Kapitel 5 Seminar 3D-Visualisierung von objektorientierten](https://reader035.vdocuments.net/reader035/viewer/2022062622/55204d6649795902118bbc7a/html5/thumbnails/20.jpg)
Relationales Modell (Forts.)
• Höhere Genauigkeit, aber rechenintensiv.
• Rolle im Programmverstehen:– Durch Finden von Strukturen oder– Visuelle Darstellung der Relationen.
![Page 21: Grundlegende Analysen & Zwischendarstellungen Aus: Programmverstehen und statische Analysetechniken, Kapitel 5 Seminar 3D-Visualisierung von objektorientierten](https://reader035.vdocuments.net/reader035/viewer/2022062622/55204d6649795902118bbc7a/html5/thumbnails/21.jpg)
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.
![Page 22: Grundlegende Analysen & Zwischendarstellungen Aus: Programmverstehen und statische Analysetechniken, Kapitel 5 Seminar 3D-Visualisierung von objektorientierten](https://reader035.vdocuments.net/reader035/viewer/2022062622/55204d6649795902118bbc7a/html5/thumbnails/22.jpg)
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?