Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Semantische Fehler Seminar im Grundstudium WS2002/2003:

Ähnliche Präsentationen


Präsentation zum Thema: "Semantische Fehler Seminar im Grundstudium WS2002/2003:"—  Präsentation transkript:

1 Semantische Fehler Seminar im Grundstudium WS2002/2003:
Testen und Analysieren von Software Referenten: Bernd Freigang und Dirk Simonis Betreuer: Prof. em. Dr. H.-J. Hoffmann

2 Agenda Definition Problemstellung Prozesseinordnung Fehleranalyse
Fehlerbehandlung

3 Definition (1) Typfehler (Datentypen)
Überprüfung des Kontrollflusses (goto, break, etc.) Eindeutigkeitsprüfung (z.B. switch-Anweisung) Gültigkeitsprüfung (scope)

4 Definition (2) Auf Namen bezogene Prüfungen (PROCEDURE a; ... END a;)
Prüfung auf mathematische Korrektheit (z.B. Division durch 0) Ein Compiler heißt streng typisiert hin-sichtlich des Typsystems der Program-miersprache, wenn er garantieren kann, dass keine „semantischen“ Typfehler mehr vorhanden sind.

5 Problemstellung Einige Fehler können erst zur Laufzeit ermittelt werden Erkennen des Gültigkeitsbereichs anhand des Syntaxbaums Falsche Ergebnisse, bei Berechnungen Intention des Programmierers nicht bekannt. for(int i=0;i<10;i++); system.out.println(‘*‘); Fehleranalyse, gibt nur Fehlermeldung, aber keine Interpretation. Zu ( 3): Berechnung als Beispiel Schleifen mit Gleitkomma-Abbruchbedingungen. Man erinnere Sich an Inf 2 mit dem Getränke-Automaten. Darstellung von 0.1 nicht exakt im Standard IEEE 754.

6 Prozesseinordnung (1) Während dem Compilieren (Statische Analyse)
Beim Aufbau des Syntaxbaums (Parsen) In einem gesonderten Durchlauf nach dem Parsen Während der Ausführung (Dynamische Analyse) Restliche Prüfung auf semantische Korrektheit, welche vom Compiler nicht gewährleistet werden kann. Bei Bottom-Up Analyse ist eine Typüberprüfung möglich. Kontrollflussanalyse wird top-down angewandt.

7 Prozesseinordnung (2)

8 Fehleranalyse - statisch
Bezeichnertabelle Bezeichner <-> Datentyp Operatortabelle Datentyp1 und Datentyp2 mit Operator ergibt Datentyp3 Konvertierungstabelle Datentyp kann in x-Datentypen konvertiert werden Syntaxbaum

9 Fehlerbehandlung - statisch
Beispielhafte Operatortabelle Operator Linker Datentyp Rechter Datentyp Ergebnis + INTEGER - * / > BOOLEAN < ==

10 Fehleranalyse - statisch
Beispiele für Semantikregeln: Namen dürfen nur einmal vereinbart werden. Namen, die in Zuweisungen auftreten, müssen vereinbart werden. Es gelte die vorher definierte Operatortabelle. Bei einer Zuweisung müssen der Name auf der linken Seite, und der Ausdruck auf der rechten Seite vom gleichen Typ sein.

11 Fehleranalyse - statisch
VAR ADAM: INTEGER; VAR EVA: BOOLEAN; VAR ADAM: BOOLEAN; (* Zeile 3: Verstoß gegen Regel a *) VAR WERT: INTEGER; BEGIN EVA:=((EVA+WERT)*ADAM) > (WERX-500); (* Zeile 7 *) (* ^ Verstoß gegen Regel c *) (* ^ Verstoß gegen Regel b *) WERT:=EVA; (* Zeile 10: Verstoß gegen Regel d *) END

12 Fehleranalyse - statisch
EVA:=((EVA+WERT)*ADAM) > (WERX-500); EVA|EVA|WERT|+|ADAM|*|WERX|500|-|>|:= Zeile 7: linker Operand von "+" nicht INTEGER !! Zeile 7: WERX nicht deklariert !!

13 Fehleranalyse - statisch
EVA:=((EVA+WERT)*ADAM) > (WERX-500); EVA|EVA|WERT|+|ADAM|*|WERX|500|-|>|:= Keine Fehlermeldung Zuweisung korrekt  keine Fehlermeldung

14 Fehleranalyse - statisch
Datentypen werden zu Mengen zusammengefasst. Konvertierung von x in der Menge A zur Menge B, wenn A eine Teilmenge von B ist. int i = 10; float a= i; Konvertierung möglich int b = a; Warnung/Fehler

15 Fehleranalyse - statisch
Kontrollflussanalyse durch: Bezeichnertabelle Bestimmung der konstanten Ziele Mathematische Korrektheitprüfung nur möglich bei konstanten Werten. Prüfung aus unzulässige Berechnungen, wie z.B. Division durch 0. Java gibt keine Fehlermeldung C++ (g++-Compiler) gibt Warning Die Kontrollflussanalyse dient später für die Optimierung. Z.B. finden von totem Code.

16 Fehleranalyse - dynamisch
Analog zur statischen, nur Auswertung mit aktuellen Speicherwerten und –typen. Z.B: Array von Zugriff über Integer i C++ findet solche Fehler nicht, aufgrund seiner Architektur Java wirft eine Exception Division durch eine Variable Sprungziele Eindeutigkeitsprüfung bei switch-Anweisung

17 Fehlerbehandlung Typkonvertierung
Veränderung des Syntaxbaums, z.B. bei doppelter Deklaration Auswertung des Fehlers mit exakter Fehlermeldung durch Einordnung in eine Fehlertabelle.

18 Fehlerbehandlung

19 Fehlerbehandlung - Filter
Einordnung des Fehlers in Schweregrad Warnung Fehler Fatal-Error Auch der Grad der Fehlermeldung wird eingeordnet. Normal Wortreich Sehr Wortreich Der unterstützte Grad der Fehlermeldung hängt auch von der Programmiersprache ab. Bei Warnungen, wird auf jeden Fall weiter gemacht (z.B. Typkonvertierung) Bei Fehler, wird mit einem erwarteten Ergebnis weiter gemacht, aber kein Code generiert. Fatal-Error = Abbruch.

20 FRAGEN???!


Herunterladen ppt "Semantische Fehler Seminar im Grundstudium WS2002/2003:"

Ähnliche Präsentationen


Google-Anzeigen