Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Korrektheit von Programmen – Testen

Ähnliche Präsentationen


Präsentation zum Thema: "Korrektheit von Programmen – Testen"—  Präsentation transkript:

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

2 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:

3 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

4 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

5 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

6 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

7 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

8 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

9 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

10 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

11 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

12 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)

13 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

14 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

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

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

17 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

18 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;

19 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

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

21 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

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

23 Ü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 }


Herunterladen ppt "Korrektheit von Programmen – Testen"

Ähnliche Präsentationen


Google-Anzeigen