Semantische Fehler Seminar im Grundstudium WS2002/2003:

Slides:



Advertisements
Ähnliche Präsentationen
Einführung in die Programmiersprache C/C++
Advertisements

Algorithmentheorie 08 – Dynamische Programmierung (1)
ALP II: Objektorientierte Programmierung Sommersemester 2006
der Universität Oldenburg
Imperative Programmierung
Imperative Programmierung
Forschungszentrum caesar
Einführung in die Programmierung Zusammenfassung
Variablen und Datentypen
Zusammenfassung der Vorwoche
der Universität Oldenburg
FH-Hof Einbindung von JavaScript Anweisungen
Java: Objektorientierte Programmierung
Java: Dynamische Datentypen
Indirekte Adressierung
FH-Hof Indirekte Adressierung Richard Göbel. FH-Hof Einfache Speicherung von Daten Eine "einfache" Deklaration definiert direkt eine Speicherplatz für.
Java: Referenzen und Zeichenketten
Java: Grundlagen der Objektorientierung
C- Syntax. Bestandteile der Sprache C: Ausdrücke Anweisungen.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Prof. Dr. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Tobias Lauer.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Prof. Dr. Th. Ottmann.
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
Imperative Programmierung Funktionen und Parameter
Imperative Programmierung
Diskrete Mathematik I Vorlesung Arrays-
Java-Kurs - 2. Übung Entwicklungsumgebung Struktur von Programmen
Praxis-Repetitorium JAVA zusätzliche, ergänzende Lehrveranstaltung
PKJ 2005/1 Stefan Dissmann Zusammenfassung Vorwoche Programm besteht aus mehreren Bestandteilen: Schlüsselwörter Sonderzeichen Bezeichner Kommentare Texte.
Zusammenfassung Vorwoche
Fehlerabdeckung/ Regressionstest1 Testen und Analysieren von Software Fehlerbehebung und Re-Engineering Fehlerabdeckung/ Regressionstest Vortragende:
Seite 1 Interface - Konzept Ein Interface führt einen neuen Datentyp ein: interface Frau {... } Das Interface enthält Deklarationen ( keine Definitionen.
Programmiersprachen II Integration verschiedener Datenstrukturen
Was umfaßt die CORBA Core Spezifikation? Welche zusätzlichen Komponenten muß ein ORB Produkt beinhalten? Core: CORBA Objekt Modell CORBA Architektur OMG.
Einführung in die Programmiersprache C 1
Java programmieren mit JavaKara
Einführung in die Programmierung Wintersemester 2013/14 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Kontrollstrukturen Verwendung: Steuerung des Ablaufs.
Einführung in die Programmiersprache C 3.Tag Institut für Mathematische Optimierung - Technische Universität Braunschweig.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik I Thema 16: Ausnahmebehandlung.
Einführung in die Programmierung Wintersemester 2012/13 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Programmiersprache C 4
Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik Dr. Wieland Schwinger
1. Entwicklungsumgebung 2. Kontextmenü 3. Compile 4. Objekt 5. Attribut 6. Klasse 7. Deklaration 8. Intialisierung.
© 2004 Pohlig - Taulien Explizite Typenumwandlung.
EPROG Tutorium #3 Philipp Effenberger
CuP - Java Vierte Vorlesung Entspricht ungefähr Kapitel 2.1 des Skriptums Montag, 14. Oktober 2002.
Agenda für heute, 12. Mai, 2005 ProzedurenProzeduren Funktionsprozeduren Prozedurparameter Lokale und globale Variablen Datentypen: Ordinaltypen.
Agenda für heute, 7. April, 2005 Bedingte ProgrammausführungBedingte Programmausführung Algorithmische Grundlagen Vergleichsoperatoren, Wahrheitswerte.
Wolfram Luther Peter Hertling Wintersemester 2007/08
Programmieren in C Grundlagen C 2
Hochschule Fulda – FB ET Sommersemester 2014
Programmieren in C Grundlagen C 2
Agenda Motivation und Einordnung Syntaxgerichtete Übersetzung
Robuste Programme durch Ausnahmebehandlung
Java-Kurs - 3. Übung Hausaufgabe Arrays For-Schleifen.
COBOL Präsentation im Rahmen des Seminars „Programmiersprachen“
Semantische Analyse und attributierte Grammatiken
Modellbasierte Software- Entwicklung eingebetteter Systeme Prof. Dr. Holger Schlingloff Institut für Informatik der Humboldt Universität und Fraunhofer.
Sammlungsklassen Array.
Diskrete Mathematik I Vorlesung 2 Arrays.
Programmiersprache PASCAL
Variablen und Operatoren. C++ Teil 2: Grundstrukturen Variablen Operatoren Kontrollstrukturen Funktionen Header-Dateien Pointer und Referenzen.
ESP Tutorium Studienassistent: Ewald Moitzi Gruppe 1.
Einführung in die Programmierung
Variable: typ varName = Wert Kiste: Art Aufschrift  Inhalt
Datentyp- umwandlung.
Explizite Typenumwandlung
 Präsentation transkript:

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

Agenda Definition Problemstellung Prozesseinordnung Fehleranalyse Fehlerbehandlung

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

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.

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.

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.

Prozesseinordnung (2)

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

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

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.

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

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 !!

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

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

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.

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

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

Fehlerbehandlung

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.

FRAGEN???!