deklaratives debugging (seminar software engineering) tim sender deklaratives debugging seminar...
TRANSCRIPT
Deklaratives Debugging (Seminar Software Engineering)
Tim Sender
Deklaratives Debugging
Seminar Software Engineering
2
Deklaratives Debugging (Seminar Software Engineering)
Tim Sender
Agenda
Grundlagen
Deklaratives Debugging
Anwendbarkeit
Fazit & Ausblick
3
Deklaratives Debugging (Seminar Software Engineering)
Tim Sender
Agenda
GrundlagenProgrammfehler
Debugging
Deklaratives Debugging
Anwendbarkeit
Fazit & Ausblick
4
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
FehlertypenSyntaktische Fehler
Semantische Fehler
Logische Fehler
Designfehler
Die Folgen von Programmfehlern können verheerend sein, daher Fehlerbehebung wichtig!
Programmfehler
5
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 PhasenReproduzieren
Vereinfachen
Fehler ermitteln
Fehler beseitigen
Debugging
6
Deklaratives Debugging (Seminar Software Engineering)
Tim Sender
Grundlagen
Verschiedene MethodenTrace Debugging
Delta Debugging
Program Slicing
Wissenschaftliches Debugging
Deklaratives Debugging
Debugging
7
Deklaratives Debugging (Seminar Software Engineering)
Tim Sender
Agenda
Grundlagen
Deklaratives DebuggingEinführung
Beispielprogramm
Ausführungsbaum
Suchalgorithmen
Problemgebiete
Anwendbarkeit
Fazit & Ausblick
8
Deklaratives Debugging (Seminar Software Engineering)
Tim Sender
Ablauf des deklarativen Debugging
Ursprung1982 von Shapiro als algorithmisches Debugging für logische Programmierparadigmen entwickelt
Verfahren insb. für deklarative Programmierparadigmen geeignet
Bisherige Methoden unpassend für deklarative SprachenProgrammierstil: Was statt Wie
High-order Functions
Lazy Evaluation
FunktionsweiseErstellen des Ausführungsbaums
Fehlersuche in diesem durch Suchalgorithmus und Befragung eines Orakels
Einführung
9
Deklaratives Debugging (Seminar Software Engineering)
Tim Sender
Ablauf des deklarativen Debugging
(Fehlerhafter) Insertion Sort in Prolog
Beispiel
[Element|List]
10
Deklaratives Debugging (Seminar Software Engineering)
Tim Sender
Ablauf des deklarativen DebuggingAusführungsbaum
11
Deklaratives Debugging (Seminar Software Engineering)
Tim Sender
Deklaratives DebuggingSuchalgorithmen
Single Stepping
1 2
3 4
12
Deklaratives Debugging (Seminar Software Engineering)
Tim Sender
Deklaratives DebuggingSuchalgorithmen
Top Down
4
1
2
3
13
Deklaratives Debugging (Seminar Software Engineering)
Tim Sender
Deklaratives DebuggingSuchalgorithmen
Divide & Query
1
2
3
14
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
15
Deklaratives Debugging (Seminar Software Engineering)
Tim Sender
Agenda
Grundlagen
Ablauf des deklarativen Debugging
AnwendbarkeitLazy-funktionale Programmierparadigmen
Imperative Programmierparadigmen
Fazit & Ausblick
16
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
17
Deklaratives Debugging (Seminar Software Engineering)
Tim Sender
Anwendbarkeit
Vergleich: Ausführungsbaum für das Beispielprogramm in Haskell:
Lazy-funktionale Programmierparadigmen
18
Deklaratives Debugging (Seminar Software Engineering)
Tim Sender
Anwendbarkeit
Vergleich: EDT für das Beispiel
Lazy-funktionale Programmierparadigmen
19
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 MechanismenDatenbank für bereits beantwortete Fragen
Testdatenintegration
Algorithmus zum Erkennen ähnlicher Aufrufe
Markieren von Funktionen als trusted
Imperative Programmierparadigmen
20
Deklaratives Debugging (Seminar Software Engineering)
Tim Sender
Anwendbarkeit
JDD – ein deklarativer Debugger für JavaEclipse-Plugin
ElementeComputation Tree
Node Inspector
BeispielprogrammHeapsort
Testarray: {2,4,1,3}
Imperative Programmierparadigmen
21
Deklaratives Debugging (Seminar Software Engineering)
Tim Sender
Anwendbarkeit
Heapsort für {2,4,1,3}
Imperative Programmierparadigmen
Heap
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
Heapsort für {2,4,1,3} - Fortsetzung -
Imperative Programmierparadigmen
24
Deklaratives Debugging (Seminar Software Engineering)
Tim Sender
Anwendbarkeit
Fehlerhafter Heapsort für {2,4,1,3}
Imperative Programmierparadigmen
Heap
25
Deklaratives Debugging (Seminar Software Engineering)
Tim Sender
Anwendbarkeit
Fehlerhafter Heapsort für {2,4,1,3} - Fortsetzung -
Imperative Programmierparadigmen
26
Deklaratives Debugging (Seminar Software Engineering)
Tim Sender
Agenda
Grundlagen
Ablauf des deklarativen Debugging
Anwendbarkeit
Fazit & Ausblick
27
Deklaratives Debugging (Seminar Software Engineering)
Tim Sender
Fazit & Ausblick
VorteileInteressantes Verfahren, das vom eigentlichen Code in gewissem Maß abstrahiert
Steigende Popularität & Anwendbarkeit auf andere Programmierparadigmen
Effizientes Debugging der deklarativen Programmiersprachen möglich
NachteileOftmals 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
28
Deklaratives Debugging (Seminar Software Engineering)
Tim Sender
Fazit & Ausblick
AusblickFragenreduktion und -vereinfachung stehen im Vordergrund der aktuellen Forschung
Praktische Nachfrage sehr gering – Welche Gründe hat dies?
Praktische Eignung noch nicht empirisch erforscht