Post on 13-Sep-2019
transcript
Vom Testkonzept zu JUnit
Testen und Testkonzept
Dipl.-Inf. (FH) Christopher Olbertz
2. Dezember 2014
Vom Testkonzept zu JUnit
Testen und Testkonzept
Warum testen?
Wichtig, obwohl bei Programmierern unbeliebt
Stellt weitgehend korrekte Funktionsweise eines Programmssicher
Verhindert teure Nachbesserungen
Am besten nach jedem Übersetzen das gesamte Programmtesten
Frage?
Wer hat sich schon alles über Programmfehler oderProgrammabstürze geärgert?
Vom Testkonzept zu JUnit
Testen und Testkonzept
Warum testen?
Wichtig, obwohl bei Programmierern unbeliebt
Stellt weitgehend korrekte Funktionsweise eines Programmssicher
Verhindert teure Nachbesserungen
Am besten nach jedem Übersetzen das gesamte Programmtesten
Frage?
Wer hat sich schon alles über Programmfehler oderProgrammabstürze geärgert?
Vom Testkonzept zu JUnit
Testen und Testkonzept
Ausreden
Ich habe keine Zeit!
Testen ist stupide und langweilig!
Mein Code ist praktisch fehlerfrei!
Mein Code ist gut genug!
Aber
Fehler sind nun einmal menschlich und lassen sich beimProgrammieren nicht vermeiden!
Vom Testkonzept zu JUnit
Testen und Testkonzept
Ausreden
Ich habe keine Zeit!
Testen ist stupide und langweilig!
Mein Code ist praktisch fehlerfrei!
Mein Code ist gut genug!
Aber
Fehler sind nun einmal menschlich und lassen sich beimProgrammieren nicht vermeiden!
Vom Testkonzept zu JUnit
Testen und Testkonzept
Testkonzept
Hilfsmittel zum strukturierten Testen
Checkliste zum Testen
Gedächtnisstütze, damit keine Testfälle vergessen werden
Hilfsmittel, damit immer mit denselben Testfällen getestet wird
Erzeugung von wiederholbaren Tests
Testkonzept wird nicht nach Fertigstellung des Programmsgeschrieben, sondern begleitet den Entwicklungsprozess
Vom Testkonzept zu JUnit
Testen und Testkonzept
Testkonzept
Vom Testkonzept zu JUnit
Testen und Testkonzept
Wichtige Daten eines Testkonzepts
Beschreibung des Testfalls
Konkrete Testdaten
Welches Ergebnis wird erwartet?
Welches Ergebnis hat man tatsächlich erhalten?
JUnit
JUnit kann ein Testkonzept erweitern oder sogar ersetzen!
Vom Testkonzept zu JUnit
Testen und Testkonzept
Wichtige Daten eines Testkonzepts
Beschreibung des Testfalls
Konkrete Testdaten
Welches Ergebnis wird erwartet?
Welches Ergebnis hat man tatsächlich erhalten?
JUnit
JUnit kann ein Testkonzept erweitern oder sogar ersetzen!
Vom Testkonzept zu JUnit
Vom Testkonzept zu JUnit
Dipl.-Inf. (FH) Christopher Olbertz
2. Dezember 2014
Vom Testkonzept zu JUnit
Vom Testkonzept zu JUnit
JUnit
Kleines Framework zum automatischen Testen vonJava-Klassen
Testfälle sind selbstüberprüfend und damit wiederholbar
Tests werden immer mit denselben Daten durchgeführt
Tests können ganz einfach durch einen Klick gestartet werden
Es gibt zahlreiche Erweiterungs-Frameworks für JUnit (z.B.DBUnit)
Ähnliche Frameworks existieren für andere Sprachen
Vom Testkonzept zu JUnit
Vom Testkonzept zu JUnit
Vorgehensweise
1 Klassen und Methoden festlegen (z.B. UML)2 Klassen und Methoden so weit anlegen, dass Übersetzen
möglich ist (ohne Logik)3 API-Dokumentation schreiben4 Wenn sich die Klasse nicht �richtig anfühlt�, wird sie ab Schritt
1 noch mal geändert5 Eine Testklasse implementieren6 Logik der Methoden implementieren7 Wenn sich durch die Implementierung neuer zu testender Code
ergeben hat, werden die Testfälle erweitert8 Tests durchführen und Fehler beheben
Vom Testkonzept zu JUnit
Vom Testkonzept zu JUnit
Prototypen und API-Dokumentation
Vom Testkonzept zu JUnit
Vom Testkonzept zu JUnit
Testfall 1
Testfallbeschreibung: Berechnung der ISBN-Prüfzi�er
Testdaten: 386680192
Erwartetes Ergebnis: 0
Vom Testkonzept zu JUnit
Vom Testkonzept zu JUnit
Testfall 1
Testfallbeschreibung: Berechnung der ISBN-Prüfzi�er
Testdaten: 386680192
Erwartetes Ergebnis: 0
Vom Testkonzept zu JUnit
Vom Testkonzept zu JUnit
Testfall 2
Testfallbeschreibung: Berechnung der ISBN-Prüfzi�er
Testdaten: 383622862
Erwartetes Ergebnis: 9
Vom Testkonzept zu JUnit
Vom Testkonzept zu JUnit
Testfall 2
Testfallbeschreibung: Berechnung der ISBN-Prüfzi�er
Testdaten: 383622862
Erwartetes Ergebnis: 9
Vom Testkonzept zu JUnit
Vom Testkonzept zu JUnit
Testfall 3
Testfallbeschreibung: Berechnung der ISBN-Prüfzi�er
Testdaten: 345343577
Erwartetes Ergebnis: X
Vom Testkonzept zu JUnit
Vom Testkonzept zu JUnit
Testfall 3
Testfallbeschreibung: Berechnung der ISBN-Prüfzi�er
Testdaten: 345343577
Erwartetes Ergebnis: X
Vom Testkonzept zu JUnit
Vom Testkonzept zu JUnit
Was fehlt noch?
Was wir getestet haben
Die Fälle, dass die Methoden richtig durchlaufen wurden getestet
Was wir nicht getestet haben
Die Fälle, dass die Methoden falsche Eingaben erhalten, wurdennoch nicht getestet
Was erwarten wir?
Wir erwarten, dass bestimmte Exceptions geworfen werden.
Vom Testkonzept zu JUnit
Vom Testkonzept zu JUnit
Was fehlt noch?
Was wir getestet haben
Die Fälle, dass die Methoden richtig durchlaufen wurden getestet
Was wir nicht getestet haben
Die Fälle, dass die Methoden falsche Eingaben erhalten, wurdennoch nicht getestet
Was erwarten wir?
Wir erwarten, dass bestimmte Exceptions geworfen werden.
Vom Testkonzept zu JUnit
Vom Testkonzept zu JUnit
Was fehlt noch?
Was wir getestet haben
Die Fälle, dass die Methoden richtig durchlaufen wurden getestet
Was wir nicht getestet haben
Die Fälle, dass die Methoden falsche Eingaben erhalten, wurdennoch nicht getestet
Was erwarten wir?
Wir erwarten, dass bestimmte Exceptions geworfen werden.
Vom Testkonzept zu JUnit
Vom Testkonzept zu JUnit
Testfall 4
Testfallbeschreibung: Eingabe einer zu kurzen ISBN
Testdaten: 34534
Erwartetes Ergebnis: IllegalArgumentException
Vom Testkonzept zu JUnit
Vom Testkonzept zu JUnit
Testfall 4
Testfallbeschreibung: Eingabe einer zu kurzen ISBN
Testdaten: 34534
Erwartetes Ergebnis: IllegalArgumentException
Vom Testkonzept zu JUnit
Vom Testkonzept zu JUnit
Testfall 5
Testfallbeschreibung: Eingabe einer zu langen ISBN
Testdaten: 345347451211
Erwartetes Ergebnis: IllegalArgumentException
Vom Testkonzept zu JUnit
Vom Testkonzept zu JUnit
Testfall 5
Testfallbeschreibung: Eingabe einer zu langen ISBN
Testdaten: 345347451211
Erwartetes Ergebnis: IllegalArgumentException
Vom Testkonzept zu JUnit
Vom Testkonzept zu JUnit
Testen der Berechnung der Teilersumme
Testfallbeschreibung: Eingabe einer Zahl, von der dieTeilersumme berechnet werden kann
Testdaten: 6
Erwartetes Ergebnis: 12
Vom Testkonzept zu JUnit
Vom Testkonzept zu JUnit
Testen der Berechnung der Teilersumme
Testfallbeschreibung: Eingabe einer Zahl, von der dieTeilersumme berechnet werden kann
Testdaten: 6
Erwartetes Ergebnis: 12
Vom Testkonzept zu JUnit
Vom Testkonzept zu JUnit
Testen der Berechnung der Teilersumme
Testfallbeschreibung: Eingabe einer Zahl, von der dieTeilersumme berechnet werden kann
Testdaten: 25
Erwartetes Ergebnis: 31
Vom Testkonzept zu JUnit
Vom Testkonzept zu JUnit
Testen der Berechnung der Teilersumme
Testfallbeschreibung: Eingabe einer Zahl, von der dieTeilersumme berechnet werden kann
Testdaten: 25
Erwartetes Ergebnis: 31
Vom Testkonzept zu JUnit
Vom Testkonzept zu JUnit
Testen der Berechnung der Teilersumme
Testfallbeschreibung: Eingabe einer Zahl kleiner oder gleich 0
Testdaten: -1
Erwartetes Ergebnis: IllegalArgumentException
Vom Testkonzept zu JUnit
Vom Testkonzept zu JUnit
Testen der Berechnung der Teilersumme
Testfallbeschreibung: Eingabe einer Zahl kleiner oder gleich 0
Testdaten: -1
Erwartetes Ergebnis: IllegalArgumentException
Vom Testkonzept zu JUnit
Vom Testkonzept zu JUnit
Ausführen der Tests
Vom Testkonzept zu JUnit
Vom Testkonzept zu JUnit
Ausführen der Tests - einige korrekte Tests
Vom Testkonzept zu JUnit
Vom Testkonzept zu JUnit
Ausführen der Tests - alle Tests korrekt
Vom Testkonzept zu JUnit
JUnit in BlueJ
Dipl.-Inf. (FH) Christopher Olbertz
2. Dezember 2014
Vom Testkonzept zu JUnit
JUnit in BlueJ
Testwerkzeuge wurden richtig aktiviert
Vom Testkonzept zu JUnit
JUnit in BlueJ
Erzeugen einer Testklasse
Vom Testkonzept zu JUnit
JUnit in BlueJ
Vorgehensweise beim Erzeugen eines Testfalls
1 Testmethode erzeugen (Rechtsklick auf Testklasse)2 Testmethode benennen3 Aktionen durchführen, die in den Testfall aufgenommen
werden sollen4 Aufzeichnung beenden5 Eventuell den automatisch erzeugten Code von Hand ändern
Vom Testkonzept zu JUnit
JUnit in BlueJ
Testmethode erzeugen
Vom Testkonzept zu JUnit
JUnit in BlueJ
Testmethode benennen
Testmethoden dürfen bei JUnit 4 beliebige Namen tragen
Sie sollten allerdings idealerweise mit dem Prä�x �test� oder�teste� beginnen
Auch hier gilt: sprechende Namen
Aus dem Namen sollte erkennbar sein, was getestet wird
Vom Testkonzept zu JUnit
JUnit in BlueJ
Testfall aufzeichnen
Wie gewohnt mit BlueJ arbeiten
Alle Aktionen werden aufgezeichnet und in den Testfallaufgenommen
Pro Testmethode sollte nur ein Testfall geprüft werden
Testmethode muss mindestens einen Methodenaufrufenthalten, der einen Wert zurückgibt.
Vom Testkonzept zu JUnit
JUnit in BlueJ
Methodenergebnis auswerten
Wenn eine Methode mit Rückgabewert aufgerufen wird, wirdunten angezeigtes Fenster geö�net
Hier muss angegeben werden, welche Testwerte erwartetwerden.
Vom Testkonzept zu JUnit
JUnit in BlueJ
Beenden der Aufzeichnung
Hiermit wird der Testfall abgeschlossen
Alle weiteren Aktionen werden nicht mehr aufgezeichnet
Vom Testkonzept zu JUnit
JUnit in BlueJ
Starten und Auswerten der Tests
Vom Testkonzept zu JUnit
JUnit in BlueJ
Vorde�nieren eines Initialisierungszustands
1 Objekte erstellen wie gewohnt2 Objekte speichern3 Objektzustand wird beim Start eines Tests wiederhergestellt
Vom Testkonzept zu JUnit
JUnit in BlueJ
Objekte speichern
Vom Testkonzept zu JUnit
JUnit in BlueJ
Prüfen, ob die richtigen Exceptions geworfen werden
Erste Möglichkeit Zweite Möglichkeit
Vom Testkonzept zu JUnit
Der Debugger
Dipl.-Inf. (FH) Christopher Olbertz
2. Dezember 2014
Vom Testkonzept zu JUnit
Der Debugger
Compilezeitzeit- und Laufzeitfehler
Was ist ein Compilezeitfehler?
Fehler, die der Javacompiler �nden kann
z.B. Syntaxfehler
Es gibt Möglichkeiten, aus potentiellen LaufzeitfehlernCompilezeitzeit zu machen
Was ist ein Laufzeitfehler?
Tauchen auf, während das Programm läuft
Kann der Compiler nicht �nden
Hilfe: Debugger
Vom Testkonzept zu JUnit
Der Debugger
Compilezeitzeit- und Laufzeitfehler
Was ist ein Compilezeitfehler?
Fehler, die der Javacompiler �nden kann
z.B. Syntaxfehler
Es gibt Möglichkeiten, aus potentiellen LaufzeitfehlernCompilezeitzeit zu machen
Was ist ein Laufzeitfehler?
Tauchen auf, während das Programm läuft
Kann der Compiler nicht �nden
Hilfe: Debugger
Vom Testkonzept zu JUnit
Der Debugger
Compilezeitzeit- und Laufzeitfehler
Was ist ein Compilezeitfehler?
Fehler, die der Javacompiler �nden kann
z.B. Syntaxfehler
Es gibt Möglichkeiten, aus potentiellen LaufzeitfehlernCompilezeitzeit zu machen
Was ist ein Laufzeitfehler?
Tauchen auf, während das Programm läuft
Kann der Compiler nicht �nden
Hilfe: Debugger
Vom Testkonzept zu JUnit
Der Debugger
Was ist ein Debugger?
Software, die bei der Suche nach Laufzeitfehlern unterstützt
Ermöglicht Anhalten des Programms durch Haltepunkte
Ermöglicht schrittweise Abarbeitung des Programms
Ermöglicht Analyse des Programmzustandes
Was bringt mir das?
Aus gewonnenen Informationen kann man auf Fehler schlieÿen.
Vom Testkonzept zu JUnit
Der Debugger
Was ist ein Debugger?
Software, die bei der Suche nach Laufzeitfehlern unterstützt
Ermöglicht Anhalten des Programms durch Haltepunkte
Ermöglicht schrittweise Abarbeitung des Programms
Ermöglicht Analyse des Programmzustandes
Was bringt mir das?
Aus gewonnenen Informationen kann man auf Fehler schlieÿen.
Vom Testkonzept zu JUnit
Der Debugger
Ausgangspunkt
Vom Testkonzept zu JUnit
Der Debugger
Der fehlerhafte Test
Vom Testkonzept zu JUnit
Der Debugger
Wer sieht den Fehler auf Anhieb?
Vom Testkonzept zu JUnit
Der Debugger
Wir setzen einen Haltepunkt
Vom Testkonzept zu JUnit
Der Debugger
Das Debuggerfenster
Vom Testkonzept zu JUnit
Der Debugger
Die Schalt�ächen
Step: Springt eine Anweisung weiter, überspringt dabeiMethoden
Step into: Springt eine Anweisung weiter und springt inMethoden
Continue: Programm läuft normal weiter
Terminate: Programm wird abgebrochen
Vom Testkonzept zu JUnit
Der Debugger
Einige Fragen
Kann man sicherstellen, dass ein Programm richtig ist?
Man kann die vollständige Korrektheit eines Programms nichtbeweisen
Man kann beweisen, dass ein Programm fehlerhaft ist
Man �ndet immer Fälle, die Fehler verursachen
Vom Testkonzept zu JUnit
Der Debugger
Einige Fragen
Kann man sicherstellen, dass ein Programm richtig ist?
Man kann die vollständige Korrektheit eines Programms nichtbeweisen
Man kann beweisen, dass ein Programm fehlerhaft ist
Man �ndet immer Fälle, die Fehler verursachen
Vom Testkonzept zu JUnit
Der Debugger
Einige Fragen
Wie kann ich heraus�nden, wo ein Fehler verursacht wird?
Es gibt keine einfache Antwort auf diese Frage
Haltepunkt setzen und eine fehlerhafte Ausführung starten
Untersuchen wie jede Anweisung die relevanten Variablenverändert
Heraus�nden, welche Anweisung die fehlerhafte Veränderungverursacht
Fehler vor dem Debuggen so weit wie möglich eingrenzen (z.B.auf eine Methode)
Vom Testkonzept zu JUnit
Der Debugger
Einige Fragen
Wie kann ich heraus�nden, wo ein Fehler verursacht wird?
Es gibt keine einfache Antwort auf diese Frage
Haltepunkt setzen und eine fehlerhafte Ausführung starten
Untersuchen wie jede Anweisung die relevanten Variablenverändert
Heraus�nden, welche Anweisung die fehlerhafte Veränderungverursacht
Fehler vor dem Debuggen so weit wie möglich eingrenzen (z.B.auf eine Methode)
Vom Testkonzept zu JUnit
Der Debugger
Einige Fragen
Habe ich Ihnen Debuggen beigebracht?
Ich habe Ihnen beigebracht, wie Sie mit dem Debuggerarbeiten
Ich kann Ihnen nicht beibringen, wie Sie Ihr Programmdebuggen müssen, denn jedes Programm ist anders
Sie müssen die Vorgehensweise verstehen und auf andereFehler übertragen
Gutes Debuggen ist Erfahrungs- und Übungssache
Vom Testkonzept zu JUnit
Der Debugger
Einige Fragen
Habe ich Ihnen Debuggen beigebracht?
Ich habe Ihnen beigebracht, wie Sie mit dem Debuggerarbeiten
Ich kann Ihnen nicht beibringen, wie Sie Ihr Programmdebuggen müssen, denn jedes Programm ist anders
Sie müssen die Vorgehensweise verstehen und auf andereFehler übertragen
Gutes Debuggen ist Erfahrungs- und Übungssache