Simulation und Testen von Algorithmen Softwareentwicklung 1 (gtec) Hanspeter Mössenböck, Herbert Prähofer 1 Handsimulation von Algorithmen Man versteht einen Algorithmus, wenn man genau weiß, wie er arbeitet. Dazu rechnet man ihn durch. Handsimulation Schreibtischtest Man spielt Computer und arbeitet den Algorithmus Schritt für Schritt ab. Dabei notiert man sich die Variabelenbelegung an bestimmten, interessanten, neuralgischen Positionen im Algorithmus. Softwareentwicklung 1 (gtec) Hanspeter Mössenböck, Herbert Prähofer 4
Algorithmus "Sum" Sum() sum = Pos read( number) Pos number sum while number> Pos 1 1??? 1 9 1 sum = sum + number read( number) Pos 6 8 1 16 4 write( sum) Softwareentwicklung 1 (gtec) Hanspeter Mössenböck, Herbert Prähofer 6 Handsimulation: Vor- und Nachteile Vorteile Nachteile Genau Langsam Sicheres Auffinden von Fehlern Bei etwas komplexeren Algorithmen nicht mehr durchführbar Softwareentwicklung 1 (gtec) Hanspeter Mössenböck, Herbert Prähofer 7
Testausgaben Testpunkte im Algorithmus sind Stellen für Testausgaben im Programm Testausgaben sollen in ansprechender Weise interessante Zwischenergebnisse während der Programmausführung ausgeben Werte von wichtigen Variablen Werte von Bedingungen (Assertions) Ausgabe, ob bestimmte Zweige (z.b. bei if-verzeigungen) wann betreten werden Softwareentwicklung 1 (gtec) Hanspeter Mössenböck, Herbert Prähofer 8 Beispiel Sum: Testausgaben public class Sum { public static void main(string[] args) { int sum = ; int number; /*Test*/ IO.writeLn(" -- Test : sum = " + sum); IO.write("Bitte Zahlen eingeben: "); number = IO.readInt(); /*Test*/ IO.writeLn(" -- Test 1: number = " + number + ", sum = " + sum); while (number > ) { sum = sum + number; IO.write("Bitte Zahlen eingeben: "); number = IO.readInt(); /*Test*/ IO.writeLn(" -- Test : number = " + number + ", sum = " + sum); } IO.write("Die Summe ist:"); IO.writeLn(sum); } } Softwareentwicklung 1 (gtec) Hanspeter Mössenböck, Herbert Prähofer 9
Testplan Was will man testen Normale Fälle - testen normale Funktion des Algorithmus - dabei an alle unterschiedlichen Möglichkeiten denken Grenzfälle - sind jene Fälle bei dem der Algorithmus noch funktionieren soll - Grenzfälle sind sehr wichtige Testfälle Sonderfälle - sind jene Fälle, für die der Algorithmus eigentlich nicht funktioniert, die aber vorkommen können - benötigen spezielle Behandlung Wie will man testen Eingabewerte Testpositionen Erwartete Ergebnisse Softwareentwicklung 1 (gtec) Hanspeter Mössenböck, Herbert Prähofer 11 Syntax und Semantik von Programmiersprachen Softwareentwicklung 1 (gtec) Hanspeter Mössenböck, Herbert Prähofer 14
Beschreibung von Programmiersprachen Syntax Regeln, nach denen Sätze gebaut werden dürfen z.b.: Zuweisung = Variable " " Ausdruck. Semantik Bedeutung der Sätze z.b.: werte Ausdruck aus und weise ihn der Variablen zu Grammatik Menge von Syntaxregeln z.b. Grammatik der ganzen Zahlen Ziffer = "" "1" "" "3" "4" "5" "6" "7" "8" "9". Zahl = Ziffer {Ziffer}. Ziffer Zahl 1 3 4 5 6 7 8 9 Ziffer Softwareentwicklung 1 (gtec) Hanspeter Mössenböck, Herbert Prähofer 15 EBNF (Erweiterte Backus-Naur-Form) Metazeichen Bedeutung Beispiel beschreibt =. ( ) [ ] { } trennt Regelseiten schließt Regel ab trennt Alternativen klammert Alternativen wahlweises Vorkommen..n-maliges Vorkommen x y (x y) z [x] y {x} y x, y xz, yz xy, y y, xy, xxy, xxxy,... Beispiel: Beispiele Grammatik der Gleitkommazahlen Zahl = Ziffer {Ziffer}. Gleitkommazahl = Zahl "." Zahl ["E" ["+" "-"] Zahl]. Softwareentwicklung 1 (gtec) Hanspeter Mössenböck, Herbert Prähofer 17
EBNF Beispiel Gleitkommazahlen Real = DigitSequence ((. DigitSequence [ ScaleFactor ] ) ScaleFactor ). ScaleFactor = ( e E ) [ + - ] DigitSequence. DigitSequence = Digit { Digit }. Digit = 1 3 4 5 6 7 8 9. Softwareentwicklung 1 (gtec) Hanspeter Mössenböck, Herbert Prähofer 18 Syntaxdiagramme (Eisenbahndiagramme) Terminalsymbole Kreise oder Ovale Nonterminalsymbole Rechtecke Für Alternativen Weichen / Montag LongDate Softwareentwicklung 1 (gtec) Hanspeter Mössenböck, Herbert Prähofer 19
Beispiel Gleitkommazahlen: Syntaxdiagramm Real 6 DigitSequence 58 9. DigitSequence 58 ScaleFactor 61 8 ScaleFactor 61 7 6 ScaleFactor 61 e + Digit 5 E - DigitSequence 58 4 3 DigieSequence 58 Digit 1 Softwareentwicklung 1 (gtec) Hanspeter Mössenböck, Herbert Prähofer Beispiel Gleitkommazahlen: Syntaxbaum (Ableitungsbaum) Real Digit- Sequence dig dig dig Digit- Seq. dig ScaleFactor DigitSequence dig dig 13.4E+1 Softwareentwicklung 1 (gtec) Hanspeter Mössenböck, Herbert Prähofer 1