1 Semantische Fehler Seminar im Grundstudium WS2002/2003: Testen und Analysieren von Software...

Preview:

Citation preview

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.

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.

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

Operator Linker Datentyp

Rechter Datentyp

Ergebnis

+ INTEGER INTEGER INTEGER

- INTEGER INTEGER INTEGER

* INTEGER INTEGER INTEGER

/ INTEGER INTEGER INTEGER

> INTEGER INTEGER BOOLEAN

< INTEGER INTEGER BOOLEAN

== INTEGER INTEGER BOOLEAN

== BOOLEAN BOOLEAN BOOLEAN

Beispielhafte Operatortabelle

10

Fehleranalyse - statisch

Beispiele für Semantikregeln:a) Namen dürfen nur einmal vereinbart

werden.b) Namen, die in Zuweisungen auftreten,

müssen vereinbart werden.c) Es gelte die vorher definierte

Operatortabelle.d) 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 - statischEVA:=((EVA+WERT)*ADAM) > (WERX-500);

Zeile 7: linker Operand von "+" nicht INTEGER !!

Zeile 7: WERX nicht deklariert !!

EVA|EVA|WERT|+|ADAM|*|WERX|500|-|>|:=

13

Fehleranalyse - statischEVA:=((EVA+WERT)*ADAM) > (WERX-500);

Keine Fehlermeldung

Zuweisung korrekt keine Fehlermeldung

EVA|EVA|WERT|+|ADAM|*|WERX|500|-|>|:=

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öglichint 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

16

Fehleranalyse - dynamisch

Analog zur statischen, nur Auswertung mit aktuellen Speicherwerten und –typen. Z.B:– Array von 0..255. 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 WortreichDer unterstützte Grad der Fehlermeldung hängtauch von der Programmiersprache ab.

20

FRAGEN???!

Recommended