1 / 23

Geoinformation III

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

christoffer
Download Presentation

Geoinformation III

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 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 denKontrollflussgraphen der einzelnen Anweisungen zusammen:

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

  4. x = -x z = x 3 2. Kantenüberdeckung • wähle Testmenge so, dass jede Kante des Kontrollflussgraphenmindestens 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

  5. nicht_gefunden true true false false zähler < anzahl true false true false A 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; } 1x

  6. Kontrollflussgraph: x = 0 x  0 y=5 z=z-x z  1 z > 1 z=0 z=z/x A 5 4. Pfadüberdeckung • wähle Testmenge so, dass alle Pfade des Kontroll-flussgraphenvom 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 9x

  7. A 5 Testmenge: (x=0, z=1) links-rechts 4. Pfadüberdeckung • wähle Testmenge so, dass alle Pfade des Kontroll-flussgraphenvom 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=0 z=z/x 9x

  8. A 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-flussgraphenvom 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=0 z=z/x Testmenge erfüllt Kantenüberdeckung, findet aber Fehler nicht 9x

  9. A 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-flussgraphenvom 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=0 z=z/x 9x

  10. A 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-flussgraphenvom 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=0 z=z/x Pfadüberdeckung findet Fehler 9x

  11. n Verzweigungen/Variablen  2n Pfade A 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 ...; 1x

  12. ? ? P(t) = S(t) P(t) = S(t) 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 t P(t) t P(t)

  13. 8 Klassifikation von White-Box-Tests

  14. 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. 11 Fehlerlokalisierung: Methoden • Speicherabzug (Dump) • Kontrollausgabe • Debugging

  17. 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. 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. 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. 15 Bsp.: Debugging in Java-Umgebung Forte

  21. 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. 17 Vielen Dank für die Aufmerksamkeit.Fragen?

  23. 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) thenif(p3 und p4 liegen auf verschied. Seiten von g1) then return true; //Schnittpunkt gefunden elsereturn false; //kein Schnittpunkt elsereturn false; //kein Schnittpunkt } }

More Related