Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Testen und Analysieren von Software Fehlerbehebung und Re-Engineering Vorbemerkungen zu Themen #04 - #06 WS 2002/2003 Univ.-Prof. em. Dr. H.-J. Hoffmann.

Ähnliche Präsentationen


Präsentation zum Thema: "Testen und Analysieren von Software Fehlerbehebung und Re-Engineering Vorbemerkungen zu Themen #04 - #06 WS 2002/2003 Univ.-Prof. em. Dr. H.-J. Hoffmann."—  Präsentation transkript:

1 Testen und Analysieren von Software Fehlerbehebung und Re-Engineering Vorbemerkungen zu Themen #04 - #06 WS 2002/2003 Univ.-Prof. em. Dr. H.-J. Hoffmann (Stand 14. November 2002)

2 Siehe auch http://www.informatik.tu-darmstadt.de/ www.testen

3 Vorbemerkungen zu Themen #04 - #06 3 Was wird angesprochen? (I) Wo treten Zeichenreihen auf ? Übersetzer Interpreter / Gliederung Zeichenreihen als Eingabe Grundzeichen und Phrasenzeichen Baumstrukturen als Ausgabe Endliche Automaten Keller zur Aufnahme von Zeichen Strategien der Zerlegung von Zeichenreihen: - zielgericht (top-down) - rückschauend (bottom-up) Semantische Analyse als vorgezogene Interpretation

4 Vorbemerkungen zu Themen #04 - #06 4 Was wird angesprochen ? (II) Formale Sprachen - ich lasse hier die Formalismen weg, siehe Literaturangaben - Formale Spezifikation und Beschreibung der Sprachen - Grammatiken, siehe Literaturangaben - Automaten Formale Spezifikation und Beschreibung der Verhaltensweise der Automaten - Zerlegungsalgorithmen, siehe Literaturangaben - Diese Vorbemerkungen versuchen, plausibel zu machen, was zur Bearbeitung der Themen #03 - #06 bekannt und verstanden sein sollte

5 Vorbemerkungen zu Themen #04 - #06 5 Übersetzer Interpreter (I) Analyse / Front end Synthese (Generator) / Back end \_________________/ Übersetzer Ausführende Maschinerie (z.B. Virtual machine) Interpreter Zeichenreihe Baum Befehle Ergebnisse Daten (z.B. Byte code)

6 Vorbemerkungen zu Themen #04 - #06 6 Übersetzer Interpreter (II) (Sonderfall) Analyse / Front end Synthese (generator) / Back end \_________________/ Übersetzer Ausführende Maschinerie Interpreter Zeichenreihe Baum Befehle Ergebnisse u.U. Daten

7 Vorbemerkungen zu Themen #04 - #06 7 Gliederung (idealisiert, auf Analyse bezogen) Zeichen- Bezeichner- syntakt. semant.- Gütever- analyse analyse Analyse Analyse besserung sequentiell, unabhängig Zwischensprachen synchronisiert als (orientiert an) Verbraucher/Produzent/Verbraucher, Baumstruktur verschränkt / Koroutinen

8 Vorbemerkungen zu Themen #04 - #06 8 Zeichenreihen als Eingabe ? public class hello { public static void main (String args []) { System.out.println ("Hello World"); } }...static¤void¤main¤(String¤args¤[])¤{|¤¤¤¤¤¤System.out.prin... Leerzeichen Zeilenwechsel Textende

9 Vorbemerkungen zu Themen #04 - #06 9 Was ist mit Zeichenreihen zu tun ? Entfernen typographischer Zeichen (z.B. Leerzeichen, Zeilenwechsel - nicht Textende ! -) Abgrenzen der Token Schlüsselworttoken Operatortoken Bezeichertoken (einschl. Konstantentoken) public class hello { public static void main (String args []) { System.out.println ("Hello World"); } }

10 Vorbemerkungen zu Themen #04 - #06 10 Grundzeichen und Phrasenzeichen Grundzeichen - diese finden Sie auf der Tastatur - Phrasenzeichen - repräsentieren während der Analyse eine zusammengefaßte Reihe von Grundzeichen und/oder Grund- und Phrasenzeichen - Zwei Beispiele: public class hello { public static void main ( ) { ( ) ; } } class-end public class hello class-end

11 Vorbemerkungen zu Themen #04 - #06 11 Baumstrukturen (als Ausgabe) public class hello class-end Ein ziemlich willkürliches Beispiel (in einer Zwischen- stufe)

12 Vorbemerkungen zu Themen #04 - #06 12 Endliche Automaten (I) (für Zeichenanalyse) Grund- zustand ? Buchstaben Operator Ziffer Bezeichner bzw. Wortsymbol Bezeichner ? Ziffer Ziffer ? Ganze Zahl Gleitpunktzahl ? Ziffer ? ? ?

13 Vorbemerkungen zu Themen #04 - #06 13 Endliche Automaten (II) (für Zeichenanayse) Grund- zustand ? Buchstaben Operator Ziffer Bezeichner bzw. Wortsymbol Bezeichner ? Ziffer Ziffer ? Ganze Zahl Gleitpunktzahl ? Ziffer ? ? ? Regeln der Form: alter Zustand anstehendes Zeichen ==> neuer Zustand

14 Vorbemerkungen zu Themen #04 - #06 14 Endliche Automaten (III) (für Zeichenanaylse) Grund- zustand ? Buchstaben Operator Ziffer Bezeichner bzw. Wortsymbol Bezeichner ? Ziffer Ziffer ? Ganze Zahl Gleitpunktzahl ? Ziffer ? ? ? Fehlerbehandlung ? (siehe Referat #04)

15 Vorbemerkungen zu Themen #04 - #06 15 Endliche Automaten (IV) (für Zeichenanalyse) Siehe Beispiel (hier nicht gezeigt) Bedeutung des Trennzeichens der Token (häufig das Leerzeichen !) Leistungsfähigkeit der Analyse ? (keine geschachtelten / geklammerten Textstrukturen, warum ?) Tabellensteuerung

16 Vorbemerkungen zu Themen #04 - #06 16 Bezeichneranalyse Im Seminar nicht behandelt !

17 Vorbemerkungen zu Themen #04 - #06 17 Keller zur Aufnahme von Zeichen Wie sind geschachtelte / geklammerte Strukturen zu analysieren ? Früheres (von links her) Auftreten bestimmter Zeichen (z.B. von Klammern) muß hinsichtlich Zahl und Stel- lung in die Analyseentscheidungen eingehen können Also müssen früher aufgetretene Zeichen (vorüber- gehend) gespeichert werden können Kellerung dieser Zeichen Grundlage der syntaktischen Analyse

18 Vorbemerkungen zu Themen #04 - #06 18 Strategien der syntaktischen Analyse - der Dijkstrasche Verschiebebahnhof - (Ende der) Eingabe (Anfang der) Ausgabe Keller ?1?1 Es entsteht Postfix-Notation xxxx............xx? Was muß hier stehen ? - Entscheidungen bei ? 1 und ? 2 - Welche Zeichen werden ge- kellert ? Sind hier schließlich wieder alle Zeichen ? Keine Phrasenzeichen ! ?2?2 yyyy...............yy zzz...zzzz...z Leserichtung

19 Vorbemerkungen zu Themen #04 - #06 19 Strategien der syntaktischen Analyse - der Dijkstrasche Verschiebebahnhof - Keller ?1?1 Es entsteht Postfix-Notation xxxx............xx? Was muß hier stehen ? - Entscheidungen bei ? 1 und ? 2 - Welche Zeichen werden ge- kellert ? ?2?2 yyyy...............yy zzz...zzzz...z Sind hier schließlich wieder alle Zeichen ? Keine Phrasenzeichen ! Leserichtung (Anfang der) Ausgabe (Ende der) Eingabe Fehlerbehandlung ? (siehe Referat #06)

20 Vorbemerkungen zu Themen #04 - #06 20 Beispiel zur Postfixnotation A := B + C * ( D [ I + 1 ] - E ) / F ( X, Y + Z ) end A B C D I 1 + [] 1 E - * F X Y Z + f 2 / + := end ---------- ------------ indizierte Funktions- Variable Aufruf (ein Index) (zwei Parameter) Welche Zeichen fehlen in der Ausgabe, welche könnten dazukommen ? Eingabe (Token nach Zeichenanalyse) Ausgabe neue Operatoren

21 Vorbemerkungen zu Themen #04 - #06 21 Strategien der syntaktischen Analyse - zielgerichtete Analyse (top-down) (I) - Keller mit noch nicht erfüllten Zielen, hier ? --> Vergleichen und Wegwerfen des erfüll- ten Ziels (falls Grund- zeichen) ? xxxx............xxxxxxx...............xx zzz...zzzz...z Leserichtung (nicht mehr benötigter Anfang der) Eingabe (Ende der) Eingabe Zur Reduktion anstehen- de, das Ende repräsen- tierende Zeichenreihe aus Grund- und Phrasenzei- chen Leserichtung

22 Vorbemerkungen zu Themen #04 - #06 22 Strategien der syntaktischen Analyse - zielgerichtete Analyse (top-down) (II) - Zur Reduktion anstehen- de, das Ende repräsen- tierende Zeichenreihe aus Grund- und Phrasenzei- chen Keller mit Phrasenzei- chen z an oberster Stelle, hier ? --> Absetzen neuer Ziele z 1 z 2... z n ? xxxx............xxxxxxx...............xx zz::zzzz::zz Leserichtung (nicht mehr benötigter Anfang der) Eingabe z1z2:znz1z2:zn (Ende der) Eingabe Leserichtung

23 Vorbemerkungen zu Themen #04 - #06 23 Strategien der syntaktischen Analyse - zielgerichtete Analyse (top-down) (III) - Oberstes Ziel, als erstes auf dem Keller abgelegt:. Erfolg, wenn am Schluß Keller leer Aus den Produktionen für ein sich an oberster Stelle des Keller befindliches Ziel z wird durch Vergleich links an erster Stelle der Produktion mit anstehendem (Grund-)Zeichen r 1 entschieden, welche Gabel (d.h. rechte Seite der Produktion z := r 1... r n ) erwartet wird, und diese dann im Keller abgesetzt (stark vereinfacht). Lesen der Gabel, schließlich Ziel z erfüllt. Üblicherweise k = 1 (Anzahl der auf der Eingabe zur Entscheidungsfindung betrachteten Zeichen) (siehe später)

24 Vorbemerkungen zu Themen #04 - #06 24 Strategien der syntaktischen Analyse - zielgerichtete Analyse (top-down) (IV) - Zeichen (Ziele bzw. Zwischenziele) in Gabeln im Keller werden bei Übereinstimmung von oben nach unten entfernt Ausgabe erfolgt bei einer Reduktion Aufbau des Zerlegungsbaums Dieser entsteht ausgehend von der Wurzel (Knoten ) Realisierung durch rekursiven Abstieg (recursive descent, in Anlehnung an endliche Automaten) Fehlerbehandlung ? (siehe Referat #04)

25 Vorbemerkungen zu Themen #04 - #06 25 Strategien der syntaktischen Analyse - rückschauende Analyse (bottom-up) (I) - Eine reduzierte / den Anfang reprä- sentierende Zeichen- reihe aus Grund- und Phrasenzeichen ? xxxx............xxxxxxx...............xx zzz...zzzz...z Leserichtung (Ende der) Eingabe Keller mit bis jetzt noch nicht voll gelesenen Gabeln, hier ? --> Weiterlesen (nicht mehr benötigter Anfang der) Eingabe

26 Vorbemerkungen zu Themen #04 - #06 26 Strategien der syntaktischen Analyse - rückschauende Analyse (bottom-up) (II) - reduzierte / den An- fang repräsentierende Zeichenreihe aus Grund- und Phrasenzeichen Keller an oberster Stel- le mit eingelesener Gabel, hier ? --> Reduzieren und Ab- setzen von z (ein Phrasen- zeichen !) als Repräsentant der eingelesenen Gabel ! ) ? xxxx............xxxxxxx...............xx zzz...zzzz...z Leserichtung (nicht mehr benötigter Anfang der) Eingabe z (Ende der) Eingabe

27 Vorbemerkungen zu Themen #04 - #06 27 Strategien der syntaktischen Analyse - rückschauende Analyse (bottom-up) (III) - Keller anfänglich leer. Erfolg, wenn am Schluß allein im Keller Reduziert wird, wenn eine vollständige Gabel gelesen ist - d.h. Entscheidung über Zerlegung zum spätmöglichsten Zeitpunkt ! - (stark vereinfacht). shift /reduce Üblicherweise k = 1 (Anzahl der auf der Eingabe zur Entschei- dungsfindung betrachteten Zeichen) (siehe früher)

28 Vorbemerkungen zu Themen #04 - #06 28 Strategien der syntaktischen Analyse - rückschauende Analyse (bottom-up) (IV) - Ausgabe erfolgt bei einer Reduktion Aufbau des Zerlegungsbaums Dieser entsteht ausgehend von (vielen) Zweigen, die schließlich zur Wurzel (Knoten ) zusam- mengefaßt sind Verschränkung mit semantischer Analyse (für syntheti- sierte Attribute leicht) möglich Realisierung durch LR-Analyse (in Anlehnung an endliche Automaten) Fehlerbehandlung ? (siehe Referat #05)

29 Vorbemerkungen zu Themen #04 - #06 29 Typische sprachspezifische Aufgaben der seman- tischen Analyse: -Auflösung überladener Operationen (u.ä.) -Typüberprüfung -Umstellungen zur Güteverbesserung (u.ä.) -Speicherabbildung -Adressierung lokales, an Reihung in ursprünglich vorgelegtem Text orientiertes Vorgehen am Zerlegungsbaum orientiert Erweiterung um maschinenspezifische Aufgaben Als Einstieg gezeigt an Interpretation von Postfix- Notation Semantische Analyse als vorgezogene Interpretation

30 Vorbemerkungen zu Themen #04 - #06 30 Strategien der syntaktischen Analyse - der Dijkstrasche Verschiebebahnhof - (Ende der) Eingabe (Anfang der) Ausgabe Operatorkeller ?1?1 Es entsteht Postfix-Notation xxxx............xx? - Entscheidungen bei ? 1 und ? 2 - Welche Zeichen werden ge- kellert ? ?2?2 yyyy...............yy zzz...zzzz...z Leserichtung Zur Erinnerung !

31 Vorbemerkungen zu Themen #04 - #06 31 Beispiel zur Postfixnotation A := B + C * ( D [ I + 1 ] - E ) / F ( X, Y + Z ) end A B C D I 1 + [] 1 E - * F X Y Z + f 2 / + := end ---------- ------------ indizierte Funktions- Variable Aufruf (ein Index) (zwei Parameter) Eingabe (Token nach Zeichenanalyse) Ausgabe neue Operatoren Zur Erinnerung !

32 Vorbemerkungen zu Themen #04 - #06 32 (Ende der) Eingabe Operandenkeller p p p p p p p....... p p p p p p ? ooo::ooooo::oo Leserichtung Semantische Analyse als vorgezogene Interpretation - gezeigt an Interpretation von Postfix-Notation - generierte Befehle ? Übernehmen von Operanden, solange bis Operator auftritt, dann ? Operator + zugehörige Operanden entnommen ?

33 Vorbemerkungen zu Themen #04 - #06 33 A B C D I 1 + [] 1 E - * F X Y Z + f 2 / + := end Eingabe Semantische Analyse als vorgezogene Interpretation - gezeigt an Interpretation von Postfix-Notation - Ausgabe I + 1 ==> H1 D [ H1 ] ==> H2 H2 - E ==> H3 C * H3 ==> H4 Y + Z ==> H5 float ( H5 ) ==> H6 F ( X, H6 ) ==> H7 H4 / H7 ==> H8 B + H8 ==> H9 H9 ==> A Irrtum vorbehalten ! Typüberprüfung beim jeweiligen Generieren ! Einfach gehaltene Speicherabbildung

34 Vorbemerkungen zu Themen #04 - #06 34 A B C D I 1 + [] 1 E - * F X Y Z + f 2 / + := end Eingabe Semantische Analyse als vorgezogene Interpretation - gezeigt an Interpretation von Postfix-Notation - Ausgabe I + 1 ==> H1 D [ H1 ] ==> H1 H1 - E ==> H1 C * H1 ==> H1 Y + Z ==> H2 float ( H2 ) ==> H2 F ( X, H2 ) ==> H2 H1 / H2 ==> H1 B + H1 ==> A Irrtum vorbehalten ! Typüberprüfung beim jeweiligen Generieren ! Verbesserte Speicherabbildung

35 Vorbemerkungen zu Themen #04 - #06 35 Semantische Analyse als vorgezogene Interpretation - gezeigt an Interpretation von Postfix-Notation - I + 1 ==> H1 D [ H1 ] ==> H1 H1 - E ==> H1 C * H1 ==> H1 Y + Z ==> H2 float ( H2 ) ==> H2 F ( X, H2 ) ==> H2 H1 / H2 ==> H1 B + H1 ==> A Irrtum vorbehalten ! Befehle könnten sofort ausge- führt werden; keine Befehls- generierung erforderlich Operandenkeller wird zur Lauf- zeit ein Verbesserte Speicherabbildung Wertekeller !

36 Vorbemerkungen zu Themen #04 - #06 36 Attributierung an den Knoten der Zerlegungsbaums ==> attributierter Baum Beispiele von Attributen: - Typ des durch den Knoten repräsentierten Laufzeit- werts - Speicherbedarf dieses Werts - Speicheradresse dieses Werts - In Programmschleifen Aussage über Art der Wert- änderung (z.B. Eignung für lineare Adreßfortschaltung) ererbte und synthetisierte Attribute Berechnungsregeln für Attribute Baumdurchwanderung zur Berechnung der Attribute / vorab bestimmtes Attributberechnungsprogramm Semantische Analyse

37 Vorbemerkungen zu Themen #04 - #06 37 Attributierung an den Knoten der Zerlegungsbaums ==> attributierter Baum Beispiele von Attributen: - Typ des durch den Knoten repräsentierten Laufzeit- werts - Speicherbedarf dieses Werts - Speicheradresse dieses Werts - In Programmschleifen Aussage über Art der Wert- änderung (z.B. Eignung für lineare Adreßfortschaltung) Berechnungsregeln für Attribute Baumdurchwanderung zur Berechnung der Attribute / vorab bestimmtes Attributberechnungsprogramm Semantische Analyse Fehlerbehandlung ? (siehe Referat #06)

38 Vorbemerkungen zu Themen #04 - #06 38 ENDE der Vorbemerkungen Fragen ?

39 Vorbemerkungen zu Themen #04 - #06 39 Die Literaturangaben dienen als Anleitung zur jeweiligen Thematik. Die Bearbeiter sollten sich um einen darüber hinausgehenden Überblick bemühen. Angaben noch unvollständig !

40 Vorbemerkungen zu Themen #04 - #06 40 Zu den Referaten #03 - #06 (Allgemeines) A.V. Aho et al.: Compilerbau Teil 1 und 2; Oldenbourg, 1999 U. Kastens: Übersetzerbau; Oldenbourg, 1990 NN: Syntaxanalyse - Parser; http://www-ui.informatik.uni- oldenburg.de/ai/lehre/veranstaltungen/ws99/ download/syntax1.pdf, 1999 (Zugriff 2. Oktober 2002) NN: Types of errors; (Zugriff 10. Oktober 2002) http://gsbapp2.uchicago.edu/sas/sashtml/Ircon/z0993446.html, 1999 J. Elder:A Bibliography of Compiler Construction; 1994 http://www.cs.qub.ac.uk/~D.McKeever/csc303/Reference/ Bibliography.html#Lexical analysis, (Zugriff 2. Oktober 2002) P.N. van den Bosch: Bibliography on syntax error handling in context-free languages; ACM SIGPLAN Notices, 27 (1992) 4, 77 - 85 W. Horwat: JavaScript 2.0 error recovery; 1999 (Zugriff 11. Okt. 2002) http://www.mozilla.org/js/language/js20-1999-02-18/error- recovery.html #03-#06

41 Vorbemerkungen zu Themen #04 - #06 41 Lexikalische Fehler (bei der Zeichenanalyse; Schreibfehler) I. Durham et al.: Spelling correction in user interfaces; Comm. ACM, 26 (1983) 10, 764 - 773 M.A. Bickel: Automatic correction to misspelled names - a fourth- generation language approach; Comm. ACM, 30 (1987) 3, 224 - 228 C. McManis: Lexical analysis and Java; 1997 (Zugriff 2. Oktober 2002) http://www.javaworld.com/javaworld/jw-01-1997/jw-01- indepth_p.html K.A.S. Abdel-Ghaffar: Detecting substitutions and transposition of characters: The Computer Journal 41 (1998)4, 270 - 277 LEX bzw. FLEX (u.a.) als Entwicklungswerkzeuge für Übersetzer- programme #03 25.11.02

42 Vorbemerkungen zu Themen #04 - #06 42 Syntaktische Fehler I (bei zielgerichteter Analyse, top-down) R. Völler: Top-Down-Analyse; (Zugriff 2. Oktober 2002) http://users.informatik.fh- hamburg.de/~voeller/fc/comp/node16.html NN: LL parsing; (Zugriff 2. Oktober 2002) http://www.cs.duke.edu/courses/spring02/cps140/lects/sectllpar seS.pdf N. Wirth: Coping with syntax errors (Kapitel 7.3 in Compiler Construction); Addison-Wesley, 1996, 40 - 4 J. Grosch: Efficient and comfortable error recovery in recursive descent parsers;Structured Programming, 11 (1990) 3, 129 -140 S.O. Anderson et al.: An assessment of locally least-cost error recovery; The Computer Journal, 26 (1983) 1, 15 - 24 #04 2.12.02

43 Vorbemerkungen zu Themen #04 - #06 43 Syntaktische Fehler II (bei rückschauender Analyse, bottom-up) NN: Problem bei SR-Parsern...; http://ui.informatik.uni-oldenburg.de/ai/lehre/veranstaltungen/ws99/ download/LR_Parser.pdf, 1999 (Zugriff 9. Oktober 2002) R. Völler: Bottom-up-analysis; (Zugriff 2. Oktober2002) http://users.informatik.fh-hamburg.de/~voeller/fc/comp/node17.html S.L. Graham, S.P. Rhodes: Practical syntactic error recovery; ACM Communications, 18 (1975) 11, 639 - 650 S. Sippu, ?. Soisalon-Soininen: Practical error recovery in LR parsing; Principles of Programming Languages, 9 (1982), 177 - ??? I.-S. Kim, K.-M. Choe: Error repair with validation in LR-based parsing; ACM Transact. Programming Languages & Systems, 23 (2001) 4, 451 - 471 C. Cerecke: Repairing syntax errors in LR-based parsers; 2002 http://www.cosc.canterbury.ac.nz/~cdc/pub/cerecke02a.pdf (Zugriff 9. Okt. 2002) YACC bzw. BISON (u.a.) als Entwicklungswerkzeuge für Übersetzer- programme, ebenso GNU CC #05 9.12.02

44 Vorbemerkungen zu Themen #04 - #06 44 Semantische Fehler F. Hernandez-Campos: Semantic analysis; 2002 http://www.cs.unc.edu/~fhernand/144/lectures/lect12.pdf (Zugr. 11. Okt. 2002) P. Graham: Introduction to compilers - Semantic analysis notes; http://www.cs.umanitoba.ca/~cs329/Notes/4Seman.pdf, 2002 (11. Okt. 2002) S.A. Edwards: Types and static semantic analysis; 2002 (11.10. 02) http://www.cs.columbia.edu/~sedwards/classes/2002/w4115/type s.9up.pdf C.W.Johnson, C. Runciman: Semantic errors - diagnosis and repair; ACM SIGPLAN Notices, 17 (1982) 6, 88 - 97 F. Tip, T.B. Dinesh: A slicing-based approach for locating type errors; ACM Transact. Software Engineering Methodology, 10 (2001) 1, 5 - 55 (hier 5 - 16) ==> #06 16.12.02 (I)

45 Vorbemerkungen zu Themen #04 - #06 45


Herunterladen ppt "Testen und Analysieren von Software Fehlerbehebung und Re-Engineering Vorbemerkungen zu Themen #04 - #06 WS 2002/2003 Univ.-Prof. em. Dr. H.-J. Hoffmann."

Ähnliche Präsentationen


Google-Anzeigen