12345 Geoinformation3 6789101112131415161718 Geoinformation III Korrektheit von Programmen –...

Post on 06-Apr-2016

218 views 2 download

Transcript of 12345 Geoinformation3 6789101112131415161718 Geoinformation III Korrektheit von Programmen –...

1 2 3 4 5Geoinformation3

6 7 8 9 10 11 12 13 14 15 16 17 18

Geoinformation III

Korrektheit von Programmen –Testen

Vorlesung 9b

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18Geoinformation3

1

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

2. Kantenüberdeckung

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18Geoinformation3

2

A 6x

Kontrollflussgraph: Definition

if (Bedingung) then S1; else S2;

S1 S2

if (Bedingung)then S1;

S1

while (Bedingung) S1;

S1

S1;S2;

S1

S2

Kanten des Graphen

Knoten des Graphen

Knoten des Graphen

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18Geoinformation3

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

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18Geoinformation3

4

• 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; }

A 1x

3. Bedingungsüberdeckung

zähler < anzahltruefalsetruefalse

nicht_gefundentruetruefalsefalse

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18Geoinformation3

5

4. Pfadüberdeckung

A 9x

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

y=5 z=z-x

z=z/x z=0

x = 0

z > 1

x 0

z 1

Kontrollflussgraph:

Division durch 0, falls x=0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18Geoinformation3

5

4. Pfadüberdeckung

A 9x

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

y=5 z=z-x

z=z/x z=0

x = 0

z > 1

x 0

z 1

Testmenge: (x=0, z=1) links-rechts

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18Geoinformation3

5

4. Pfadüberdeckung

A 9x

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

y=5 z=z-x

z=z/x z=0

x = 0

z > 1

x 0

z 1

Testmenge: (x=0, z=1) links-rechts(x=3, z=8) rechts-links

Testmenge erfüllt Kantenüberdeckung, findet aber Fehler nicht

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18Geoinformation3

5

4. Pfadüberdeckung

A 9x

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

y=5 z=z-x

z=z/x z=0

x = 0

z > 1

x 0

z 1

Testmenge: (x=0, z=1) links-rechts(x=3, z=8) rechts-links(x=3, z=1) rechts-rechts

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18Geoinformation3

5

4. Pfadüberdeckung

A 9x

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

y=5 z=z-x

z=z/x z=0

x = 0

z > 1

x 0

z 1

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

Pfadüberdeckung findet Fehler

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18Geoinformation3

6

4. Pfadüberdeckung: Problem

A 1x

• 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

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18Geoinformation3

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)

P(t) = S(t)?

P(t) = S(t)?

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18Geoinformation3

8

Klassifikation von White-Box-Tests

Klassifikation Umfang des TestsC0 AnweisungsüberdeckungC1 KantenüberdeckungC1+ Kantenüberdeckung und Ausführung von Schleifen mit

ExtremwertenC1p Kantenüberdeckung und jede Bedingung wird einmal wahr

und einmal falsch ausgeführtC2 Kantenüberdeckung und jede Schleife wird

1. nicht ausgeführt2. mit einem niederen Zählwert ausgeführt3. 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

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18Geoinformation3

Testen: Vorgehen

9

1. Erkennen, dass Fehler vorliegt (bisher behandelt) 2. Lokalisierung des Fehlers, Bestimmung seiner Ursachen3. Korrigieren des Fehlers4. Testen des korrigierten Programms

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18Geoinformation3

10

Fehlerlokalisierung

• erfordert ca. 90% des Aufwands für Fehlerbeseitigung• Problem:

– Fortpflanzung: Fehler werden nicht an der Stelle sichtbar, wo sie entstehen

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18Geoinformation3

11

Fehlerlokalisierung: Methoden

1. Speicherabzug (Dump)2. Kontrollausgabe3. Debugging

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18Geoinformation3

12

Fehlerlokalisierung: "Speicherabzug"

• "Momentaufnahme" des Speichers• statisch• Ausgabe aller Paare

(Name der Variable / Wert der Variable)• Nachteil: gewaltige Datenmenge, Identifikation der relevanten Werte

aufwendig

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18Geoinformation3

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;

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18Geoinformation3

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

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18Geoinformation3

15

Bsp.: Debugging in Java-Umgebung Forte

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18Geoinformation3

16

Test: psychologische Komponente

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

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18Geoinformation3

17

Vielen Dank für die Aufmerksamkeit.

Fragen?

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18Geoinformation3

18

Übungsaufgabe: Bestimmung der Testmenge

Algorithmus ZweiSegmentSchnittInput: Zwei Segmente, gegeben durch die Punkte p1, p2, p3, p4Output: true, wenn sich beide Segmente schneiden, sonst false{

if(p1 == p2 oder p3 == p4) then ….. //Sonderfallbehandlungelse{ 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 ...... //Sonderfallbehandlungelse 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 Schnittpunktelse return false; //kein Schnittpunkt

}}