![Page 1: Programmiermethodik SS2007 © 2007 Albert Zündorf, University of Kassel 1 5. Test-First Prinzip Gliederung: 1. Einführung 2. Objektdiagramme zur Analyse](https://reader036.vdokument.com/reader036/viewer/2022062622/55204d6749795902118bca12/html5/thumbnails/1.jpg)
Programmiermethodik SS2007 © 2007 Albert Zündorf, University of Kassel 1
5. Test-First Prinzip
Gliederung:
1. Einführung
2. Objektdiagramme zur Analyse von Beispielen
3. Klassendiagramme in Java implementieren
4. Methodenentwurf
5. Test-First Prinzip
6. Story Driven Modeling
7. Zusammenfassung
![Page 2: Programmiermethodik SS2007 © 2007 Albert Zündorf, University of Kassel 1 5. Test-First Prinzip Gliederung: 1. Einführung 2. Objektdiagramme zur Analyse](https://reader036.vdokument.com/reader036/viewer/2022062622/55204d6749795902118bca12/html5/thumbnails/2.jpg)
Programmiermethodik SS2007 © 2007 Albert Zündorf, University of Kassel 2
Motivation: rettet Prinz(essin) Ada
Aufgabe: Dinge einsammeln
![Page 3: Programmiermethodik SS2007 © 2007 Albert Zündorf, University of Kassel 1 5. Test-First Prinzip Gliederung: 1. Einführung 2. Objektdiagramme zur Analyse](https://reader036.vdokument.com/reader036/viewer/2022062622/55204d6749795902118bca12/html5/thumbnails/3.jpg)
Programmiermethodik SS2007 © 2007 Albert Zündorf, University of Kassel 3
Methodenentwurf:
1. Beispiel auf Anwendungsebene anschauen
2. Beispiel in Objektdiagrammen / Story Boards modellieren
3. "Dreisprung":
1. generellen Kontrollfluss auf Anwendungsebene skizzieren
2. generelles Verhalten auf Objektebene skizzieren
3. allgemeines Verhalten programmieren
4. programmiertes Verhalten am Ausgangsbeispiel testen
5. programmiertes Verhalten an alternativen Beispielen testen
![Page 4: Programmiermethodik SS2007 © 2007 Albert Zündorf, University of Kassel 1 5. Test-First Prinzip Gliederung: 1. Einführung 2. Objektdiagramme zur Analyse](https://reader036.vdokument.com/reader036/viewer/2022062622/55204d6749795902118bca12/html5/thumbnails/4.jpg)
Programmiermethodik SS2007 © 2007 Albert Zündorf, University of Kassel 4
![Page 5: Programmiermethodik SS2007 © 2007 Albert Zündorf, University of Kassel 1 5. Test-First Prinzip Gliederung: 1. Einführung 2. Objektdiagramme zur Analyse](https://reader036.vdokument.com/reader036/viewer/2022062622/55204d6749795902118bca12/html5/thumbnails/5.jpg)
Programmiermethodik SS2007 © 2007 Albert Zündorf, University of Kassel 5
![Page 6: Programmiermethodik SS2007 © 2007 Albert Zündorf, University of Kassel 1 5. Test-First Prinzip Gliederung: 1. Einführung 2. Objektdiagramme zur Analyse](https://reader036.vdokument.com/reader036/viewer/2022062622/55204d6749795902118bca12/html5/thumbnails/6.jpg)
Programmiermethodik SS2007 © 2007 Albert Zündorf, University of Kassel 6
Top Down / Bottom Up/ Jojo / Iterativ
Top Down: erst komplexe Methoden entwerfen dabei Hilfsmethoden erfinden dann Hilfsmethoden mit Hilfshilfsmethoden bauen usw.
Bottom Up Erst Hilfshilfsmethoden bauen dann damit Hilfsmethoden bauen dann damit die komplexen
![Page 7: Programmiermethodik SS2007 © 2007 Albert Zündorf, University of Kassel 1 5. Test-First Prinzip Gliederung: 1. Einführung 2. Objektdiagramme zur Analyse](https://reader036.vdokument.com/reader036/viewer/2022062622/55204d6749795902118bca12/html5/thumbnails/7.jpg)
Programmiermethodik SS2007 © 2007 Albert Zündorf, University of Kassel 7
Top Down / Bottom Up/ Jojo / Iterativ
Jojo ein bischen von oben ein bischen von unten
Iterativ irgendwo anfangen möglichst früh ausführbare Teile bauen möglichst früh einzelne komplexe Methoden bauen möglichst früh testen und praktisch einsetzen
![Page 8: Programmiermethodik SS2007 © 2007 Albert Zündorf, University of Kassel 1 5. Test-First Prinzip Gliederung: 1. Einführung 2. Objektdiagramme zur Analyse](https://reader036.vdokument.com/reader036/viewer/2022062622/55204d6749795902118bca12/html5/thumbnails/8.jpg)
Programmiermethodik SS2007 © 2007 Albert Zündorf, University of Kassel 8
5. Test-First Prinzip
Test First aus dem eXtreme Programming:
1. als erstes Test bauen
2. Methode realisieren bis Test läuft
3. noch ein Test zu der Methode
4. Methode verfeinern bis Test läuft
5. wenn noch ein Szenario vorstellbar gehe zu 3.
6. sonst fertig
![Page 9: Programmiermethodik SS2007 © 2007 Albert Zündorf, University of Kassel 1 5. Test-First Prinzip Gliederung: 1. Einführung 2. Objektdiagramme zur Analyse](https://reader036.vdokument.com/reader036/viewer/2022062622/55204d6749795902118bca12/html5/thumbnails/9.jpg)
Programmiermethodik SS2007 © 2007 Albert Zündorf, University of Kassel 9
5. Test-First Prinzip
Warum Test-First:
effizienteres Debuggen reproduzierbare Programmläufe schnelle Testwiederholung ohne manuelle Eingaben
Design for Test: bei nachträgliches Testen fehlen oft wichtige Zugriffe auf Interna dadurch schwerer und am Ende fehlt immer die Zeit zum Testen
Stabilität für iteratives Vorgehen fertige Funktionalität geht nicht wieder verloren Sicherheit bei Änderungen / Erweiterungen Wartungsfehler werden sofort entdeckt
![Page 10: Programmiermethodik SS2007 © 2007 Albert Zündorf, University of Kassel 1 5. Test-First Prinzip Gliederung: 1. Einführung 2. Objektdiagramme zur Analyse](https://reader036.vdokument.com/reader036/viewer/2022062622/55204d6749795902118bca12/html5/thumbnails/10.jpg)
Programmiermethodik SS2007 © 2007 Albert Zündorf, University of Kassel 10
5. Test-First Prinzip
Warum Test-First:
iteratives Vorgehen führt meist zu robuster Kernfunktionalität
frühe Kundendemo / -nutzung von Teilfunktionalität
aber
neue Funktionalität erfordert oft Änderung an alten Methoden
dadurch oft Fehler in Teilen die schon mal funktioniert haben
Gegenmaßnahme
umfangreiche, gezielte, vollautomatische Tests für die einzelnen Funktionalitäten
Effekt
hohe Sicherheit bei Änderungen
![Page 11: Programmiermethodik SS2007 © 2007 Albert Zündorf, University of Kassel 1 5. Test-First Prinzip Gliederung: 1. Einführung 2. Objektdiagramme zur Analyse](https://reader036.vdokument.com/reader036/viewer/2022062622/55204d6749795902118bca12/html5/thumbnails/11.jpg)
Programmiermethodik SS2007 © 2007 Albert Zündorf, University of Kassel 11
JUnit Tests
JUnit Rahmenwerk für flexible automatische Tests
Stand-alone GUI oder in IDE integriert
alle Tests, Testgruppen oder einzelne Tests ausführbar
Testprotokolle
Kombination mit Coverage Tool interessant (später)
![Page 12: Programmiermethodik SS2007 © 2007 Albert Zündorf, University of Kassel 1 5. Test-First Prinzip Gliederung: 1. Einführung 2. Objektdiagramme zur Analyse](https://reader036.vdokument.com/reader036/viewer/2022062622/55204d6749795902118bca12/html5/thumbnails/12.jpg)
Programmiermethodik SS2007 © 2007 Albert Zündorf, University of Kassel 12
Aufbau eines JUnit Tests für OO Programm:
1. Objektstruktur bauen
2. Zielfunktionalität / -methode aufrufen
3. Ergebnis prüfen
4. nächste Methode aufrufen
5. Ergebnis prüfen
6. usw.
![Page 13: Programmiermethodik SS2007 © 2007 Albert Zündorf, University of Kassel 1 5. Test-First Prinzip Gliederung: 1. Einführung 2. Objektdiagramme zur Analyse](https://reader036.vdokument.com/reader036/viewer/2022062622/55204d6749795902118bca12/html5/thumbnails/13.jpg)
Programmiermethodik SS2007 © 2007 Albert Zündorf, University of Kassel 13
Beispielabläufe mit Objektdiagrammen
![Page 14: Programmiermethodik SS2007 © 2007 Albert Zündorf, University of Kassel 1 5. Test-First Prinzip Gliederung: 1. Einführung 2. Objektdiagramme zur Analyse](https://reader036.vdokument.com/reader036/viewer/2022062622/55204d6749795902118bca12/html5/thumbnails/14.jpg)
Programmiermethodik SS2007 © 2007 Albert Zündorf, University of Kassel 14
Grafische Tests mit Fujaba Story Boards
Story Board Notation:
Folge von Activities
Start Activity erzeugt Objekte
Methodenaufrufe
«system step» Kommentare
«actor step» vergleicht Ist/Soll stößt neue Schritte an
Code Generierung:
JUnit Test
Startobjekte erzeugen
Startobjekte merken
Aufrufe
Situation vergleichen
![Page 15: Programmiermethodik SS2007 © 2007 Albert Zündorf, University of Kassel 1 5. Test-First Prinzip Gliederung: 1. Einführung 2. Objektdiagramme zur Analyse](https://reader036.vdokument.com/reader036/viewer/2022062622/55204d6749795902118bca12/html5/thumbnails/15.jpg)
Programmiermethodik SS2007 © 2007 Albert Zündorf, University of Kassel 15
Grafische Tests mit Fujaba Story Boards
class Scencario1Test {
public Person prinz;public Raum r;public Tuer t1; …
@Testpublic void scenario1 () {prinz = new Person ();r = new Raum ();prinz.setIn (r);t1 = new Tuer ();r.tueren.add (t1);…
prinz.sammle…();
assertEquals (prinz.getIn (), r);assertTrue(r.tueren.contains(t1));
invent = prinz.hat;
assertTrue(invent.enthaelt.contains(g1));…