Fortgeschrittenes Programmieren mit Java. Test Driven Development



Ähnliche Dokumente
Test-Driven Design: Ein einfaches Beispiel

Testen mit JUnit. Motivation

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

Java: Vererbung. Teil 3: super()

Testgetriebene Entwicklung mit JUnit4

Lösungsvorschläge. zu den Aufgaben im Kapitel 4

Swp08-6 Verantwortliche: Yundensuren, Baigalmaa. Testkonzept

SEP 114. Design by Contract

Programmierkurs Java

Unit Tests mit Junit 4. Dario Borchers

Softwaretests in Visual Studio 2010 Ultimate Vergleich mit Java-Testwerkzeugen. Alexander Schunk Marcel Teuber Henry Trobisch

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

Dokumentation für das Spiel Pong

Zahlenwinkel: Forscherkarte 1. alleine. Zahlenwinkel: Forschertipp 1

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

Unit Tests in der Testgetriebenen Entwicklung

Einführung in die Informatik Tools

Probeklausur Softwareengineering SS 15

Grundlagen der Programmierung Prof. H. Mössenböck. 14. Schrittweise Verfeinerung

Praktische Übung 'JUnit-Test'

Institut für Programmierung und Reaktive Systeme 25. August Programmier-Labor Übungsblatt. int binarysearch(int[] a, int x),

Integrierte und automatisierte GUI-Tests in Java

Große Übung Praktische Informatik 1

Auf Diät Wie Sie Ihre Entwicklung verschlanken. Job Merkblätter. Einmal drucken pro Team

Projektmanagement in der Spieleentwicklung

Widerrufsbelehrung der Free-Linked GmbH. Stand: Juni 2014

Programmieren in Java

Software-Engineering Software-Management

.NET Code schützen. Projekt.NET. Version 1.0

Tipps für die praktische Durchführung von Referaten Prof. Dr. Ellen Aschermann

Anleitung über den Umgang mit Schildern

Wie halte ich Ordnung auf meiner Festplatte?

Was meinen die Leute eigentlich mit: Grexit?

Evangelisieren warum eigentlich?

ZfP-Sonderpreis der DGZfP beim Regionalwettbewerb Jugend forscht BREMERHAVEN. Der Zauberwürfel-Roboter. Paul Giese. Schule: Wilhelm-Raabe-Schule

Informatik Java-Programmierkurs im Rahmen der Berufs- u. Studienorientierung für Schüler. Joliot-Curie-Gymnasium GR 2010 Nico Steinbach

Übung Grundlagen der Programmierung. Übung 05: Arrays. Abgabetermin: xx.xx.xxxx. Java-Programm Testplan Testergebnisse

Programmieren für Ingenieure Sommer Ein Rechner. Rechner sind überall. Gerät, das mittels programmierbarer Rechenvorschriften Daten verarbeitet.

Software Systems Engineering

Fakultät Angewandte Informatik Lehrprofessur für Informatik

Life-Domain-Balance gestalten Evaluation zweier Lanceo-Ansätze Dipl.-Psych. Nina Schiml, Uni Freiburg

Agile Vorgehensmodelle in der Softwareentwicklung: Scrum

Java Kurs für Anfänger Einheit 5 Methoden

Software Engineering in der Praxis

40-Tage-Wunder- Kurs. Umarme, was Du nicht ändern kannst.

Wie ist das Wissen von Jugendlichen über Verhütungsmethoden?

1 Vom Problem zum Programm

Herr Müller möchte anderen Menschen helfen. Er bekommt kein Geld für diese Arbeit. Aber die Arbeit macht ihm Freude.

Client-Server-Beziehungen

Glaube an die Existenz von Regeln für Vergleiche und Kenntnis der Regeln

Menü auf zwei Module verteilt (Joomla 3.4.0)

Algorithmen mit Python

Tutorial Moodle 2 globale Gruppen bzw. Kohorten

Suchbäume. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Nach der Installation kann es auch schon losgehen. Für unseren Port Scanner erstellen wir zunächst ein neues Projekt:

Klassenentwurf. Wie schreiben wir Klassen, die leicht zu verstehen, wartbar und wiederverwendbar sind? Objektorientierte Programmierung mit Java

Dokumentenverwaltung im Internet

Einführung in die Programmierung

Das Persönliche Budget in verständlicher Sprache

bagfa ist die Abkürzung für unseren langen Namen: Bundes-Arbeits-Gemeinschaft der Freiwilligen-Agenturen.

Objektorientierte Programmierung für Anfänger am Beispiel PHP

Installation Hardlockserver-Dongle

Arbeit zur Lebens-Geschichte mit Menschen mit Behinderung Ein Papier des Bundesverbands evangelische Behindertenhilfe e.v.

7. Bewässerung: Mehrmals pro Woche

Erfahrungsaustausch und Rückblick Cross Mentoring Dr. Karl Straßer Mag. Kathrin Kühtreiber

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

SEMINAR Modifikation für die Nutzung des Community Builders

Was ich als Bürgermeister für Lübbecke tun möchte

Komponententest. Testen von Software Systemen. Übung 02 SS 2009 Version:

Markus Wichmann. Testen von Java Code mit. JUnit

Arbeiten mit UMLed und Delphi

Software Engineering Klassendiagramme Assoziationen

Unsere Webapplikation erweitern

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag

Operationalisierbare Qualitätskriterien für die Programmierung mit Erfahrungen aus PRÜ1 und PRÜ2

Der Kalender im ipad

Beschreibung Regeln z.b. Abwesenheitsmeldung und Weiterleitung

Prüfung Software Engineering I (IB)

Würfelt man dabei je genau 10 - mal eine 1, 2, 3, 4, 5 und 6, so beträgt die Anzahl. der verschiedenen Reihenfolgen, in denen man dies tun kann, 60!.

Ablauf Vorstellungsgespräch

Zusammenführen mehrerer Dokumente zu einem PDF In drei Abschnitten erstellen Sie ein Dokument aus mehreren Einzeldokumenten:

Unit Tests. Programmiermethodik. Eva Zangerle Universität Innsbruck

Änderung der Sicherheitseinstellungen von konten

Deutsches Rotes Kreuz. Kopfschmerztagebuch von:

Das Leitbild vom Verein WIR

2A Basistechniken: Weitere Aufgaben

Fotogalerie mit PWGallery in Joomla (3.4.0) erstellen

Beispiel: Methode mit einem Fehler. Diese Methode wird problematisch, wenn von außen eine Dauer von 0 Sekunden angegeben wird, etwa im Aufruf

1: 9. Hamburger Gründerpreis - Kategorie Existenzgründer :00 Uhr

Einführung in die Programmierung für Wirtschaftsinformatik

Fachgebiet Informationssysteme Prof. Dr.-Ing. N. Fuhr. Programmierung Prof. Dr.-Ing. Nobert Fuhr. Übungsblatt Nr. 6

Erfahrungen mit Hartz IV- Empfängern

Step by Step Softwareverteilung unter Novell. von Christian Bartl

Technische Hochschule Georg Agricola WORKSHOP TEIL 3. IKT (Informations- und Kommunikationstechnik) an einer MorseApp erklärt

Tutorial Moodle 2 Rollenzuweisung

Transkript:

Fortgeschrittenes Programmieren mit Java Test Driven Development Test getriebene Programmierung Benedikt Boeck Hochschule für Angewandte Wissenschaften Hamburg 6. November 2009 B. Boeck (HAW Hamburg) Test Driven Development 06.11.2009 1 / 25

Inhaltsverzeichnis 1 Theorie Was ist Testgetriebene Entwicklung? Direktiven der Testgetriebenen Entwicklung Entwicklungszyklus 2 Praxis Beispiel: Brief Porto Einblick: Praktikumsaufgabe Verkettete Liste Gedanken Experiment: Cosinus 3 Schluß Fazit B. Boeck (HAW Hamburg) Test Driven Development 06.11.2009 2 / 25

Theorie Testgetriebene Entwicklung Test Driven Development (TDD), Extreme Testing gehört zum Extreme Programming TDD ist nicht Java spezifisch B. Boeck (HAW Hamburg) Test Driven Development 06.11.2009 3 / 25

Theorie Was ist Testgetriebene Entwicklung? Was ist Testgetriebene Entwicklung? TDD ist eine qualitätsbewusste Programmiertechnik Entwicklung in kleinen Schritten Unit Tests: Anforderungen an unseren Code Akzeptanztests: Anforderungen des Kunden Dieser Vortrag beschäftigt sich mit den Grundlagen: vor allem den Unit Tests B. Boeck (HAW Hamburg) Test Driven Development 06.11.2009 4 / 25

Theorie Was ist Testgetriebene Entwicklung? JUnit 4 JUnit ist ein Framework für Java in diesem Vortrag wird JUnit 4 verwendet http://www.junit.org/ mini Tuturial: http://www.junit.org/node/477 B. Boeck (HAW Hamburg) Test Driven Development 06.11.2009 5 / 25

Theorie Was ist Testgetriebene Entwicklung? Gründe für TDD Testen ist wichtig Stichwort: Qualitätskontrolle wird jedoch bei der klassichen Vorgenhsweise oft vernachlässigt Testen ist typisch die letzte Phase in Projekten etwas worauf Programmierer keine Lust hat ärgerlich Fehler lange nach ihrer Entstehung zu finden das erste was wegfällt, wenn es zeitlich eng wird selten systematisch Die Idee bei TDD ist es zuerst den Testcode zu schreiben, dabei häufig auszuführen automatisiert wiederholbar B. Boeck (HAW Hamburg) Test Driven Development 06.11.2009 6 / 25

Theorie Direktiven der Testgetriebenen Entwicklung Direktiven der Testgetriebenen Entwicklung Aufgstellt von Frank Westphal [1] 1 Motivieren Sie jede Änderung des Programmverhaltens durch einen automatisierten Test. 2 Bringen Sie Ihren Code immer in die einfache Form. 3 Integrieren Sie Ihren Code so häufig wie nötig. B. Boeck (HAW Hamburg) Test Driven Development 06.11.2009 7 / 25

Theorie Direktiven der Testgetriebenen Entwicklung 1. Direktive - Testgetriebene Programmierung Motivieren Sie jede Änderung des Programmverhaltens durch einen automatisierten Test. der Test kommt vor dem Programmcode jede Änderung in der Programmfunktionalität, wird zuerst durch einen Test gefodert B. Boeck (HAW Hamburg) Test Driven Development 06.11.2009 8 / 25

Theorie Direktiven der Testgetriebenen Entwicklung 2. Direktive - Refactoring Bringen Sie Ihren Code immer in die einfache Form. Ziel einfachen und sauberen Code zu erhalten d.h. Code Pflege B. Boeck (HAW Hamburg) Test Driven Development 06.11.2009 9 / 25

Theorie Direktiven der Testgetriebenen Entwicklung 3. Direktive - Häufige Integration Integrieren Sie Ihren Code so häufig wie nötig. Wenn Software im Team entwickelt wird, regelmäßiges agbgleichen Um Konflikte früh zu erkennen B. Boeck (HAW Hamburg) Test Driven Development 06.11.2009 10 / 25

Theorie Entwicklungszyklus Entwicklungszyklus 1 Test schreiben, dieser sollte zunächst fehlschlagen 2 Code schreiben, gerade so viel das der Test fehlschlägt 3 Code schreiben, gerade so viel das alle Tests laufen Refactoring: Code aufräumen/vereinfachen, und mit vorhandenden Test gegenprüfen B. Boeck (HAW Hamburg) Test Driven Development 06.11.2009 11 / 25

Theorie Entwicklungszyklus Ausnahmen 1 Unerwarteter Erfolg: Der Test läuft, obwohl er eigentlich fehlschalgen sollte Code erfüllt bereits die Anfoderungen Der Test ist fehlerhaft 2 Unerwarteter Fehlschlag: Der Test schlägt fehl, obwohl er eigentlich laufen sollte 3 Zu großer Schritt Test läßt sich nur mit erheblichen Aufwand erfüllen B. Boeck (HAW Hamburg) Test Driven Development 06.11.2009 12 / 25

Theorie Entwicklungszyklus Mut zum Rückschritt Was ist wenn etwas nicht geht? Oder sich festgefahren hat ruhig Code wieder rausschmeißen und neu anfangen zurück zu einem Punkt der einem noch richtig erschien gut möglich da in kleinen Schritten programmiert wird B. Boeck (HAW Hamburg) Test Driven Development 06.11.2009 13 / 25

Beispiel: Brief Porto Porto Brief Porto abhängig von Gewicht http://www.deutschepost.de/dpag?xmlfile=link1015318_832 http://www.portokalkulator.de Gewicht Porto Standard <= 20g 0,55 Kompakt <= 50g 0,90 Groß <= 500g 1,45 Maxi <= 1000g 2,20 B. Boeck (HAW Hamburg) Test Driven Development 06.11.2009 14 / 25

Beispiel: Brief Porto Anfang import org. junit.test ; public class BriefPortoTest { BriefPorto porto ; @Test public void getporto (){ BriefPorto nicht bekannt Klasse erstellen public class BriefPorto { B. Boeck (HAW Hamburg) Test Driven Development 06.11.2009 15 / 25

Beispiel: Brief Porto Next Step gedanken um die Schnittstelle import static org. junit. Assert.*; import org. junit. Before ; import org. junit.test ; public class BriefPortoTest { BriefPorto porto ; @Before public void setup (){ porto = new BriefPorto (); @Test public void calcporto (){ assertequals (" Standard ", 0.55f, porto.calc (10), 0.001) ; public class BriefPorto { public double calc ( int g) { return 0; public class BriefPorto { public double calc ( int g) { return 0.55; B. Boeck (HAW Hamburg) Test Driven Development 06.11.2009 16 / 25

Beispiel: Brief Porto Next Step @Test public void calcporto50 (){ assertequals (" Kompakt ", 0.90f, porto.calc (50), 0.001) ; public double calc ( int g) { if (g <= 20) return 0.55; else return 0.90; B. Boeck (HAW Hamburg) Test Driven Development 06.11.2009 17 / 25

Beispiel: Brief Porto Next Step @Test public void calcporto500 (){ assertequals (" Gross ", 1.45f, porto.calc (500), 0.001) ; public double calc ( int g) { if (g <= 20) return 0.55; else if (g <= 50) return 0.90; else return 1.45; B. Boeck (HAW Hamburg) Test Driven Development 06.11.2009 18 / 25

Beispiel: Brief Porto Next Step @Test public void clacporto1000 (){ assertequals ("Maxi ", 2.20f, porto.calc (1000), 0.001) ; public class BriefPorto { public double calc ( int g) { if (g <= 20) return 0.55; else if (g <= 50) return 0.90; else if (g <= 500) return 1.45; else return 2.20; B. Boeck (HAW Hamburg) Test Driven Development 06.11.2009 19 / 25

Beispiel: Brief Porto Next Step @Test ( expected = IllegalArgumentException. class ) public void clacporto1001 (){ porto.calc (1001) ; public double calc ( int g) throws IllegalArgumentException { if (g > 1000) throw new IllegalArgumentException (); if (g <= 20) return 0.55; else if (g <= 50) return 0.90; else if (g <= 500) return 1.45; else return 2.20; B. Boeck (HAW Hamburg) Test Driven Development 06.11.2009 20 / 25

Beispiel: Brief Porto Last Step @Test ( expected = IllegalArgumentException. class ) public void clacportonegative (){ porto. calc ( -1); public double calc ( int g) throws IllegalArgumentException { if (g > 1000 g < 0) throw new IllegalArgumentException (); if (g <= 20) return 0.55; else if (g <= 50) return 0.90; else if (g <= 500) return 1.45; else return 2.20; B. Boeck (HAW Hamburg) Test Driven Development 06.11.2009 21 / 25

Einblick: Praktikumsaufgabe Verkettete Liste Einblick: Praktikumsaufgabe Verkettete Liste kein konstruiertes Beispiel mit TDD entwickelt um zu sehen wie TDD in etwas größer aussieht B. Boeck (HAW Hamburg) Test Driven Development 06.11.2009 22 / 25

Gedanken Experiment: Cosinus Gedanken Experiment: Cosinus Eine Cosinus Funktion nach TDD entwickeln 1 cos(0) B. Boeck (HAW Hamburg) Test Driven Development 06.11.2009 23 / 25

Gedanken Experiment: Cosinus Gedanken Experiment: Cosinus Eine Cosinus Funktion nach TDD entwickeln 1 cos(0) return 1; B. Boeck (HAW Hamburg) Test Driven Development 06.11.2009 23 / 25

Gedanken Experiment: Cosinus Gedanken Experiment: Cosinus Eine Cosinus Funktion nach TDD entwickeln 1 cos(0) return 1; 2 cos(π/2) B. Boeck (HAW Hamburg) Test Driven Development 06.11.2009 23 / 25

Gedanken Experiment: Cosinus Gedanken Experiment: Cosinus Eine Cosinus Funktion nach TDD entwickeln 1 cos(0) return 1; 2 cos(π/2) if (d = 0) return 1; else return 0; B. Boeck (HAW Hamburg) Test Driven Development 06.11.2009 23 / 25

Gedanken Experiment: Cosinus Gedanken Experiment: Cosinus Eine Cosinus Funktion nach TDD entwickeln 1 cos(0) return 1; 2 cos(π/2) if (d = 0) return 1; else return 0; 3 cos(2π) B. Boeck (HAW Hamburg) Test Driven Development 06.11.2009 23 / 25

Gedanken Experiment: Cosinus Gedanken Experiment: Cosinus Eine Cosinus Funktion nach TDD entwickeln 1 cos(0) return 1; 2 cos(π/2) if (d = 0) return 1; else return 0; 3 cos(2π) if (d = pi /2) return 0; else return 1; B. Boeck (HAW Hamburg) Test Driven Development 06.11.2009 23 / 25

Gedanken Experiment: Cosinus Gedanken Experiment: Cosinus Eine Cosinus Funktion nach TDD entwickeln 1 cos(0) return 1; 2 cos(π/2) if (d = 0) return 1; else return 0; 3 cos(2π) if (d = pi /2) return 0; else return 1; Eigentlicher Ansatz: Cosinus Reihe: cos(x) = x2k k=0 ( 1)k (2k)! dann ausreichend Tests erstellen B. Boeck (HAW Hamburg) Test Driven Development 06.11.2009 23 / 25

Schluß Fazit Fazit Debugger wird seltener benötigt direktes Feedback bessere Orientierung Aufteilung in Abschnitte Wie weit bin ich? Wo war ich zuletzt? B. Boeck (HAW Hamburg) Test Driven Development 06.11.2009 24 / 25

Schluß Letzte Folie Vielen Dank für Eure Aufmerksamkeit Das wars. Benedikt Boeck Quellen: Frank Westphal: Testgetriebene Entwicklung mit JUnit & FIT dpunkt.verlag, 2006 http: //de.wikipedia.org/wiki/testgetriebene_entwicklung B. Boeck (HAW Hamburg) Test Driven Development 06.11.2009 25 / 25