1 WS 2012 Software-Engineering II Objektorientiertes Testen.

Slides:



Advertisements
Ähnliche Präsentationen
Software Engeniering II
Advertisements

der Universität Oldenburg
Prüfung objektorientierter Programme -1
Phasen und ihre Workflows
Programmieren im Großen von Markus Schmidt und Benno Kröger.
Kritische Betrachtung
PKJ 2005/1 Stefan Dissmann Vorwoche - Klasse public class Studierende { private String name, vorname, studiengang; private int matNr, semester; private.
Kapselung , toString , equals , Java API
Ausnahmen HS Merseburg (FH) WS 06/07.
Universität Stuttgart Institut für Kernenergetik und Energiesysteme Was ist Refactoring? Bevor man die Integration angeht, mag es angebracht sein, den.
es gibt (fast) nichts, was nicht anders gemacht werden könnte
FH-Hof Tools Richard Göbel. FH-Hof Tools für die Veranstaltung JUnit: Testen ANT: Build-Tool Eclipse: Entwicklungsumgebung.
Java: Objektorientierte Programmierung
Java: Dynamische Datentypen
Java: Grundlagen der Sprache
Java: Referenzen und Zeichenketten
Java: Grundlagen der Objektorientierung
Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 3 Klassen, Objekte, Arrays und Kontrollstrukturen Sommersemester 2003 Lars Bernard.
Das Test-Framework JUnit
Das Test-Framework JUnit
Java-Kurs - 7. Übung Besprechung der Hausaufgabe Referenzvariablen
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik I Vorlesung Listen-
Programmieren mit JAVA
Vererbung Spezialisierung von Klassen in JAVA möglich durch
PRJ 2007/1 Stefan Dissmann Motivation Problem: gleiche Datenstrukturen werden für verschiedene Objekte gebraucht: z.B. Listen von Studierenden, Kunden,
PKJ 2005/1 Stefan Dissmann Ausblick Es fehlen noch: Möglichkeiten zum Strukturieren größerer Programme Umgang mit variabler Zahl von Elementen Umgang mit.
PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf.
PKJ 2005/1 Stefan Dissmann Zusammenfassung Bisher im Kurs erarbeitete Konzepte(1): Umgang mit einfachen Datentypen Umgang mit Feldern Umgang mit Referenzen.
PKJ 2005/1 Stefan Dissmann Klassenhierarchie Person Kunde Goldkunde Lieferant Object.
Programmiermethodik SS2007 © 2007 Albert Zündorf, University of Kassel 1 5. Test-First Prinzip Gliederung: 1. Einführung 2. Objektdiagramme zur Analyse.
Wasserfallmodel Fachgebiet Software Engineering Übersicht © Albert Zündorf, Kassel University.
1 WS 2012 Software-Engineering II Aspektorientierung.
DVG Klassen und Objekte
Programmiermethodik SS2007 © 2007 Albert Zündorf, University of Kassel 1 5. Test-First Prinzip Gliederung: 1. Einführung 2. Objektdiagramme zur Analyse.
Programmiermethodik SS2007 © 2007 Albert Zündorf, University of Kassel 1 5. Test-First Prinzip Gliederung: 1. Einführung 2. Objektdiagramme zur Analyse.
PRJ 2007/1 Stefan Dissmann Verkettete datenstruktur: Liste Problem: Liste, die eine beliebige Zahl von Elementen verwaltet Operationen: Erzeugen, Anfügen,
Prof. Dr. Gerhard Schmidt pres. by H.-J. Steffens Software Engineering SS 2009Folie 1 Objektmodellierung Objekte und Klassen Ein Objekt ist ein Exemplar.
Delphi II - OOP IFB Fortbildung
University of Applied Sciences Übung Objektorientierte Programmierung II Dipl.-Inf. (FH) Markus Vogler.
Unit Testing Roger Boesch Technology Solution Professional Developer Tools Microsoft Schweiz GmbH blogs.msdn.com/rogerboesch © 2004 Microsoft Corporation.
Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik Dr. Wieland Schwinger
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Einführung in die Programmierung Wintersemester 2009/10 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Entwicklung verteilter Anwendungen I, WS 13/14 Prof. Dr. Herrad Schmidt WS 13/14 Kapitel 1 Folie 2 Microsoft.NET Framework: Quelle:
OOP-Begriffe Abstraktion Modellieren Klasse Objekt Attribute Methoden
Analyse von Ablaufdiagrammen
Testtechniken-Praktikum WS 2005/06 1 Testen mit Mock- Objekten Andreas Höfer Dr. Matthias Müller.
Unterprogramme in JAVA
Clean Code Software-Entwicklung als Handwerkskunst Thomas Nagel, November 2011.
Objectives Verstehen was unterDelegate verstanden wird
EPROG Tutorium #4 Philipp Effenberger
Neuerungen in Java 5/6/7. Stefan Bühler für InfoPoint Überblick Java 5 neue Sprachfeatures Erweiterungen Klassenbibliothek Java 6 Erweiterungen.
Learning By Doing Ausnahmebehandlung Exceptions (Ausnahmebehandlung) Typische Fehlverhalten zur Laufzeit: s. Buch S. 287ff -Verwendung von null-Objekten.
Testtechniken-Praktikum WS 2005/06 1 Arbeiten mit JUnit Andreas Höfer Dr. Matthias Müller Mit Beiträgen von Johannes Link.
JUnit Grundkonzept Gruppe Markt. JUnit: Ziele Einfachheit: –Leicht erlernbare, bekannte Tools –Möglichst wenig Aufwand für die Implementierung von Testfällen.
TDD mit MSTest Stefan Lieser Web:
TDD mit MSTest Stefan Lieser
Stefan Lieser Web:
CuP - Java Achte Vorlesung Entspricht ungefähr Kapitel 4.1 des Skriptums Montag, 28. Oktober 2002.
Java-Kurs - 7. Übung Besprechung der Hausaufgabe Referenzvariablen
Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1 Programmierpraktikum Java SS 2005 Mag.Thomas Hilpold.
Alois Schütte Advanced System Programming 2 Interprozeßkommunikation  2.1 JVM Ablaufumgebung  2.2 Java Native Interface (JNI)  Verwendung von.
OOP-Begriffe Abstraktion Modellieren Klasse Objekt Attribute Methoden
TDD mit MSTest Stefan Lieser Web:
Test-Driven Development
Java-Kurs Übung Besprechung der Hausaufgabe
Java Programme nur ein bisschen objektorientiert.
Vortrag Einführung in AspectJ. Gliederung 1 Einleitung 2 Querschnittsfunktionalitäten in AspectJ 2.1 Sprachelemente 3 Beispiel 4 Join Point Modell 5 Weaving.
Annette Bieniusa Sommersemester 2015
 Präsentation transkript:

1 WS 2012 Software-Engineering II Objektorientiertes Testen

2 WS 2012 Themenübersicht »Objektorientierung »Aspektorientierung »Vorgehensmodelle »UML »Analyse- & Entwurfsmuster »Objektorientiertes Testen »Versionsverwaltung »Refactoring »Labor (Praktischer Teil)

3 WS 2012 Unit-Testing mit JUnit Pragmatic Unit Testing in Java with JUnit Andrew Hunt, David Thomas 176 Seiten ISBN: (Englisch)

4 WS 2012 Objektorientiertes Testen »Testen ist ein wichtiger Bestandteil des Software- Lifecycles »Testen objektorienter Software bringt verglichen mit funktionaler Programmierung einige Erschwernisse mit sich

5 WS 2012 Probleme bei der Objektorientierung I »Nachdem die objektorientierte Software- Entwicklung begann, sich durchzusetzen, blieb objektorientiertes Testen zunächst unbeachtet »Es gab sogar Meinungen, dass Objektorientierung das Testen von Software vereinfacht:... the use of object-oriented design doesnt change any basic testing principles; what does change is the granularity of the units tested. (Grady Booch) Both testing and maintenance are simplified by an object- oriented approach... (James Rumbaugh)

6 WS 2012 Probleme bei der Objektorientierung II »Im Allgemeinen die selben Anforderungen wie bei funktionaler Programmierung »Generierung von authentischen Testdaten »Validierung der Testergebnisse »Das Programm gilt als korrekt, wenn der Ist-Zustand dem spezifizierten Soll-Zustand entspricht

7 WS 2012 Unzählige Zustände »Methoden können in objektorientierten Programmen abhängig vom Zustand der Klasse sein, welcher durch ihre Attribute geprägt wird »Ein Aufruf einer Methode kann je nach Vorgeschichte der Klasse ein beliebig differenziertes Ergebnis liefern »Eine Klasse zu 100% zu testen führt zu einer exponentiellen Steigerung der Testfälle »Es würde bei den meisten komplexen Programm- Strukturen den finanziellen Rahmen des Projekts sprengen

8 WS 2012 Generik und Vererbung »Klassen sollten generisch und für eine große Anzahl von Anwendungsfällen geschrieben sein »Beim Testen nicht vorhersehbar, wie eine Klasse benutzt wird »Prognose der Fälle erforderlich »Durch Vererbung entstehen neue Abhängigkeiten die wiederum getestet werden müssen »Werden Fehler in Basisklassen nicht erkennt, erben alle Subklassen die Fehler von der Basisklasse

9 WS 2012 Automatisierte Tests »Nach dem Definieren von Testfällen kann automatisiert die ganze Testsuite getestet werden »Vorteile: »Fehler, die durch Abhängigkeiten unbemerkt entstanden sind, können einfach gefunden werden »Schnelle Möglichkeit um ein System komplett auf Funktionalität zu prüfen »Verringert die Zeit für das Debuggen »Gibt Vertrauen in den Quellcode »Verbessert das Design, da schon zu Beginn Gedanken über die Verwendung (Testbarkeit) des Codes gemacht werden müssen »Voraussetzung: »Gute Code-Abdeckung der Tests

10 WS 2012 Generelle Grundsätze »Teste alles, was schief gehen kann »Teste alles, was schief ging (Bugs) »Neuer Quellcode ist solange fehlerhaft bis man das Gegenteil bewiesen hat »Schreibe mindestens so viel Testcode wie Programmcode »Führe Tests lokal bei jedem Compilieren aus »Führe alle Tests vor dem Check-In in das Repository aus

11 WS 2012 Was soll getestet werden? »Regel: Use your Right-Bicep »R ight »B oundary »I nverse »C ross-Check »E rror-Conditions »P erformance

12 WS 2012 R-BICEP - Right »Die einfachste Kondition »Teste, ob das Ergebnis richtig ist int[] numbers = { 3, 1, 4, 2 }; Assert.assertEquals( 4, MaxValue( numbers ) );

13 WS 2012 R-BICEP - Boundary »Mit Grenzwerten testen »Sonderzeichen, Umlaute »Leere oder fehlende Werte, bspw. null, Leerstring, 0 »Unerwartete Werte, bspw. 10,000 als Alter »Duplikate in Listen, die keine haben dürften »Sortierte und unsortierte Werte, bpsw. für Sortieralgorithmen »Befehle nicht in erwarteter Reihenfolge ausführen

14 WS 2012 R-BICEP – Inverse Relationship »Einige Methoden können durch die Invers-Methode verifiziert werden »Definitionsbereiche beachten double x = MyMath.Sqrt( 4.0 ); Assert.assertTrue( Math.abs( x*x ) < );

15 WS 2012 R-BICEP - Cross-Check »Manche Ergebnisse können mit alternativen Implementierungen geprüft werden double x = MyMath.Sqrt( 100 ); double y = Math.Sqrt( 100 ); Assert.assertTrue( Math.abs( x – y ) < );

16 WS 2012 R-BICEP – Error-Conditions »Mit ungültigen Eingaben testen »Exceptions provizieren und erwarten »Umgebungsprobleme testen »Speicherüberlauf »Festplatte voll »Systemuhrzeit inkonsistent (manipuliert) »Dauerhafter oder temporärer Netzwerk- Abbruch »Unzureichende Benutzer-Rechte »Systemauslastung »Eingeschränkte oder sehr hohe Bildschirmauflösung

17 WS 2012 R-BICEP - Performance »Bei manchen Methoden sind Performance-Analysen möglich long start = System.currentTimeMillis(); this.sortList(); long end = System.currentTimeMillis(); Assert.assertTrue( ( end - start ) < 1.0 );

18 WS 2012 Gute Tests »A utomatic »T horough »R epeatable »I ndependant »P rofessional

19 WS 2012 A TRIP - Automatic »Unit-Tests müssen automatisch ablaufen können »Starten der Tests »Prüfen der Ergebnisse »Es darf kein manueller Schritt notwendig sein »Datenbank-Zeilen einfügen »Dateien erstellen »…

20 WS 2012 A TRIP - Thorough »Teste alles, bei dem es wahrscheinlich ist, dass es schief geht »Teste zumindest die wichtigsten Eigenschaften »Grenzwerte »Fehlende und ungültige Werte »Die Konsequenz, mit der getestet wird, muss für jedes Projekt neu entschieden werden

21 WS 2012 A TRIP - Repeatable »Tests sollten »immer wieder ausführbar sein »in jeder Reihenfolge ausführbar sein »immer die gleichen Ergebnisse liefern

22 WS 2012 A TRIP - Independant »Tests sollten »Klein und sauber sein »Unabhängig von der Umgebung sein »Unabhängig von einander sein »Teste immer nur eine Sache zu einer Zeit

23 WS 2012 A TRIP - Professional »Tests sind richtiger Quellcode »Sie müssen deshalb nach den selben professionellen Standards wie der Programmcode »geschrieben sein »gewartet werden

24 WS 2012 Dependency Injection 1 »Klassen mit direkten Abhängigkeiten sind schwer testbar »Sie können nicht einzeln, sondern nur als System getestet werden Zu testende Klasse

25 WS 2012 Dependency Injection 2 »Die abhängige Klasse bekommt eine Referenz auf ihre Delegate-Klasse gesetzt »Der Typ der Referenz ist dabei nicht die Klasse selbst sondern ein Interface* Zu testende Klasse

26 WS 2012 Dependency Injection 3 »Im Test-Code kann nun der Klasse ein Delegate gesetzt werden, welches dasselbe Interface implementiert, sich jedoch nach von der Test- Klasse vorgegebenen Regeln verhält »Diese Alternativ-Klassen nennt man Mock- Klassen (Mock = Attrappe)

27 WS 2012 [Frameworks] Mockito »Mocking-Framework »Stellt Mocks zur Verfügung Class2 delegate = Mockito.mock(Class2.class); Mockito.when(delegate.foo(10)).thenReturn(String); new Class1().setDependancy(delegate); Mit verify kann später geprüft werden, ob ein Aufruf stattfand: Mockito.verify(delegate).foo(10);

28 WS 2012 [Frameworks] Spring (I) »Dependancy Injection class private iClass2 dependancy; } »Dependancies sind konfigurierbar

29 WS 2012 [Frameworks] Spring (II) »Komplexe Instanziierungen möglich Entspricht: iClass2 class2 = new Class2("Hallo Welt"); Class1 class1 = new Class1(); Class1.setDependancy(class2); Vorteil: Variable Parameter und Abhängigkeiten sind konfigurierbar! (=austauschbar)

30 WS 2012 Dependency Injection 4 »OOP Design Pattern »Einsatzgebiete nicht nur auf OOP Testing beschränkt »Immer dann ideal, wenn direkte Abhängigkeiten vermieden werden sollen

31 WS 2012 Werkzeug JUnit »In Eclipse und NetBeans »Ohne Eclipse: » »In Eclipse das JUnit-Library einbinden »Projekt-Properties »Java Build Path »Libraries

32 WS 2012 Testfall erstellen »Neue (Test-)Klasse erstellen »vorzugsweise in einem separaten Package für unit-tests »Neue Methode erstellen, die einen Test durchführt »Methode mit der versehen »Package Explorer: »Rechtsklick auf Klasse »Run as »JUnit test

33 WS 2012 Aufbau eines Tests package unittest.test; public class SimpleTest public void testcase() { // … } Testklasse Test-Methode Test-Code

34 WS 2012 Assertions »Die Klasse org.junit.Assert bietet statische Funktionen, um Tests durchzuführen »Assert.assertTrue( boolean ) »Test bestanden, wenn der übergebene Wert true ist »Assert.assertFalse( boolean ) »Test bestanden, wenn der übergebene Wert false ist »Assert.assertEquals( Object, Object ) »Test bestanden, wenn beide übergebene Objekte gleich sind (Bsp.: Strings mit gleichem Inhalt) »Assert.assertSame( Object, Object ) »Test bestanden, wenn es sich bei den übergebenen Objekten und die selbe Instanz handelt »Assert.assertNotNull( Object ) »Test bestanden, wenn das übergebene Objekt nicht null ist

35 WS 2012 Beispiel-Testfall package unittest.test; import org.junit.Assert; public class SimpleTest public void testcase() { Assert.assertTrue( Math.PI > 3 ); // will succeed public void badTestcase() { Assert.assertTrue( Math.PI < 3 ); // bound to fail }

36 WS 2012 Ausführen des Tests Start des Testvorgangs

37 WS 2012 Test-Ergebnisse Indiziert, dass alle Testfälle erfolgreich waren Ein Testfall ist fehlgeschlagen

38 WS 2012 setUp & tearDown »Benötigen alle Tests einer Testklasse gemeinsame Ressourcen, können diese in einer setUp-Methode alloziert werden »Dazu wird die Methode mit der versehen »Ressourcen, die in der setUp-Methode alloziert werden, können in der tearDown-Methode wieder freigegeben werden »Die Methode wird mit der versehen »Die beiden Methoden werden vor und nach jedem Test public void setUp(){ this.dbconnection.open(); public void tearDown() { this.dbconnection.close(); public void testcase1() { this.dbconnection.…; public void testcase2() { this.dbconnection.…; }

39 WS 2012 Einfachere Annotations »Durch den Import von org.junit.* bzw. den benötigten Elementen kann man auf die Paketnamen verzichten import org.junit.*; class MyTest public void setUp(){ … public void testcase1() { … } }

40 WS 2012 Exceptions »Exceptions, die während des Tests auftreten werden von JUnit abgefangen und bei der Auswertung als Fehler ausgewiesen »Möchte man explizit testen, ob eine spezielle Exception geworfen wird, kann man das durch die Erweiterung der Annotation IndexOutOfBoundsException.class) public void testException() { new ArrayList ().get(0); // wirft Exception } Beispiel:

41 WS 2012 [Tools] Code-Coverage »Analysieren, welche Code- Stellen durch Unit-Tests bereits abgedeckt sind »Einfaches Auffinden von ungetestetem Code »Nur getesteter Code kann als funktionsfähig angesehen werden! »Beispiel: Clover