530 likes | 659 Vues
Visuell-unterstütztes Programmieren Visuelles Testen von Programmen. Vortragende: Dennis Kalkofen, Carsten Takac. TU Darmstadt, Fachbereich Informatik Seminar: Visuell unterstütztes Programmieren SS 2002 Vortrag am 10.06.02, betreut von Prof. em. Dr. H.-J. Hoffmann. Gliederung.
E N D
Visuell-unterstütztes ProgrammierenVisuelles Testen von Programmen Vortragende: Dennis Kalkofen, Carsten Takac TU Darmstadt, Fachbereich Informatik Seminar: Visuell unterstütztes Programmieren SS 2002 Vortrag am 10.06.02, betreut von Prof. em. Dr. H.-J. Hoffmann
Gliederung • Wofür testet man Programme? • Testen des Syntax • Testen einzelner Programmteile • Integrationstests • Tests nach Programmänderungen
Weshalb Testen | Syntax | Programmteile | Integrationstests | Programmänderung Wofür testet man Programme? • Fehlersuche, -korrektur • Erkennen konzeptioneller Probleme • Verständnis • Zusammenspiel der Bestandteile • Test auf bestimmte Eigenschaften • Laufzeitanalyse
Weshalb Testen | Syntax | Programmteile | Integrationstests | Programmänderung Formatieren von Quelltext • Übersichtlichkeit • Lesbarkeit • Verständnis • mehr als nur Schönschrift • erleichtert Teamarbeit
Weshalb Testen | Syntax | Programmteile | Integrationstests | Programmänderung Formatierungsmittel • Anordnung des Codes • Namen von Bezeichnern • farbcodierter Text • Kommentierungen • Linien zur Unterteilung
Weshalb Testen | Syntax | Programmteile | Integrationstests | Programmänderung
Weshalb Testen | Syntax | Programmteile | Integrationstests | Programmänderung Worauf ist zu achten? • die ganze Programmierergruppe muß damit zurecht kommen • nicht gegen gängige Konventionen • Unterstützung des Editors und der IDE • Richtlinien regelmäßig überprüfen
Weshalb Testen | Syntax | Programmteile | Integrationstests | Programmänderung Animierte Algorithmen • zeigen den dynamischen Programmablauf • dienen zum Programmverständnis • finden von Fehlern • Abstraktion
Weshalb Testen | Syntax | Programmteile | Integrationstests | Programmänderung Beispiel: Quicksort Größe des Elementes Array
Weshalb Testen | Syntax | Programmteile | Integrationstests | Programmänderung Beispiel: Quicksort Größe des Elementes Array
Weshalb Testen | Syntax | Programmteile | Integrationstests | Programmänderung Beispiel: Quicksort Größe des Elementes Array
Weshalb Testen | Syntax | Programmteile | Integrationstests | Programmänderung Beispiel: Quicksort Größe des Elementes Array
Weshalb Testen | Syntax | Programmteile | Integrationstests | Programmänderung Beispiel: Quicksort Größe des Elementes Array
Weshalb Testen | Syntax | Programmteile | Integrationstests | Programmänderung Beispiel: Quicksort Größe des Elementes Array
Weshalb Testen | Syntax | Programmteile | Integrationstests | Programmänderung Beispiel: Quicksort Größe des Elementes Array
Weshalb Testen | Syntax | Programmteile | Integrationstests | Programmänderung Beispiel: Quicksort Größe des Elementes Array
Weshalb Testen | Syntax | Programmteile | Integrationstests | Programmänderung Beispiel: Quicksort Größe des Elementes Array
Weshalb Testen | Syntax | Programmteile | Integrationstests | Programmänderung Beispiel: Quicksort Größe des Elementes Array
Weshalb Testen | Syntax | Programmteile | Integrationstests | Programmänderung Beispiel: Quicksort Größe des Elementes Array
Weshalb Testen | Syntax | Programmteile | Integrationstests | Programmänderung Beispiel: Quicksort Größe des Elementes Array
Weshalb Testen | Syntax | Programmteile | Integrationstests | Programmänderung Beispiel: Quicksort Größe des Elementes Array
Weshalb Testen | Syntax | Programmteile | Integrationstests | Programmänderung Beispiel: Quicksort Größe des Elementes Array
Weshalb Testen | Syntax | Programmteile | Integrationstests | Programmänderung Beispiel: Quicksort Größe des Elementes Array
Weshalb Testen | Syntax | Programmteile | Integrationstests | Programmänderung Beispiel: Quicksort Größe des Elementes Array
Weshalb Testen | Syntax | Programmteile | Integrationstests | Programmänderung Beispiel: Quicksort Größe des Elementes Array
Weshalb Testen | Syntax | Programmteile | Integrationstests | Programmänderung Beispiel: Quicksort Größe des Elementes Array
Weshalb Testen | Syntax | Programmteile | Integrationstests | Programmänderung Bewertung der Animation • mit einfachen Mitteln die Funktionsweise von Bubblesort gezeigt • abstrahiert auf rote/grüne Balken • dennoch das Wesentliche ersichtbar => ein Fehler wäre mit dieser Animation leicht zu finden
Beginn kurze Zeit später Am Ende Bubblesort Quicksort Shellsort Weshalb Testen | Syntax | Programmteile | Integrationstests | Programmänderung Beispiel 2: Sortieralgorithmen im Vergleich
Weshalb Testen | Syntax | Programmteile | Integrationstests | Programmänderung Bewertung der Animation • andere Betrachtungsweise von Sortieralgorithmen • Vergleich des Verlaufs besser möglich • Rückschlüsse auf Arbeitsweise • Rückschlüsse auf Komplexität
Weshalb Testen | Syntax | Programmteile | Integrationstests | Programmänderung Exkurs: Tonunterstützung • Erweitern oder Ersetzen von visuellen Mitteln • gleichzeitiges Arbeiten mit visuellen Mitteln • stört nicht die GUI eines Programmes • kann leichtere Darstellung sein als visuell
Weshalb Testen | Syntax | Programmteile | Integrationstests | Programmänderung
Weshalb Testen | Syntax | Programmteile| Integrationstests | Programmänderung Umrißdiagramme • ursprünglich für ALGOL-Programme entwickelt • angepaßt an Objektorientierung und Logische Sprachen • visualisieren Änderungen während Programmablauf • Basis für Testprogramme
Weshalb Testen | Syntax | Programmteile| Integrationstests | Programmänderung Aufbau • bestehen aus ineinandergeschachtelten Boxen • jede Box repräsentiert Zustand einer Prozedur • Veränderungen während Programmablauf • Box beinhaltet Attribute, Rücksprungadresse (rpdl) und Quelltext • instruction pointer • Box wird gelöscht, wenn zurückgesprungen wird
Weshalb Testen | Syntax | Programmteile| Integrationstests | Programmänderung Beispiel f id attr value x y p1 int int proc 2 10 p1.cf rpdl system begin ... ... ... end f;
Weshalb Testen | Syntax | Programmteile| Integrationstests | Programmänderung Aufruf einer Prozedur f id attr value rpdl system var x, y : int; procedure p1(value y: int); y := 1; end p1; begin x := 1; p1(0); y := 3; end f;
Weshalb Testen | Syntax | Programmteile| Integrationstests | Programmänderung Aufruf einer Prozedur f id attr value x y int int - - rpdl system var x, y : int; procedure p1(value y: int); y := 1; end p1; begin x := 1; p1(0); y := 3; end f;
Weshalb Testen | Syntax | Programmteile| Integrationstests | Programmänderung Aufruf einer Prozedur f id attr value x y p1 int int proc - - - rpdl system var x, y : int; procedure p1(value y: int); y := 1; end p1; begin x := 1; p1(0); y := 3; end f;
Weshalb Testen | Syntax | Programmteile| Integrationstests | Programmänderung Aufruf einer Prozedur f id attr value x y p1 int int proc 1 - - rpdl system var x, y : int; procedure p1(value y: int); y := 1; end p1; begin x := 1; p1(0); y := 3; end f;
Weshalb Testen | Syntax | Programmteile| Integrationstests | Programmänderung Aufruf einer Prozedur f id attr value x y p1 int int proc 1 - cf rpdl system var x, y : int; procedure p1(value y: int); y := 1; end p1; begin x := 1; p1(0); y := 3; end f; attr id value y int 0 rpdl y:=3; y := 1;
Weshalb Testen | Syntax | Programmteile| Integrationstests | Programmänderung Aufruf einer Prozedur f id attr value x y p1 int int proc 1 - cf rpdl system var x, y : int; procedure p1(value y: int); y := 1; end p1; begin x := 1; p1(0); y := 3; end f; attr id value y int 1 rpdl y:=3; y := 1;
Weshalb Testen | Syntax | Programmteile| Integrationstests | Programmänderung Aufruf einer Prozedur f id attr value x y p1 int int proc 1 3 - rpdl system var x, y : int; procedure p1(value y: int); y := 1; end p1; begin x := 1; p1(0); y := 3; end f;
Weshalb Testen | Syntax | Programmteile| Integrationstests | Programmänderung Aufruf einer Prozedur f id attr value x y p1 int int proc 1 3 - rpdl system var x, y : int; procedure p1(value y: int); y := 1; end p1; begin x := 1; p1(0); y := 3; end f;
Weshalb Testen | Syntax | Programmteile| Integrationstests | Programmänderung Dynamische Datenstrukturen Beispiel: Array f • in Heaps dargestellt id attr value A x arr int 12 false 10 true rpdl ... ...
Testen komplexer Systeme mit GUI • Historisch: Mainframe Client/Server mit GUI • Geänderte Anforderungen • vielversprechender Ansatz: „Capture/Replay“ Tools
Wie wird GUI gestestet? • Einhaltung spezifizierter Vorgaben? • Use-Cases • Probleme: • komplexe Abläufe • Unmengen an „Verzweigungen“ • Manuell kaum möglich!
Automatisches Testen – „Capture/Replay“ Tools • Idee: • - Aufzeichnen der Benutzeraktivitäten (Capture) • - Editieren, Kombinieren • Wiedergabemöglichkeiten (Replay)
Testsystem C/R Tool GUI capture Interaktion replay Tester editieren, kombinieren Test Skript „Capture/Replay“ Tools
Capture - GUI-Elemente als Objekte - User-Aktivitäten den Objekten zuordnen - Sequenz festhalten im Testskript
Testskript (1) FileOpen.Files.SelectFileName • Erste Sequenz aufgezeichnet • Programmierung möglich FileOpen.OK.Click
Testskript (2) FileOpen.OK.Click • Editiermöglichkeiten • Bibliotheken Auswahl Sequenz File.Edit.TextInput File.Edit.TextFormat Schleife File.Scrollbar.Down …