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

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

Testgetriebene Entwicklung mit JUnit4

Softwaretests mit Junit

Mock-Objekte. Universität Karlsruhe (TH) Fakultät für Informatik Lehrstuhl für Programmiersysteme. Forschungsuniversität gegründet 1825

Aufgaben Objektentwurf

Testgetriebene Entwicklung

Unit Tests in der Testgetriebenen Entwicklung

Programmiertechnik II

Programmierprojekt: So0ware Tests. Anne6e Bieniusa Sommersemester 2017

Verbesserung des Entwicklungsprozesses durch testgetriebene Entwicklung und kontinuierliche Integration

Wiederholung Sortiert nach Lebenszyklusphase Sortiert nach Testziel Sortiert nach der Methode, um an Testfälle zu kommen

JUnit. Software-Tests

Web-Testen mit JUnit und HttpUnit. Kai Schmitz-Hofbauer Lehrstuhl für Software-Technik Ruhr-Universität Bochum

Wiederholung. Testen. Tests nach Methode zum Ableiten der Testfälle White Box Test Black Box Test

Qualität von Software - Prof. Schlingloff, Lackner - SS2013 DYNAMISCHER TEST. Whitebox Testen mit JUnit

Übungsblatt Programmierung und Software-Entwicklung Generizität, Interfaces, Listen, Sortieralgorithmen & JUnit

Thema: Testen von objektorientierter Software

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

1. Einführung 1.1. Definitionen

Continuous Integration mit VSTS Dieter Rüetschi

Property Based Testing

5. Dokumentieren und Testen Advanced Programming Techniques. Wintersemester 2009 / 2010 Prof. Dr. Bernhard Humm Hochschule Darmstadt, FB Informatik

Testen von Android- Anwendungen. 6. Juni 2013

1 Programmierfehler und ihre Behebung

Unit Testing mit JUnit. Dr. Andreas Schroeder

Enterprise JavaBeans Überblick

JUnit - Test Driven Development. Bernhard Frey, Thorsten Stratmann, Jackson Takam, Michel Müller 1

Testen von graphischen Benutzeroberflächen. 24. Juni 2015

Software-Refactoring. 29. Mai 2013

Testen von graphischen Benutzeroberflächen. 26. Juni 2013

Vom Testkonzept zu JUnit

Systematisches Testen

Softwarequalitätsmanagement. 24. April 2013

Test-Driven Design: Ein einfaches Beispiel

Testen. SEPR Referat: Testen - Oliver Herbst

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

Refactoring von Legacy Systemen. Jochen Winzen andrena objects ag

Programmieren. JUnit-Tests. Heusch -- Ratz -- Institut für Angewandte Informatik

Städtisches Gymnasium Olpe Java Ht Informatik - Q1 Die Klasse List im Abitur Methoden und Beispielcode Hier alle wichtigen Methoden. Ein Beispielcode

Swp08-6 Verantwortliche: Yundensuren, Baigalmaa. Testkonzept

JUnit 4 Tutorial. Wolfgang Stöttinger

Testen persistenter Objekte 1

Fortgeschrittenes Programmieren mit Java. Test Driven Development

M3 M4 M7 VORNAME: Nom-Kenner VERTIEFUNG: Ausdruck des vorab bekannt gemachten Quelltextes

Unit Tests. Programmiermethodik. Eva Zangerle Universität Innsbruck

Fragen Arthur Zaczek. Dez 2015

Formale Verifikation von Software. 10. Juli 2013

11. Komponenten Grundlagen der Programmierung 1 (Java)

Testen mit JUnit. Motivation

Testen und Debugging

TDD. mit JUnit & Mockito. Tobias Trelle, codecentric

Testen von SOA-Anwendungen mit dem BPEL Testframework

Warum? Wie? Algorithm Tests Diverses. Unit Tests. Datamining und Sequenzanalyse. Kai Dührkop, Markus Fleischauer

Effiziente Überwachung von Laufzeiteigenschaften in Soft- und Hardware

Testgetriebene Entwicklung

Ü B U N G E N Z U V E R L Ä S S L I C H E E Z S A U F G A B E 5 : S O F T WA R E - E N T W U R F U N D -T E S T

Enterprise JavaBeans Überblick: 8. Test-Driven Development. 8.1 Einleitung 8.2 Beispiel 8.3 Anwendung mit Eclipse und dem JBoss Application Server

SEP 114. Design by Contract

Abschnitt 11: Korrektheit von imperativen Programmen

Modellgetriebene Entwicklung von Webanwendungen: eine erste Analyse

xii 5.3 Debugging Einplanung der Fehlersuche in Produkt und Prozess Vorbereitung und Ausführung des Debugging

Beuth Hochschule Parameter-Übergabe-Mechanismen WS17/18, S. 1

Software Engineering II (IB) Testen von Software / Modultests

Überblick. Einleitung. Unit-Tests. JUnit. HelloWorld Beispiel. Praktische Beispiele. Referenzen

hue13 January 30, 2017

UnitTest mit dem SQL-Developer Testgetriebene Entwicklung mit Oracle Werkzeugen

Refactoring C# Legacy Code

1. Zweckdes Dokuments

Unit Testing, SUnit & You

Softwareentwicklungspraktikum Sommersemester Testdokumentation

Inhaltsverzeichnis. Teil 1 Grundlagen der Objektorientierung 29

Software-Engineering Software-Management

A very very very very short intro to. Testing

SE Besprechung. Übung 6 Softwaretests

Softwaretests Testgetriebene Entwicklung (TDD) vs wissenschaftliche Methode TDD Case Study Zusammenfassung

SOA Testing. Tobias Bosch OPITZ CONSULTING GmbH München

Unit-Test Theorie und Praxis. Stephan Seefeld, INGTES AG

Software - Testung ETIS SS05

14. Java Klassen. Klassen (Java) vs. Records (Pascal) Klassen - Konzeptuell. Klassen - Technisch

JUnit a Cook s Tour. Framework in Java Automatisierter Ablauf von Testfällen Testläufe kombinieren. Unterlagen als PDF auf der Übungsseite!

Komponenten-basierte Entwicklung Teil 8: Einführung in Mocks

Literatur und Web. Komponenten WS 2014/15 Teil 8/Mocks

Programmierkurs Java

Tutoraufgabe 1 (Verifikation):

Klausur Grundlagen der Programmierung

Kernprozess zur System- und Softwareentwicklung. Logische Systemarchitektur f 1. f 2 f 3. f 4 Funktion. Technische Systemarchitektur SG 1 SG 2 SG 3

FWP Komponentenorientierte Softwareentwicklung Test-Driven-Development mit Java

Funktionales Testen. Software-Praktikum Andreas Zeller Universität des Saarlandes

Programmieren in Java

14. Java Klassen. Klassen, Typen, Objekte, Deklaration, Instanzierung, Konstruktoren, statische Felder und Methoden, Datenkapselung

7.1.5 Java RMI Remote Method Invocation ( (

Sichtbarkeiten, Klassenmember und -methoden

Softwarequalität. Gabriele Taentzer Philipps-Universität Marburg. Sommersemester 2016

Unit Tests mit Junit 4. Dario Borchers

Test-Driven Design: Ein einfaches Beispiel

Programmieren II. Innere Klassen. Heusch 10, Ratz 5.2.1, Institut für Angewandte Informatik

Informatik II. Übungsstunde 6. Distributed Systems Group, ETH Zürich

Transkript:

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

Überblick Semantische Qualität von Software Teststrategien und prinzipien Testgetriebene Softwareentwicklung Welche Arten von Tests sind möglich? Wann haben wir genug getestet? Codeüberdeckung Datenüberdeckung Was tun, wenn die Daten fehlen? Mock-Objekte benutzen Taentzer Softwarequalität 2015 182

Semantische Qualität Die semantische Qualität von Software bezieht sich auf die Erfüllung der Anforderungsspezifikation: Erfüllung der funktionalen Anforderungen: Funktionalität: Korrektheit, Vollständigkeit, Sicherheit, Fehlertoleranz Erfüllung der folgenden nichtfunktionalen Anforderungen: Effizienz: Wirtschaftlichkeit, Zeitverhalten, Verbrauchsverhalten Taentzer Softwarequalität 2015 183

Nachweismöglichkeiten für semantische Qualität Testen: exemplarische Programmausführungen, um Fehler (Defekte) zu finden Zusicherungen: Konsistenzeigenschaften, die während der Programmausführung überprüft werden Verifikation: Nachweis, dass alle Programmausführungen bestimmte Eigenschaften erfüllen Welche Vor- und Nachteile haben diese verschiedenen Nachweismöglichkeiten? Taentzer Softwarequalität 2015 184

Repräsentative Tests Wir können im Allgemeinen nicht alle möglichen Eingaben austesten. (Warum?) Deshalb wählen wir eine möglichst aussagekräftige Menge von Testfällen aus. Ein Testfall ist repräsentativ, wenn er eine neue Kombination von Eingabedatenkategorien prüft (in Blackbox- und Whitebox-Tests) oder einen neuen Pfad im Programm durchläuft (nur in Whitebox-Tests). Testziel: Alle möglichen Kombinationen von Eingabedatenkategorien und alle Pfade des Programms sind getestet. Taentzer Softwarequalität 2015 185

Identifikation von repräsentativen Testfällen (datengetrieben) Zum datengetriebenen Testen einer funktionalen Einheit (z.b. Methode) hat sich das folgende Verfahren aus [OB88] bewährt: 1. Erstelle ein Modell der Eingabedatenstrukturen: Welche Datenkategorien gibt es für die Parameter? Welche Objekte der Umgebung müssen berücksichtigt werden? 2. Zerlege den Datenraum jeder Kategorie in Wahlmöglichkeiten 3. Wie viele Kombinationen von Wahlmöglichkeiten gibt es? 4. Welche Kombinationen sind möglich? Welche Abhängigkeiten gibt es zwischen den identifizierten Wahlmöglichkeiten? 5. Für jede mögliche Kombination von Wahlmöglichkeiten werden passende Werte gewählt und ein Testfall geschrieben. Dieser enthält auch den Erwartungswert. Taentzer Softwarequalität 2015 186

Beispiel für datengetriebene Tests Taentzer Softwarequalität 2015 187 [OB88]

Beispiel für datengetriebene Tests Mögliche Testläufe: [OB88] Taentzer Softwarequalität 2015 188

Beispiel für datengetriebene Tests Kategorien und Wahlmöglichkeiten: Taentzer Softwarequalität 2015 189 [OB88]

Beispiel für datengetriebene Tests Eine Kombination von Wahlmöglichkeiten: Ist diese Kombination möglich? [OB88] Taentzer Softwarequalität 2015 190

Beispiel für datengetriebene Tests Wahlmöglichkeiten mit Abhängigkeiten: [OB88] Taentzer Softwarequalität 2015 191

Beispiel für datengetriebene Tests Wahlmöglichkeiten mit Abhängigkeiten: Taentzer Softwarequalität 2015 192 [OB88]

Beispiel für datengetriebene Tests Auszeichnung von Wahlmöglichkeiten, die Fehler produzieren: [OB88] Taentzer Softwarequalität 2015 193

Beispiel für datengetriebene Tests Auszeichnung von Wahlmöglichkeiten, die Fehler produzieren: Diese werden nicht in Kombination mit anderen geprüft. [single] identifiziert Testfälle, die auch nicht in Kombination geprüft werden müssen. Taentzer Softwarequalität 2015 194 [OB88]

Beispiel für datengetriebene Tests Ein konkreter Testfall für die angegebene Kombination: Ein Testfall pro zu prüfender Kombination Skaliert diese Testmethode? [OB88] Taentzer Softwarequalität 2015 195

Einsatz in der testgetriebenen Entwicklung Vorgehensweise: beschreibe wesentliche Testfälle schon mit den Anforderungen folge dem vorgestellten Verfahren zur Identifikation von repräsentativen Testfällen programmiere alle repräsentativen Testfälle führe die Testfälle aus: Fehler, da die Funktionalität noch fehlt implementiere die Funktionalität führe die Testfälle aus: Code solange ändern, bis alle Tests durchlaufen führe Refactorings durch Taentzer Softwarequalität 2015 196

Mock-Objekte Was tun, wenn bestimmte Ressourcen (Komponenten) noch nicht zum Testen zur Verfügung stehen? Beispiele: Datenbanken, Dateien, Server, Softwarekomponenten Was tun, wenn eine Methode schwer testbar ist, weil Eingabeparameter nur sehr umständlich, eingeschränkt oder gar nicht erstellbar sind? Beispiele: Uhrzeit, GUI, Netzwerkfehler Mock-Objekte: Attrappen, die echte Objekte simulieren Sie implementieren dieselben Schnittstellen wie die echten Objekte. Sie unterstützen den Komponententest. (Warum?) weitere Informationen: www.mockobjects.com Taentzer Softwarequalität 2015 197

Beispiel: Mock-Objekte (manuell) VerzeichnisTest Vorlesungsverzeichnis <<interface>> Course getnextparticipant() MockCourse getnextparticipant() public Person getnextparticipant() { //... Person p1 = new Person( Meier ); //... return p1; } Lecture getnextparticipant() public Person getnextparticipant() { return getmanagement(). getnextparticipant();} Taentzer Softwarequalität 2015 198

Beispiel: Mock-Objekte mit Mockito import static org.mockito.mockito.*; // @Test public void firstcoursetest(){ //arrange Course c=mock(mockcourse.class); when(c.getnextparticipant()).thenreturn( new Person( Maier )); //act String result=c.getnextparticipant(); //assert assertequals( Meier", result.tostring()); } Taentzer Softwarequalität 2015 199

Werkzeuge für das Testen mit Mock-Objekten Wie wird getestet? Unit-Testing mit Mock-Objekten Mock-Objekt erzeugen Das erwartete Verhalten aufnehmen Mock-Objekt auf Abspielen des Verhaltens schalten Was kann getestet werden? Aufruf von Methoden (auch die Anzahl und Reihenfolge) Rückgabewerte Werfen von Exceptions Verhalten zwischen mehreren Mock-Objekten Werkzeuge für Java: EasyMock: http://www.easymock.org Mockito: http://code.google.com/p/mockito Taentzer Softwarequalität 2015 200

Zusammenfassung Semantische Qualitätsprüfungen: Testen, Zusicherungen, Verifikation Testen ist eine analytische Qualitätssicherungsmaßnahme. Testen hilft, Fehler zu finden. Es kann nicht die Abwesenheit von Fehlern zeigen. Zentrale Frage: Wann haben wir genug getestet? Repräsentative Testfälle decken die möglichen Eingabewerte optimal ab und testen alle möglichen Programmabläufe (in Whitebox-Tests). Mock-Objekte: falls die echten Daten für das Testen noch fehlen Taentzer Softwarequalität 2015 201

Literatur [Mye95] Glenford J. Myers: Methodisches Testen von Programmen, Oldenbourg Verlag, 1995 [Lin05] Johannes Link u. a.: Softwaretests mit JUnit. Techniken der testgetriebenen Entwicklung. 2. Auflage. dpunkt, 2005 [OB88] T. Ostrand, M. Balcer: The category-partition method for specifying and generating functional tests, Communication of the ACM, 1988 www.cc.gatech.edu/~harrold/6340/cs6340_fall2009/readings/ostrandcate gorypartition88.pdf Taentzer Softwarequalität 2015 202