Korrektheit von Programmen – Testen

Slides:



Advertisements
Ähnliche Präsentationen
Vortrag von Stephanie Weirauch Jens Pleger Peter Jancke Frank Wejmelka
Advertisements

Algorithmentheorie 08 – Dynamische Programmierung (1)
Polynomial Root Isolation
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (26-Graphenalgorithmen: Wiederholung und Übung) Prof. Th. Ottmann.
Analytische Qualitätssicherung
Qualitätssicherung von Software
Zusammenfassung der Vorwoche
R. Der - Vorlesung Algorithmen und Datenstrukturen (Magister)
der Universität Oldenburg
Algorithmen und Komplexität
Terminierung und Deadlocks Enkhbat Daginaa Betreuerin Prof. Heike Wehrheim Totale Korrektheit.
Übung 6.1Turing-Maschine 1.Machen Sie sich mit der Funktionsweise des Busy Beaver-Programms vertraut Vollziehen sie die 11 Schritte der ersten Turing-Tabelle.
Schleifen-beobachtung
WS Algorithmentheorie 13 - Kürzeste (billigste) Wege Prof. Dr. Th. Ottmann.
Dynamische Programmierung (2) Matrixkettenprodukt
Prinzipien des Algorithmenentwurfs Backtracking Prof. Dr. Th. Ottmann
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Prof. Dr. Th. Ottmann.
WS Algorithmentheorie 01 – Divide and Conquer (Segmentschnitt) Prof. Dr. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Tobias Lauer.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Prof. Dr. Th. Ottmann.
WS Algorithmentheorie 08 – Dynamische Programmierung (2) Matrixkettenprodukt Prof. Dr. Th. Ottmann.
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 2 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (21 – Kürzeste Wege) T. Lauer.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (05 – Elementare Datenstrukturen) Prof. Th. Ottmann.
Robotik mit LEGO Mindstorms
Boolesche Ausdrücke Ist der Rückgabewert eines Ausdrucks vom Typ boolean, so wird dieser als Boolescher Ausdruck bezeichnet (nach dem Mathematiker George.
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Geoinformation II Vorlesung In welcher Masche liegt der Punkt p?
PKJ 2005/1 Stefan Dissmann Zusammenfassung der Vorwoche Variable stehen für (einen) Wert, der sich im Programmablauf ändern kann. Variablen besitzen einen.
Algorithmen und Komplexität
Fachgebiet Software Engineering Übersicht © Albert Zündorf, Kassel University Projektplan: m : Anforderungsanalyse Dokument m :
Minimum Spanning Tree: MST
DVG Ablaufsteuerung
Wir müssen also überlegen: Implementierung der Knoten, Implementierung der Kanten, daraus: Implementierung des Graphen insgesamt. Annahme: die Knoteninhalte.
LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
Einführung in die Programmierung Datensammlung
Einführung in die Programmierung Anweisungen und Datentypen
Java programmieren mit JavaKara
Wenn Programme Entscheidungen fällen müssen, dann …
LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
Rekursion mit Listen: Quicksort
Chromatische Zahl.
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Geoinformation II Vorlesung 7 SS 2000 Punkt-in-Polygon-Verfahren I (Trapezkarte)
BIT – Schaßan – WS 02/03 Basisinformationstechnologie HK-Medien Teil 1, 11.Sitzung WS 02/03.
Effiziente Algorithmen Hartmut Klauck Universität Frankfurt SS
Effiziente Algorithmen
Black Box Algorithmen Hartmut Klauck Universität Frankfurt SS
Quantum Computing Hartmut Klauck Universität Frankfurt WS 05/
Effiziente Algorithmen Hartmut Klauck Universität Frankfurt SS
Effiziente Algorithmen Hartmut Klauck Universität Frankfurt SS
Effiziente Algorithmen
Einführung in die Programmierung
Purga - Scriptengine Ein Einblick.
Informatik II Grundlagen der Programmierung Programmieren in C Programmstrukturen / Kontrollstrukturen Hochschule Fulda – FB ET Sommersemester 2014.
Automaten, formale Sprachen und Berechenbarkeit II SoSe 2004 Prof. W. Brauer Teil 1: Wiederholung (Vor allem Folien von Priv.-Doz. Dr. Kindler vom WS 2001/02.
CuP - Java Sechste Vorlesung Entspricht ungefähr Kapitel 3. 1 – 3
Agenda für heute, 7. April, 2005 Bedingte ProgrammausführungBedingte Programmausführung Algorithmische Grundlagen Vergleichsoperatoren, Wahrheitswerte.
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Geoinformation III Vorlesung 1 WS 2001/02 Punkt-in-Landkarte I (Streifenkarte)
Korrektheit von Programmen – Testen
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Geoinformation II 6. Sem. Vorlesung Mai 2000 Konstruktion des Voronoi-Diagramms.
Java Syntaxdiagramme Buchstabe A B Z a z ... Ziffer
Berechenbarkeit Klaus Becker Berechenbarkeit.
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik I Vorlesung Rekursion-
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik II Vorlesung Datenstrukturen für den Algorithmus von.
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik II Foliendesign: Jörg Steinrücken & Tobias Kahn Vorlesung
MATLAB Control Statements.
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik II Vorlesung Voronoi-Diagramme.
Wann ist eine Funktion (über den natürlichen Zahlen) berechenbar?
Prüfungsbesprechung Barbara Scheuner Vorlesung: Programmieren und Problemlösen Prof. Hans Hinterberger.
Konvexe Hüllen (Convex Hulls)
Unterschiedliche Kontrollstrukturen
 Präsentation transkript:

Korrektheit von Programmen – Testen Geoinformation III Vorlesung 9b Korrektheit von Programmen – Testen

1 2. Kantenüberdeckung für das im folgenden beschriebene Prinzip der Kantenüberdeckung wird das Konzept des Kontrollflussgraphen benötigt der Kontrollflussgraph eines Programms setzt sich aus den Kontrollflussgraphen der einzelnen Anweisungen zusammen:

Kontrollflussgraph: Definition 2 Kontrollflussgraph: Definition if (Bedingung) then S1; else S2; S1 S2 if (Bedingung) then S1; S1 while (Bedingung) S1; S1 S1; S2; S1 S2 Knoten des Graphen Kanten des Graphen A 6x

3 2. Kantenüberdeckung wähle Testmenge so, dass jede Kante des Kontrollflussgraphen mindestens einmal durchlaufen wird Beispiel: if (x < 0) then x = - x z = x; (x = - 3), (x = 3) erfüllt Kantenüberdeckung (x = - 3) erfüllt Anweisungsüberdeckung, aber nicht Kantenüberdeckung x = -x z = x

3. Bedingungsüberdeckung 4 3. Bedingungsüberdeckung wähle Testmenge so, dass die Komponenten jeder Bedingung alle möglichen Kombinationen von wahr und falsch annehmen Beispiel (Suchen im Array): nicht_gefunden = true; zähler = 0; while (nicht_gefunden and zähler < anzahl) { if (array[zähler] == gesucht) then nicht_gefunden = false; zähler = zähler + 1; } zähler < anzahl true false nicht_gefunden A 1x

4. Pfadüberdeckung y=5 z=z-x z=z/x z=0 x = 0 z > 1 x  0 z  1 Kontrollflussgraph: wähle Testmenge so, dass alle Pfade des Kontroll-flussgraphen vom Anfangs-knoten bis zum Endknoten durchlaufen werden Beispiel: if (x  0) then y = 5; else y = 8; if (z > 1) then z = z/x; else z = 0; Division durch 0, falls x=0 A 9x

4. Pfadüberdeckung Testmenge: (x=0, z=1) links-rechts 5 Testmenge: (x=0, z=1) links-rechts 4. Pfadüberdeckung wähle Testmenge so, dass alle Pfade des Kontroll-flussgraphen vom Anfangs-knoten bis zum Endknoten durchlaufen werden Beispiel: if (x  0) then y = 5; else y = 8; if (z > 1) then z = z/x; else z = 0; x = 0 x  0 y=5 z=z-x z > 1 z  1 z=z/x z=0 A 9x

4. Pfadüberdeckung Testmenge: (x=0, z=1) links-rechts 5 Testmenge: (x=0, z=1) links-rechts (x=3, z=8) rechts-links 4. Pfadüberdeckung wähle Testmenge so, dass alle Pfade des Kontroll-flussgraphen vom Anfangs-knoten bis zum Endknoten durchlaufen werden Beispiel: if (x  0) then y = 5; else y = 8; if (z > 1) then z = z/x; else z = 0; x = 0 x  0 y=5 z=z-x z > 1 z  1 z=z/x z=0 Testmenge erfüllt Kantenüberdeckung, findet aber Fehler nicht A 9x

4. Pfadüberdeckung Testmenge: (x=0, z=1) links-rechts 5 Testmenge: (x=0, z=1) links-rechts (x=3, z=8) rechts-links (x=3, z=1) rechts-rechts 4. Pfadüberdeckung wähle Testmenge so, dass alle Pfade des Kontroll-flussgraphen vom Anfangs-knoten bis zum Endknoten durchlaufen werden Beispiel: if (x  0) then y = 5; else y = 8; if (z > 1) then z = z/x; else z = 0; x = 0 x  0 y=5 z=z-x z > 1 z  1 z=z/x z=0 A 9x

4. Pfadüberdeckung Testmenge: (x=0, z=1) links-rechts 5 Testmenge: (x=0, z=1) links-rechts (x=3, z=8) rechts-links (x=3, z=1) rechts-rechts (x=0, z=2) links-links 4. Pfadüberdeckung wähle Testmenge so, dass alle Pfade des Kontroll-flussgraphen vom Anfangs-knoten bis zum Endknoten durchlaufen werden Beispiel: if (x  0) then y = 5; else y = 8; if (z > 1) then z = z/x; else z = 0; x = 0 x  0 y=5 z=z-x z > 1 z  1 z=z/x z=0 Pfadüberdeckung findet Fehler A 9x

4. Pfadüberdeckung: Problem 6 4. Pfadüberdeckung: Problem Anzahl der Pfade steigt exponentiell mit Anzahl der Variablen/Verzweigungen Beispiel: if(x1 > .. ) then ...; else ...; if(x2 > .. ) then ...; else ...; ................... if(xn-1 > .. ) then ...; else ...; if(xn > .. ) then ...; else ...; n Verzweigungen/Variablen  2n Pfade A 1x

White- vs. Black-Box Tests 7 White- vs. Black-Box Tests White-Box Test Kenntnis der inneren Programmstruktur Beispiel: Überdeckungen Black-Box Test keine Kenntnis der Programmstruktur, nur In-/Output-Verhältnis bekannt Beispiel: Randwerte, Extremwerte, untypische Werte P(t) = S(t) ? t P(t) P(t) = S(t) ? t P(t)

Klassifikation von White-Box-Tests 8 Klassifikation von White-Box-Tests Klassifikation Umfang des Tests C0 Anweisungsüberdeckung C1 Kantenüberdeckung C1+ Kantenüberdeckung und Ausführung von Schleifen mit Extremwerten C1p Kantenüberdeckung und jede Bedingung wird einmal wahr und einmal falsch ausgeführt C2 Kantenüberdeckung und jede Schleife wird nicht ausgeführt mit einem niederen Zählwert ausgeführt mit einem hohen Zählwert ausgeführt Cik Kantenüberdeckung und alle Schleifen werden für alle Zählwerte i bis k ausgeführt (i < k) Ct Pfadüberdeckung

Testen: Vorgehen Erkennen, dass Fehler vorliegt (bisher behandelt) 9 Testen: Vorgehen Erkennen, dass Fehler vorliegt (bisher behandelt) Lokalisierung des Fehlers, Bestimmung seiner Ursachen Korrigieren des Fehlers Testen des korrigierten Programms

10 Fehlerlokalisierung erfordert ca. 90% des Aufwands für Fehlerbeseitigung Problem: Fortpflanzung: Fehler werden nicht an der Stelle sichtbar, wo sie entstehen

Fehlerlokalisierung: Methoden 11 Fehlerlokalisierung: Methoden Speicherabzug (Dump) Kontrollausgabe Debugging

Fehlerlokalisierung: "Speicherabzug" 12 Fehlerlokalisierung: "Speicherabzug" "Momentaufnahme" des Speichers statisch Ausgabe aller Paare (Name der Variable / Wert der Variable) Nachteil: gewaltige Datenmenge, Identifikation der relevanten Werte aufwendig

Fehlerlokalisierung: "Kontrollausgabe" 13 Fehlerlokalisierung: "Kontrollausgabe" Ausgabeanweisung an Stellen, an denen Fehlerursache vermutet wird (z.B. Java: System.out.println(Variable)) gezielte Ausgabe von relevanten Variablenwerten dynamisch Nachteil: große Datenmengen, z.B. bei Ausgabeanweisung in Schleifen wichtig: Testcode aufbewahren globale boolesche Variable ("Schalter") testmodus, true beim Testen, sonst falsch Kontrollausgabe: if (testmodus) then Ausgabe;

Fehlerlokalisierung: "Debugging" 14 Fehlerlokalisierung: "Debugging" Funktionalität der Entwicklungsumgebung Einfügen von Breakpoints an Stellen, an denen Fehlerursache vermutet wird Debug-Modus: Programm hält bei Breakpoint an dort gezielte Ausgabe von Variablenwerten verschiedene Möglichkeiten, weiter zu machen, z.B. zu nächstem Befehl in Methode hinein springen aus Methode hinaus springen

Bsp.: Debugging in Java-Umgebung Forte 15 Bsp.: Debugging in Java-Umgebung Forte

Test: psychologische Komponente 16 Test: psychologische Komponente Tester  Programmierer Erfolg des Testers = Misserfolg des Programmierers Testen hat destruktive Züge, Programmieren konstruktive (langfristige) Ziele gleich: korrekte Programme

Vielen Dank für die Aufmerksamkeit. Fragen? 17 Vielen Dank für die Aufmerksamkeit. Fragen?

Übungsaufgabe: Bestimmung der Testmenge 18 Übungsaufgabe: Bestimmung der Testmenge Algorithmus ZweiSegmentSchnitt Input: Zwei Segmente, gegeben durch die Punkte p1, p2, p3, p4 Output: true, wenn sich beide Segmente schneiden, sonst false { if(p1 == p2 oder p3 == p4) then ….. //Sonderfallbehandlung else{ Sei g1 die Gerade, die durch p1 und p2 geht; Sei g2 die Gerade, die durch p3 und p4 geht; if(p1 liegt auf g2 oder p2 liegt auf g2 oder p3 liegt auf g1 oder p4 liegt auf g1) then ...... //Sonderfallbehandlung else if(p1 und p2 liegen auf verschiedenen Seiten von g2) then if(p3 und p4 liegen auf verschied. Seiten von g1) then return true; //Schnittpunkt gefunden else return false; //kein Schnittpunkt }