Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

1234567891011121314151617181920 Geoinformation3 Geoinformation III Korrektheit von Programmen – Testen Vorlesung 9a.

Ähnliche Präsentationen


Präsentation zum Thema: "1234567891011121314151617181920 Geoinformation3 Geoinformation III Korrektheit von Programmen – Testen Vorlesung 9a."—  Präsentation transkript:

1 Geoinformation3 Geoinformation III Korrektheit von Programmen – Testen Vorlesung 9a

2 Geoinformation3 1 Korrektheit von Programmen Zuverlässigkeit und Robustheit Wie stellt man Korrektheit sicher? –Verifikation –Testen Testen –Prinzipien –Auswahl der Testmenge –Überdeckung –Black-Box vs. White-Box Fehlerlokalisierung Überblick

3 Geoinformation3 2 Ein Programm heißt korrekt, wenn es sich gemäß seiner Spezifikation verhält. Spezifikation: das, was das Programm tun soll Korrektheit von Programmen: Definition

4 Geoinformation3 Spezifikation 3 Bsp. Fakultät (aus Diskreter Mathe, 1. Sem.) int fak(int n) { if(n==0) return 1; else if (n>0) return n * fak(n-1); else return -1; } Programm Input: natürliche Zahl n (n  0) Output:

5 Geoinformation3 Input: Eine Menge S von Segmenten im 2D mit folgenden Einschränkungen: 2 Segmente schneiden sich höchstens in einem Punkt in keinem Punkt schneiden sich mehr als 2 Segmente die x-Koordinaten aller Segmente sind paarweise verschieden kein Segment ist vertikal Output: die Schnittpunkte der Segmente in S 4 Bsp. Scan-Line (aus Diskreter Mathe, 2. Sem.) Spezifikation Sei T = Endpunkte der Segmente von S nach x-Koordinaten sortiert (Haltepunkte) L =  // aktive Segmente von S while T   do { } Programm

6 Geoinformation3 5 Korrektheit: Formalisierung zu lösendes Problem mit Inputmenge I Spezifikation S: I  O ordnet jedem Input i  I den Output o = S(i)  O zu Programm P: I  O ordnet jedem Input i  I den Output o = P(i)  O zu P ist korrekt, wenn S(i) = P(i) für alle i  I gilt

7 Geoinformation3 6 Verwandte Qualitätskriterien Zuverlässigkeit "man kann sich auf das Programm verlassen" Robustheit Programm reagiert auch in nicht vorhergesehenen Situationen angemessen, z.B. bei falschen Eingaben, Plattencrashs, Netzwerkausfällen –nicht vorhergesehen = nicht von Spezifikation erfasst

8 Geoinformation3 7 Ist das Programm "Fakultät" korrekt? Spezifikation int fak(int n) { if(n==0) return 1; else if (n>0) return n * fak(n-1); else return -1; } Programm Input: natürliche Zahl n (n  0) Output:

9 Geoinformation3 8 Ist das Programm "Fakultät" korrekt? Spezifikation int fak(int n) {...} Programm Input: natürliche Zahl n (n  0) Output:... n kann beliebig groß werden "Unendlichkeit der Mathematik" n maximal 2 31 (int in Java) Endlichkeit der Zahlendarstellung Input: nat. Zahl n (0  n  2 31 )? n! > 2 31 für n = 2 31 Input: nat. Zahl n mit n!  2 31 ? In Zwischenschritt der Berechnung könnte Zahl > 2 31 auftreten

10 Geoinformation3 Wie weist man Korrektheit nach? 1.Verifikation: Formaler Beweis, dass P(i) = S(i) für alle i  I gilt (d.h. dass das Programm P seine Spezifikation S für jeden erlaubten Input i erfüllt) 1.Testen: Nachweis, dass P(i) = S(i) für eine endliche (praktikabel kleine) Teilmenge von I gilt  Ausprobieren 9

11 Geoinformation3 10 Verifikation I Mathematischer Beweis der Äquivalenz von Programm und Spezifikation Vorgehen: Verwendung von Invarianten und Hoare-Tripeln (vgl. Vorlesung Nr. 6 über UML/OCL): {Vorbedingung}, {Prozedur}, {Nachbedingung} Schrittweises Herleiten der Gültigkeit der Nachbedingung aus Gültigkeit der Vorbedingung und Axiomatisierung der Prozedur bis Gültigkeit der Spezifikation gezeigt ist

12 Geoinformation3 11 Verifikation II Voraussetzungen: –Spezifikation muss formalisiert vorliegen –Semantik von Programmkonstrukten der Sprache muss definiert sein Probleme: –Semantik von Sprachen bisher nicht ausreichen definiert –formale Beweise sind bereits bei kleinen Programmen lang und kompliziert (d.h. unübersichtlich und fehleranfällig) –für größere Programme bisher nicht möglich  nicht praktikabel

13 Geoinformation3 12 Mit Tests kann man nur die Anwesenheit, nie jedoch die Abwesenheit von Fehlern beweisen. E. Dijkstra

14 Geoinformation3 13 Testen Zum Vorgehen gibt es kein allgemeines Verfahren, nur empirische Regeln und Prinzipien ("Man sollte...", "Es empfiehlt sich....") kreative Tätigkeit sehr zeitaufwendig: ca. 40% der Programmentwicklungszeit wird zum Testen verwendet

15 Geoinformation3 14 Testen: Vorgehen 1.Testmenge T bestimmen 2.Programm P mit allen Testwerten t aus T laufen lassen 3.Jedes Ergebnis P(t) mit Spezifikation S(t) vergleichen 4.Falls Abweichung, a.Fehler lokalisieren b.Fehler beheben c.Testen des korrigierten Programms (gehe zu 1.) Schwieriges Problem: Ermittlung der Testmenge

16 Geoinformation3 15 //Beispiel: Maximum zweier Zahlen x und y int maximum; if (x > y) thenmaximum = x; elsemaximum = x; A 2x Einfluss der Größe der Testmenge Fehler nicht aufgedeckt Fehler aufgedeckt Testmenge 2: x = 3 ; y = 2 x = 2 ; y = 3 Testmenge 1: x = 3 ; y = 2 x = 4 ; y = 3 x = 5 ; y = 1 x = 6 ; y = 4

17 Geoinformation3 16 Prinzipien bei Auswahl der Testmenge sowohl typische als auch untypische Werte, Rand- und Grenzwerte, Extremwerte: –z.B. beim Zugriff auf Arrays: Test der unteren und oberen Arraygrenze, leeres Array –z.B. beim Sortieren einer Liste: aufsteigend sortierte Liste [1,2,7,9,11] absteigend sortierte Liste [11,9,7,2,1] leere Liste[ ] Liste mit einem Element [5] Liste mit identischen Elementen [66,66,66,66]

18 Geoinformation3 17 eine Testmenge T zu einem Programm P mit Spezifikation S heißt ideal, wenn gilt: P ist korrekt bzgl. S genau dann, wenn P für alle Elemente aus T korrekte Ergebnisse liefert. Zu jedem Programm P gibt es eine ideale Testmenge Wie findet man diese? Ideale Testmengen

19 Geoinformation3 18 Prinzip der totalen Überdeckung Gesucht: Möglichst ideale Testmenge Eingabemenge des Programms zerfällt in disjunkte Klassen, die sich jeweils ähnlich verhalten Testmenge soll genau einen Repräsentanten jeder Klasse enthalten Beispiel: Programm "Maximum": maximum(x,y) {if (x  y) then max = x; else max = y;} –Klasse 1: x  y, Repräsentant: (x = 5 ; y = 4) –Klasse 2: x < y, Repräsentant: (x = 3 ; y = 6)

20 Geoinformation3 19 Empirisches Test-Prinzip "Überdeckung" Ziel: Approximation der totalen Überdeckung wähle Testmenge so, dass "möglichst alle" Teile des Programms durchlaufen werden Motivation: wenn Teile nicht durchlaufen werden, dann wird der Fehler dort bestimmt nicht gefunden Vier Arten: 1.Anweisungsüberdeckung 2.Kantenüberdeckung 3.Bedingungsüberdeckung 4.Pfadüberdeckung

21 Geoinformation Anweisungsüberdeckung wähle Testmenge so, dass jede Anweisung mindestens einmal durchlaufen wird Beispiel: GGT(x,y) while x  y {if (x > y) then x = x - y; else y = y - x; } return x; A 1x wird nicht erreicht (x=3;y=4), (x=4;y=3) erfüllt Kriterium (x=3;y=3), (x=3;y=4) erfüllt Kriterium nicht


Herunterladen ppt "1234567891011121314151617181920 Geoinformation3 Geoinformation III Korrektheit von Programmen – Testen Vorlesung 9a."

Ähnliche Präsentationen


Google-Anzeigen