Testen und Debugging

Ähnliche Dokumente
Vom Testkonzept zu JUnit

Testen von Android- Anwendungen. 6. Juni 2013

Systematisches Testen

Qualitätssicherung von Software

Programmieren in Haskell Debugging

Software Engineering II (IB) Testen von Software / Modultests

Testgetriebene Entwicklung

Korrektheit und Hoare-Kalkül für Imperative Programme

JUnit. Software-Tests

Unit Testing mit JUnit. Dr. Andreas Schroeder

III.1 Prinzipien der funktionalen Programmierung - 1 -

Einstieg in die Informatik mit Java

Gliederung. n Teil I: Einleitung und Grundbegriffe. n Teil II: Imperative und objektorientierte Programmierung

Programmiertechnik II

Technische Informatik für Ingenieure WS 2010/2011 Übungsblatt Nr. 3

Systematisches Testen der Funktionalität von Softwaresystemen. 17. Juni 2015

Organisatorisches. Folien (u.a.) auf der Lva-Homepage Skriptum über MU Online

Software Entwicklung 1. Spezifikation von Prozedureigenschaften. Spezifikation prozeduraler Programme. Warum Spezifikationen?

Programmieren I. Kapitel 5. Kontrollfluss

1. Typen 1.1 Typsicherheit 1.2 Typprüfung

Informatik II - Übung 01

STACK Mathematische Aufgaben mit ILIAS testen (Ein Frage-Typ im ILIAS-Objekt Test)

Effizientes Programmieren

Technische Informatik für Ingenieure WS 2010/2011 Musterlösung Übungsblatt Nr. 3

GraphWalker. ein Graphenbasiertes Testgenerierungstool ältester Commit: (Olsson), aktuellster Commit: (Olsson) ca 23:00

Programmierwerkstatt. Objektorientierung und Korrektheit von Programmen

Abschnitt 11: Korrektheit von imperativen Programmen

Java Anweisungen und Ablaufsteuerung

Ausnahmebehandlung. Ausnahmen werfen (auslösen) Eigene Ausnahmen definieren. Ausnahmen abfangen. Ausnahmen definieren

4.4 Imperative Algorithmen Verzweigung und Iteration

zu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme

Organisatorisches. Folien (u.a.) gibt's auf der Lva-Homepage zum Download

Einstieg in die Informatik mit Java

Java Ablaufsteuerung (Beispiele)

Programmiermethodik. Übung 3

5.3 Korrektheit und Verifikation

Informatik II Übung 1

Tag 3 Repetitorium Informatik (Java)

n 1. Der Begriff Informatik n 2. Syntax und Semantik von Programmiersprachen - 1 -

Programm heute. Algorithmen und Datenstrukturen (für ET/IT) Fehlerarten. Validation. Wintersemester 2012/13. Dr. Tobias Lasser

Ein-Ausgabefunktionen in C (letzter Abschnitt Vorlesungsstoff ab C.110)

zu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme

2 Eine einfache Programmiersprache

Verbesserung des Entwicklungsprozesses durch testgetriebene Entwicklung und kontinuierliche Integration

Programmieren in Python

Stratego/XT und ASF+SDF Meta-Environment. Paul Weder Seminar Transformationen Datum:

Testen mit JUnit. Martin Wirsing. Ziele. Arten von Tests. Testen. Whitebox-Test. Unit-Test

Testen mit JUnit. Martin Wirsing. Ziele. Arten von Tests. Testen. Lernen Unit Tests zu schreiben Lernen mit Unit-Testen mit JUnit durchzuführen

Kapitel 5 Zustand eines Objekts

Grundlagen der OO- Programmierung in C#

Fragen Arthur Zaczek. Dez 2015

Aufgabenblatt 4 IT-Security Angewandte Informatik WS 2016/17

Methoden. Gerd Bohlender. Einstieg in die Informatik mit Java, Vorlesung vom

Verifizierende Testverfahren

3. Dokumentieren und Testen Advanced Programming Techniques Prof. Dr. Bernhard Humm FB Informatik, Hochschule Darmstadt

Javakurs für Anfänger

Testgetriebene Entwicklung mit JUnit4

Programmverstehen 3: Detailliertes Verständnis. Dr. Thorsten Arendt Marburg, 10. Dezember 2015

Die Schnittstelle Comparable

Kontrollfluss. man Verzweigungen und Sprünge. o bisher linear (von oben nach unten) o Für interessante Programme braucht

Kontrollstrukturen und Logik

Ersetzbarkeit und Verhalten

5.3 Korrektheit und Verifikation

Vorlesung Programmieren

OOSE 01 JAVA MIT BLUEJ UND UML-BY-EXAMPLE

2 Eine einfache Programmiersprache. Variablen. Operationen Zuweisung. Variablen

2 Eine einfache Programmiersprache

Programmiersprache. Emily & rica

Aufgaben Objektentwurf

Übungsblatt 1. Java Vorkurs (WS 2017)

Testen mit JUnit. Martin Wirsing. Ziele. Testen. Arten von Tests. Lernen Unit Tests zu schreiben Lernen mit Unit-Testen mit JUnit durchzuführen

Warum Programme Verträge schließen sollten

Grundlagen der Informatik Vorlesungsskript

Vor- und Nachbedingungen in imperativen Programmen OOPM, Ralf Lämmel

Arrays. Arrays werden verwendet, wenn viele Variablen benötigt werden. Der Vorteil in Arrays liegt darin, dass man nur eine Variable deklarieren muss

Beispiel 1 zur Verifikation eines bedingten Anweisung. Hoare-Regel für die bedingte Anweisung. else

Einführung in die Informatik I

Kontrollstrukturen -- Schleifen und Wiederholungen

Beispiel 1 zur Verifikation eines bedingten Anweisung. Hoare-Regel für die bedingte Anweisung. Beispiel 2 zur Verifikation eines bedingten Anweisung

Objektorientierte Programmierung

Kapitel 6.2 Testwerkzeuge

Informatik II Übung 1

Objektorientierte Programmierung. Kapitel 22: Aufzählungstypen (Enumeration Types)

Micro Focus Unit Testing Framework in Visual COBOL 3.0. Rolf Becking 29.August 2017

Testen mit Use Cases. Chris Rupp Dr. Stefan Queins

Re-Engineering: Test-First-Ansatz. Dr. Thorsten Arendt Marburg, 17. Dezember 2015

1. Einführung 1.1. Definitionen

11. Rekursion. 1, falls n 1. n (n 1)!, andernfalls. Mathematische Rekursion. Rekursion in Java: Genauso! Unendliche Rekursion. n!

Nachklausur: Grundlagen der Informatik I, am 02. April 2008 Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.

Nachklausur: Grundlagen der Informatik I, am 02. April 2008 Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.

Einführung in die Programmierung

Enterprise JavaBeans Überblick

Einführung in die Programmierung für NF. Übung

Programmierprojekt: So0ware Tests. Anne6e Bieniusa Sommersemester 2017

Testen von SOA-Anwendungen mit dem BPEL Testframework

Transkript:

Testen und Debugging Testklassen, Unit Tests Blackbox Test, Whitebox Test Regressionstesten Zusicherungen mit assert Debugger Informatik II: Objektorientierte SW-Entwicklung, Algorithmik, Nebenläufigkeit 227

Blackbox Test Blackbox Testen: Das gesamte Programm wird getestet ohne die Funktionsweise oder Implementierung zu berücksichtigen. Ein Unit Test überprüft die Funktionsweise einer oder mehrerer zusammenhängender Methoden. Ein Blackbox Test steht typischerweise am Ende einer Entwicklung vor der Auslieferung an den Kunden. Blackbox Tests sollten gerade auch unerwartete Eingaben und Randfälle berücksichtigen. Vorteil des Blackbox Tests: er zeigt, ob das Programm wirklich als ganzes funktioniert. Nachteile des Blackbox Tests: Teile des Programms könnten von den Testeingaben überhaut nicht oder nur in einfachen Fällen berührt werden. Man kann Blackbox Tests erst durchführen, wenn die Anwendung ganz fertig ist. Informatik II: Objektorientierte SW-Entwicklung, Algorithmik, Nebenläufigkeit 228

Whitebox Test Ein Whitebox Test (auch Glassbox Test) berücksichtigt die Programmstruktur. Insbesondere können beim Whitebox Test einzelne Methoden getestet werden noch bevor ihr Anwendungskontext fertig ist. Die Testfälle sollten den gewünschten Anwendungsbereich überstreichen und möglichst jeden Zweig des Methodenrumpfes tatsächlich erreichen. Es gibt automatisierte Methoden zur Erzeugung solcher Testbeispiele. Informatik II: Objektorientierte SW-Entwicklung, Algorithmik, Nebenläufigkeit 229

Unit Test Ein Test einer einzelnen Methode oder von eng kooperierenden Methoden heißt Unit Test. Der Unit Test ist die wichtigste Testform und sollte für jede nichttriviale Methode durchgeführt werden. Es wird empfohlen Unit Tests vor der Implementierung (aber nach der Spezifikation) einer Methode zu entwerfen. Um Unit Tests effizient und reproduzierbar durchzuführen bieten sich Unterstützungen wie JUnit (www.junit.org) an. Informatik II: Objektorientierte SW-Entwicklung, Algorithmik, Nebenläufigkeit 230

Test Harness und Test Suite Um eine Methode oder eine Klasse zu testen (im Unit Test) muss ein geeigneter Kontext aus Objekten bereitgestellt werden und ein Hauptprogramm geschrieben werden, das die zu testende Methode in diesem Kontext aufruft und das Ergebnis auswertet. Solch ein Programm heißt test harness (harness=geschirr (für Pferde, etc.)). Der Aufrufkontext wird auch als fixture (= Vorrichtung) bezeichnet. Oft werden mehrere Tests in einer test suite zusammengefasst, die mit einem einzigen Befehl ausgeführt werden kann. Informatik II: Objektorientierte SW-Entwicklung, Algorithmik, Nebenläufigkeit 231

Regressionstesten Es bietet sich an, dieselben Tests nach jeder Programmänderung immer wieder durchzuführen, damit nicht früher behobene Fehler wieder eingeführt werden. Tritt ein früher behobener Fehler erneut auf, so spricht man von cycling. Das wiederholte Durchführen von Tests heißt Regressionstesten. (regredi=zurückkehren). Dies wird durch systematische Verwaltung in Test Suites und automatisches Ablaufen der Tests erleichtert. Basieren die Tests auf manuell eingefügten Kontrollausgaben, die man nach Beheben von Fehlern entfernt, so wird man sich kaum die Mühe eines Regressionstests machen. Informatik II: Objektorientierte SW-Entwicklung, Algorithmik, Nebenläufigkeit 232

Orakel Um die Korrektheit von Testergebnissen zu bestätigen muss manchmal das erwartete Ergebnis mit einer anderen (ineffizienten) Methode berechnet werden. Diese wird dann als Orakel bezeichnet. Beispiel: Testen einer Methode zum schnellen Potenzieren mithilfe einer Methode, die die übliche Definition verwendet. Es kann auch sein, dass man das Testergebnis nicht gut mithilfe eines Orakels berechnen kann, wohl aber dessen Korrektheit bestätigen. Beispiel: Zu testen sei Methode m zur Matrizenmultiplikation. Man wähle Matrizen A, B und Testvektor v und prüfe, ob m(a, B)v = A(Bv). Informatik II: Objektorientierte SW-Entwicklung, Algorithmik, Nebenläufigkeit 233

Zusicherungen Seit Java 1.4 gibt es das Zusicherungsstatement. Es hat die Form assert e wobei e ein Ausdruck vom Typ bool ist. Man muss bei seiner Verwendung mit der Option -source 1.4 kompilieren. Führt man das Programm mit der Option -enableassertions aus, so wird bei jedem Zusicherungsstatement der Ausdruck e ausgewertet. Hat er den Wert true, so wird das Programm ohne Beinträchtigung fortgesetzt. Hat er den Wert false so wird das Programm abgebrochen. Führt man das Programm ohne die Option -enableassertions aus, so werden alle Zusicherungsstatements übersprungen (daher kein Effizienzverlust). Zusicherungsstatements bieten sich zur Überprüfung von Vor- und Nachbedingungen an; sie können sorgfältige Tests nicht ersetzen. Informatik II: Objektorientierte SW-Entwicklung, Algorithmik, Nebenläufigkeit 234

Debugger Ein Debugger erlaubt das schrittweise Abarbeiten von Programmen und die Inspektion von Variablen zu bestimmten Zeitpunkten. Debugger unterstützen die folgenden Operationen. Breakpoint setzen: Ein Breakpoint ist ein Programmpunkt an dem die Programmabarbeitung angehalten wird. Stepping: Hat die Abarbeitung einmal einen Breakpoint erreicht, so kann mit Step-Befehlen von Befehl zu Befehl weiterschreiten und dabei Methodenaufrufe überspringen (step over) oder in deren Rumpf hineinspringen (step into). Inspektion: Beim Erreichen eines Breakpoints lassen sich die Werte aller lebendigen Variablen inspizieren. Fortsetzung: Man kann die Programmabarbeitung bis zum nächsten Breakpoint ohne Unterbrechung fortsetzen. Manche Debugger erlauben auch das Umsetzen von Variablenwerten. Informatik II: Objektorientierte SW-Entwicklung, Algorithmik, Nebenläufigkeit 235

Zusammenfassung Blackbox Test: Test der Funktionalität eines ganzen Programms ohne Kenntnis der Implementierung. Whitebox Test: Test unter Berücksichtung der Implementierung Unit Test: Test einer Methode Test harness, fixture: Programm zum Aufbau eines Aufrufkontext für eine Methode zu Testzwecken und Interpretation des Ergebnisses. Test suite: Zusammenfassung mehrerer Tests. Können gemeinsam ausgeführt werden. Regressionstesten: Erneutes Durchführen aller früheren Tests nach Programmänderungen. Orakel: Methode zur Berechnung erwarteter Testergebnisse. Debugger: Programm zur schrittweisen Abarbeitung von Code und Inspektion des Programmzustands. Informatik II: Objektorientierte SW-Entwicklung, Algorithmik, Nebenläufigkeit 236