Testen von Softwaresystemen

Dr. Christoph Steindl, Leiter der Anwendungsentwicklung bei der IBM in Linz

Termine

Datum: Uhrzeit: Einheiten: Raum:
Samstag, 23.10.2004 8:30-16:15 Uhr 8 Einheiten
HF 9901
Samstag, 6.11.2004 8:30-16:15 Uhr 8 Einheiten HF 9901
Samstag, 20.11.2004 8:30-16:15 Uhr 8 Einheiten HF 9901
Freitag, 26.11.2004 8:30-09:15 Uhr (Klausur) HS 1

Termin für die Nachklausur: sh. unter News

Zuerst ein Witz

Man erzählt einem Mathematiker, einem Physiker und einem Techniker: "Alle ungeraden Zahlen sind Primzahlen."
Der Mathematiker sagt: "Das ist Blödsinn. 9 ist ungerade und trotzdem keine Primzahl."
Der Physiker sagt: "Schauen wir einmal: Drei ist eine Primzahl, 5 ist eine, 7 ist eine - das dürfte also wahr sein."
Der Techniker sagt: "Schauen wir einmal: Drei ist eine Primzahl, 5 ist eine, 7 ist eine, 9 ist eine, 11 ist eine..."

Beim Testen ist es genauso: Der Tester bekommt eine falsche Aussage ("Das Programm funktioniert.") und muss aus den unendlich vielen Möglichkeiten diejenige Eingabe auswählen, die die Aussage widerlegt.
Der Tester muss dabei den Fehler des Physikers (nicht die richtigen Werte auszuprobieren) vermeiden und den des Technikers (den richtigen Wert auszuprobieren, aber den Widerspruch nicht zu erkennen). Der Tester möchte am liebsten - wie der Mathematiker - ohne unnötigen Testaufwand das richtige Beispiel finden, das die Aussage widerlegt.

Wie man das macht, lernen Sie in dieser Lehrveranstaltung.

Zielsetzung der Lehrveranstaltung

In Anwendungsentwicklungsprojekten kann man vieles falsch oder richtig machen.
Erfolgreiche Teams und Experten geben die folgenden Tipps (von einfach bis schwer):
1. Verwende ein "Source Code Control System" (z.B. CVS).
2. Führe Reviews durch, bevor du Code eincheckst (z.B. durch Pair Programming oder Code Reviews).
3. Checke zumindest täglich ein (auch wenn das zu Problemen beim "Build" führt).
4. Führe tägliche "Builds" durch.
5. Mache Unit-Tests
6. Automatisiere die Ausführung der Unit-Tests (z.B. mit Junit)
7. Lasse dich bei der Entwicklung durch automatisierte Unit-Tests treiben (d.h. Test-Driven Development)
8. Führe "Builds" kontinuierlich durch (nach jedem Check-In, mit Ausführung der Unit-Tests, z.B. mit CruiseControl)
9. Lasse dich bei der Entwicklung durch automatisierte Akzeptanztests treiben (d.h. nach jedem Check-In auch Ausführung der Akzeptanztests; z.B. mit FIT und FitNesse)
10. Refaktoriere das System

Alle diese Tipps werden in der Lehrveranstaltung angesprochen, viele davon (2, 4-9) explizit und ausführlich behandelt, es wird aus Projekterfahrung heraus motiviert, warum die einzelnen Punkte wichtig sind, was sich theoretisch dahinter versteckt und wie man es praktisch macht (auch mit aktuellen Werkzeugen).

Aufbau der Lehrveranstaltung

Diese Lehrveranstaltung wird sehr praxisbezogen ablaufen. Der Hauptfokus liegt auf "Test-Driven Development".
Neben Herrn Dr. Steindl (IBM Österreich) werden auch noch zwei weitere praxisorientierte Gastvortragende (Rudolf Ramler vom SCCH und Christian Federspiel von der VAI) Vorträge halten. Die Vortragenden erläutern die Theorie anschaulich anhand von praktischen Beispielen, geben Tipps & Tricks und zeigen Werkzeuge.
Zwischen den einzelnen Block-Terminen werden Übungen aufgegeben (mit dem Ziel, die vorgestellten Werkzeuge/Frameworks installieren und bedienen zu können), die von den Teilnehmern durchzuspielen sind. Weiters sind am letzten Tag der Lehrveranstaltung von den Teilnehmern 15-minütige Gruppen-Vorträge über Rezepte fürs Komponententesten abzuhalten (die Literatur dazu wird in der Lehrveranstaltung ausgegeben und beträgt pro Gruppe 50-100 leicht zu lesende Seiten aus dem Buch "Junit Recipes" von J.B. Rainsberger). 

Im Theorie-Teil werden folgende Themen behandelt:

• Grundlagen
• Test-Driven Development für den Komponententest
• Statische Testmethoden
• Dynamische Testmethoden für White-Box- und Black-Box-Testen
• Test-Driven Development für den Akzeptanztest
• Testplanung- und Management (Rudolf Ramler)
• Systemtest (Rudolf Ramler)
• Testen in der Praxis (Christian Federspiel)
• Continuous Integration
• Testen paralleler Programme

Folgende Werkzeuge/Frameworks werden vorgestellt und (größtenteils) in den Übungen auch verwendet (in alphabetischer Reihenfolge): Ant, Clover, ConTest, CruiseControl, CVS, Eclipse, FIT, FitNesse, Jcoverage, Jmeter, Jmetric, Jtest, Junit, Maven Eine Fülle weiterer Werkzeuge/Frameworks wird angesprochen (speziell auch für .NET)

Unterlagen

Vorträge:

Vorträge.zip

Demos während der LVA:

Triangle - the Test-Driven Way.zip
Triangle - with FitNesse.zip
Triangle - with Continuous Integration.zip
Bank Accounts - with ConTest.zip

Studentenvorträge und -arbeiten:

Studentenvorträge.zip
Studentenarbeiten.zip

Hausübung:

Homework Assignment Day 1.txt
CreateExampleAcceptanceTest.pdf
Homework Assignment Day 2.txt
Homework Assignment Day 2b.txt

Prüfung

Die Note setzt sich aus den durchgespielten Übungen, den Gruppenvorträgen (bzw. -arbeiten) und einer 45-minütigen Klausur über den theoretischen Teil zusammen.