Deklaratives Debugging (Seminar Software Engineering) Tim Sender Deklaratives Debugging Seminar Software Engineering
1 Deklaratives Debugging (Seminar Software Engineering) Tim Sender Agenda Grundlagen Deklaratives Debugging Anwendbarkeit Fazit & Ausblick
2 Deklaratives Debugging (Seminar Software Engineering) Tim Sender Agenda Grundlagen Programmfehler Debugging Deklaratives Debugging Anwendbarkeit Fazit & Ausblick
3 Deklaratives Debugging (Seminar Software Engineering) Tim Sender Grundlagen Was genau sind Programmfehler? Verschiedene Bezeichnungen/Definitionen existieren Abweichung des Ist-Verhaltens vom Soll-Verhalten Begriffsbeispiel: inkorrekter Programmcode & -verhalten Was für Programmfehler gibt es? Sehr häufig menschliches Versagen des Programmierers Fehlertypen Syntaktische Fehler Semantische Fehler Logische Fehler Designfehler Die Folgen von Programmfehlern können verheerend sein, daher Fehlerbehebung wichtig! Programmfehler
4 Deklaratives Debugging (Seminar Software Engineering) Tim Sender Grundlagen DeBUGging = Beseitigen von Bugs / Fehlern Wie können Fehler gefunden werden? Im Rahmen des Testens Durch Feedback der Kunden/Nutzer Verschiedene Phasen Reproduzieren Vereinfachen Fehler ermitteln Fehler beseitigen Debugging
5 Deklaratives Debugging (Seminar Software Engineering) Tim Sender Grundlagen Verschiedene Methoden Trace Debugging Delta Debugging Program Slicing Wissenschaftliches Debugging Deklaratives Debugging Debugging
6 Deklaratives Debugging (Seminar Software Engineering) Tim Sender Agenda Grundlagen Deklaratives Debugging Einführung Beispielprogramm Ausführungsbaum Suchalgorithmen Problemgebiete Anwendbarkeit Fazit & Ausblick
7 Deklaratives Debugging (Seminar Software Engineering) Tim Sender Ablauf des deklarativen Debugging Ursprung 1982 von Shapiro als algorithmisches Debugging für logische Programmierparadigmen entwickelt Verfahren insb. für deklarative Programmierparadigmen geeignet Bisherige Methoden unpassend für deklarative Sprachen Programmierstil: Was statt Wie High-order Functions Lazy Evaluation Funktionsweise Erstellen des Ausführungsbaums Fehlersuche in diesem durch Suchalgorithmus und Befragung eines Orakels Einführung
8 Deklaratives Debugging (Seminar Software Engineering) Tim Sender Ablauf des deklarativen Debugging (Fehlerhafter) Insertion Sort in Prolog Beispiel [Element|List]
9 Deklaratives Debugging (Seminar Software Engineering) Tim Sender Ablauf des deklarativen Debugging Ausführungsbaum
10 Deklaratives Debugging (Seminar Software Engineering) Tim Sender Deklaratives Debugging Suchalgorithmen Single Stepping
11 Deklaratives Debugging (Seminar Software Engineering) Tim Sender Deklaratives Debugging Suchalgorithmen Top Down
12 Deklaratives Debugging (Seminar Software Engineering) Tim Sender Deklaratives Debugging Suchalgorithmen Divide & Query
13 Deklaratives Debugging (Seminar Software Engineering) Tim Sender Deklaratives Debugging Große Problematik: Komplexität und Anzahl der dem Orakel gestellten Fragen Reduktion durch modifizierte Suchalgorithmen Kombination mit anderen Methoden bzw. Mechanismen Lediglich der ein inkorrektes Resultat liefernde Berechnungsschritt wird identifiziert Problemgebiete
14 Deklaratives Debugging (Seminar Software Engineering) Tim Sender Agenda Grundlagen Ablauf des deklarativen Debugging Anwendbarkeit Lazy-funktionale Programmierparadigmen Imperative Programmierparadigmen Fazit & Ausblick
15 Deklaratives Debugging (Seminar Software Engineering) Tim Sender Anwendbarkeit Nur schwer von Ausführungsfehlern auf den Defekt schließbar Lazy Evaluation sorgt für teilweise komplexe Ausdrücke, zu denen das Orakel befragt werden muss Evaluation Dependency Tree (EDT) Reflektiert eher die Codestruktur anstatt der Ausführungsreihenfolge Komplexe Ausdrücke werden vereinfacht, wodurch die kognitive Belastung des Orakels reduziert wird Lazy-funktionale Programmierparadigmen
16 Deklaratives Debugging (Seminar Software Engineering) Tim Sender Anwendbarkeit Vergleich: Ausführungsbaum für das Beispielprogramm in Haskell: Lazy-funktionale Programmierparadigmen
17 Deklaratives Debugging (Seminar Software Engineering) Tim Sender Anwendbarkeit Vergleich: EDT für das Beispiel Lazy-funktionale Programmierparadigmen
18 Deklaratives Debugging (Seminar Software Engineering) Tim Sender Anwendbarkeit Insbesondere in objektorientierten Sprachen müssen vermehrt Daten bzw. Zustände berücksichtigt werden Seiteneffekte können auftreten und müssen berücksichtigt werden Bei der Portierung zusätzl. eingebrachte Mechanismen Datenbank für bereits beantwortete Fragen Testdatenintegration Algorithmus zum Erkennen ähnlicher Aufrufe Markieren von Funktionen als trusted Imperative Programmierparadigmen
19 Deklaratives Debugging (Seminar Software Engineering) Tim Sender Anwendbarkeit JDD – ein deklarativer Debugger für Java Eclipse-Plugin Elemente Computation Tree Node Inspector Beispielprogramm Heapsort Testarray: {2,4,1,3} Imperative Programmierparadigmen
20 Deklaratives Debugging (Seminar Software Engineering) Tim Sender Anwendbarkeit Heapsort für {2,4,1,3} Imperative Programmierparadigmen Heap
21 Deklaratives Debugging (Seminar Software Engineering) Tim Sender Anwendbarkeit Heapsort für {2,4,1,3} - Fortsetzung - Imperative Programmierparadigmen
22 Deklaratives Debugging (Seminar Software Engineering) Tim Sender Anwendbarkeit Heapsort für {2,4,1,3} - Fortsetzung - Imperative Programmierparadigmen
23 Deklaratives Debugging (Seminar Software Engineering) Tim Sender Anwendbarkeit Fehlerhafter Heapsort für {2,4,1,3} Imperative Programmierparadigmen Heap
24 Deklaratives Debugging (Seminar Software Engineering) Tim Sender Anwendbarkeit Fehlerhafter Heapsort für {2,4,1,3} - Fortsetzung - Imperative Programmierparadigmen
25 Deklaratives Debugging (Seminar Software Engineering) Tim Sender Agenda Grundlagen Ablauf des deklarativen Debugging Anwendbarkeit Fazit & Ausblick
26 Deklaratives Debugging (Seminar Software Engineering) Tim Sender Fazit & Ausblick Vorteile Interessantes Verfahren, das vom eigentlichen Code in gewissem Maß abstrahiert Steigende Popularität & Anwendbarkeit auf andere Programmierparadigmen Effizientes Debugging der deklarativen Programmiersprachen möglich Nachteile Oftmals Kombination mit anderen Methoden nötig Keine kommerziellen Produkte vorhanden, die meisten vorhandenen entstammen der Wissenschaft Seiteneffekte müssen berücksichtigt werden (tlw. ineffiziente Lösungen) Vorgestelltes Tool benötigt Einarbeitung
27 Deklaratives Debugging (Seminar Software Engineering) Tim Sender Fazit & Ausblick Ausblick Fragenreduktion und -vereinfachung stehen im Vordergrund der aktuellen Forschung Praktische Nachfrage sehr gering – Welche Gründe hat dies? Praktische Eignung noch nicht empirisch erforscht