Programmiermethodik. Übung 3

Ähnliche Dokumente
Unit Tests mit Junit 4. Dario Borchers

Unit Tests und Fehlersuche

Das Test-Framework JUnit ETIS SS04

Software Engineering Klassendiagramme Assoziationen

Allgemein: Klassen testbar machen. 5. Mocking. Mocks programmieren. Zusammenspiel von Klassen testen

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

Test-Driven Design: Ein einfaches Beispiel

Info: Standard DO-178B. 5. Mocking. Zusammenspiel von Klassen testen. Allgemein: Klassen testbar machen

Programmiermethodik. Übung 13

Java Einführung Collections

Testen mit JUnit. Motivation

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


Themen. Web Service - Clients. Kommunikation zw. Web Services

Java-Schulung Grundlagen

Java Einführung Umsetzung von Beziehungen zwischen Klassen. Kapitel 7

Java Schulung. Objektorientierte Programmierung in Java Teil V: Die Java Collection Klassen. Prof. Dr. Nikolaus Wulff

Praktische Übung 'JUnit-Test'

Computeranwendung und Programmierung (CuP)

Unit Tests. Programmiermethodik. Eva Zangerle Universität Innsbruck

Kurzanleitung JUnit. 1 Grundlagen. 1.1 Begriffsdefinitionen. 1.2 Empfehlungen

Javakurs für Anfänger

Datenbankanwendungsprogrammierung Crashkurs Java

Versuchsziele Kenntnisse in der Anwendung von: Sortieren mit Klassen Benutzung von generischen Klassen o Definition o Sortierung.

Java Schulung (Java 2 Java Development Kit 5 / 6)

Testen mit JUnit. Martin Wirsing. Ziele. in Zusammenarbeit mit Michael Barth, Philipp Meier und Gefei Zhang

Nathan Burgener. Design by Contract. Modul SWE

Algorithmen und Datenstrukturen

Software Engineering Klassendiagramme Einführung

Unit Tests in der Testgetriebenen Entwicklung

Programmieren I. Strategie zum Entwurf von Klassen. Beispiele. Design von Klassen. Dr. Klaus Höppner. Beispiel: Bibliothek

Ein erstes Java-Programm

Java: Vererbung. Teil 3: super()

Algorithmen und Datenstrukturen 07

Musterlösungen zur Klausur Informatik 3

Eine Klasse beschreibt Objekte mit gleichen Attributen und Methoden.

Aufgabenblatt Nr. 5 Generizität und TicTacToe

Übersicht. Informatik 2 Teil 3 Anwendungsbeispiel für objektorientierte Programmierung

Software-Engineering Software-Management

Übung zur Vorlesung Einführung in Software Engineering

Beispiel: DB-Mock (1/7)

Unit Testing mit JUnit. Dr. Andreas Schroeder

5. Tutorium zu Programmieren

Erreichbarkeit von Klassenelementen. Daten verstecken und kapseln

Java: Eine Übersicht. Dennis Giffhorn. Lehrstuhl für Programmierparadigmen Universität Karlsruhe

Java - Programmierung - Objektorientierte Programmierung 1

Kapitel 6. Vererbung

Remote Method Invocation

Programmieren I. Übersicht. Vorlesung 12. Handout S. 1. Martin Schultheiß. Hochschule Darmstadt Wintersemester 2010/2011

Kapitel 6. Vererbung

Der EMF-generierte Code. 7. November 2012

1 Polymorphie (Vielgestaltigkeit)

Objektorientierte Programmierung

Das automatisierte Testen mit JUnit

Type Erasure in Java 5. Helmi Jouini Institut für Theoretische Informatik Universität Karlsruhe

Rekursion. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Softwaretechnologie - Wintersemester 2012/ Dr. Günter Kniesel

Fortgeschrittenes Programmieren mit Java. Test Driven Development

Java Einführung Methoden in Klassen

Datum, Uhrzeit: , Uhr Matrikelnummer:... Semester: INbac2 Prüfer: Prof. Meixner Note:...

Programmieren in Java

Praktikum Informatik II Prof. Dr. Martin Trauth, Dr. Michael Männel

3 Objektorientierte Konzepte in Java

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 14/15. Kapitel 11. Fehler und Ausnahmen 1

Testen von graphischen Benutzeroberflächen. 26. Juni 2013

Kapitel 6. Vererbung

U08 Entwurfsmuster (II)

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

CORBA Implementierung von Client und Server

Assoziation und Aggregation

Thema: Testen von objektorientierter Software

Javakurs 2013 Objektorientierung

Prinzipien Objektorientierter Programmierung

PIWIN 1 Übung Blatt 5

Problemstellung. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 24: Reflection 1. IDE und automatische Tests.

Java-Vorkurs Wintersemester 15/16

Objektorientierte Programmierung. Kapitel 12: Interfaces

Asynchrone Webservices mit Axis 1.x in Java

Tutorial04: Swing: Erstellen eines JFrames mit einem JSplitPane

Kapitel 9. Inner Classes. 9.1 Wiederholung: Iteratoren. Ausführen einer Operation auf allen Elementen einer Containerklasse

Generische Typen in Java 1.5. Die Erweiterung der Java Language Specification

Dokumentation des Projektes Tic Tac Toe

Java für Computerlinguisten

Java Einführung VARIABLEN und DATENTYPEN Kapitel 2

Praktikum zu Einführung in die Informatik für LogWiIngs und WiMas Wintersemester 2015/16. Vorbereitende Aufgaben

Primitive Datentypen

Arrays von Objekten. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Mobile und Verteilte Datenbanken

Programmierkurs Java

Swp08-6 Verantwortliche: Yundensuren, Baigalmaa. Testkonzept

SOAP Schnittstelle von SHAB/Simap/KAB ZH. Version 3.0

Große Übung Praktische Informatik 1

Selbstbestimmtes Lernen. Proinformatik III Objektorientierte Programmierung. Format. Inhalt. Buzzwords

3 Objektorientierte Konzepte in Java

13. Tutorium zu Programmieren

Transkript:

Programmiermethodik Übung 3 Wintersemester 2011 / 12 Fachgebiet Software Engineering george@uni-kassel.de

Agenda Besprechung HA2 JUnit4 Implementierung Klassendiagramm Klassen Attribute Methoden Assoziationen Vorschau HA3 Praktische Übung 2

Besprechung HA 2 Aufgabe 1 Aufgabe 1: Mögliches Hexentanz Objektdiagramm Startszenario 3

Besprechung HA 2 Aufgabe 1 Aufgabe 1: Mögliches Hexentanz Objektdiagramm Endszenario 4

Besprechung HA 2 Aufgabe 2 Aufgabe 2: Dazugehöriges Klassendiagramm 5

JUnit Motivation Testen ist Ausprobieren? Unit Tests prüfen systematisch, ob das Programm das tut was es soll Vorteile: Reproduzierbar Automatisierbar und selbst auswertend Dokumentierend und Anwendungsbeispiel => Weniger Fehler, Debugging und Fehlersuche 6

JUnit - Vorgehen beim Testen Test vor der Implementierung: Funktionalität abprüfen Alle möglichen Fehlerfälle prüfen aber keine Trivialitäten So wenig wie möglich implementieren Genau soviel, dass der Test erfolgreich ist Umfang vom Testcode: 15-50% Anteil am Gesamtcode 7

JUnit - Framework (1) Freies Open Source Framework http://www.junit.org/ aktuell: 4.8.2 Autoren: Kent Beck & Erich Gamma Grundeinstellung: Das Feature funktioniert erst, wenn ein Test geschrieben wurde! 8

JUnit - Framework (2) Tests in separaten Test-Klassen Funktionsweise der Test-Methoden Methode benennen Beispiel-Situation aufbauen Eventuell Ausgangssituation merken Eine Aktion durchführen Ein oder mehrere Methodenaufrufe Rückgabewert oder Veränderungen prüfen Mit Hilfe von Assertion-Methoden Prüfung von Fehlerbehandlung (Exceptions) 9

JUnit - Assertion-Methoden Ausdrücke, die wahr sein müssen, sonst Abbruch der aktuellen Test-Methode assertequals(soll, ist) Object, primitive Typen wie boolean, int, long,... asserttrue(boolean) assert[not]null(object), assert[not]same(obj1, obj2) fail() (in Zusammenhang mit Kontrollfluss) Bei Fehlschlag oder fail(): Wirft junit.framework.assertionfailederror Alle Methoden auch mit String message Parameter Beispiel: assertequals( Würfel zeigt 6, 6, wuerfel.getwert()) 10

Testen - Vorgehen bei Rot Funktionalität fertig implementiert? Ansonsten: Fehlermeldung! Stacktrace Debugging - Einkreisen eines Fehlers Breakpoints an spannenden Stellen setzen Variablenbelegung / Objektstruktur überprüfen Methode schrittweise ausführen in interessante Methoden reinsteppen Tipp: Fehler gefunden => reproduzierenden Test schreiben 11

Implementierung Klassendiagramm I Vorgehen bei Implementierung eines Klassendiagramms 12

Implementierung Klassendiagramm II Klassen erstellen Field.java public class Field Battleship.java public class Battleship 13

Implementierung Klassendiagramm III Attribute implementieren public class Field private char x; public char getx() return this.x; public void setx(char x) this.x = x; private int y; public int gety() return this.y; public void sety(int y) this.y = y; 14

Implementierung Klassendiagramm IV Methoden implementieren public class Battleship public void checkwinner() public class Player public boolean fire(field field) 15

Implementierung Klassendiagramm VII Assoziationen Einfacher Fall: 1-zu-1 public class Battleship private Player winner; public Player getwinner() return this.winner; public void setwinner(player winner) this.winner= winner; public class Player private Battleship wongame; public Battleship getwongame() return this.wongame; public void setwongame(battleship wongame) this. wongame = wongame; 16

Implementierung Klassendiagramm V Assoziationen implementieren Schwieriger. Mehrere Fälle: zu-1 und zu-n Bei zu-n: Entscheidung welche Containerklasse 17

Implementierung VI: Collections import java.util.* ArrayList (unsynchronized) oder Vector (synchronized) Implementiert java.util.list (und somit java.util.collection) Basiert auf Arrays, aber vergrößert/verkleinert sich automatisch Erlaubt Duplikate HashSet Implementiert java.util.set (und somit java.util.collection) Menge mit hash-zugriff Keine Duplikate 18

Implementierung Klassendiagramm VIII Schwieriger: zu-n. Einfache Implementierung public class Player private Set<Ship> ships = new HashSet<Ship>(); public void setships(set<ship> ships) this.ships = ships; public Set<Ship> getships() return this.ships; public class Ship private Player owner; public void setplayer(player owner) this.owner = owner; public Player getowner() return this.owner; 19

Implementierung Klassendiagramm IX public class Player private Set<Ship> ships = new HashSet<Ship>(); public void setships(set<ship> ships) this.ships = ships; public Set<Ship> getships() return this.ships; public class Ship private Player owner; public void setplayer(player owner) this.owner = owner; public Player getowner() return this.owner; Erwartung nach Ausführung von public static void main(string[] args) Player p1 = new Player(); Ship s1 = new Ship(); p1.getships().add(s1); Assert.assertNotNull(s1.getOwner()); 20

Implementierung Klassendiagramm X Mögliche Lösung: public static void main(string[] args) Player p1 = new Player(); Ship s1 = new Ship(); p1.getships().add(s1); s1.setowner(p1); Assert.assertNotNull(s1.getOwner()); Probleme? Fehleranfällig (vergisst man oft) 21

Implementierung Klassendiagramm XI Besser: Methoden zum Hinzufügen/Setzen und Entfernen anbieten und Rückrichtung automatisch setzen. public class Player private Set<Ship> ships = new HashSet<Ship>(); public class Ship private Player owner; public void setships(set<ship> ships) public Set<Ship> getships()... public void addship (Ship ship) if(getships().add(ship)) ship.setowner(this); public void removeship(ship ship) if(getships().remove(ship)) ship.setowner(null); public void setowner(player owner) if(this. owner!= owner) if(getowner()!= null) getowner().removeship(this); this. owner = owner; if(getowner()!= null) getowner().addship(this); 22

Vorschau HA 3 I Deadline: 24.11.2011, 23:59 Uhr Aufgabe 1: Implementierung des Klassendiagramms (19P) 23

Vorschau HA 3 II Zusatzaufgabe: JUnit Tests zu referentieller Integrität (6 Zusatzpunkte) 24

Praktische Übung: Klassendiagramm implementieren Implementiert das Klassendiagramm zu Schiffe versenken Logging (Stichpunktartig Protokoll führen) Pair Programming Abwechseln nach 15 min.! 25

Ende Jetzt: Betreutes Arbeiten Ansonsten: Schönes WE! 26