Thema: Testen von objektorientierter Software



Ähnliche Dokumente
Software-Engineering Software-Management

Das Test-Framework JUnit ETIS SS04

Unit Tests in der Testgetriebenen Entwicklung

Programmiertechnik II

Swp08-6 Verantwortliche: Yundensuren, Baigalmaa. Testkonzept

Testen mit JUnit. Motivation

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

Testen von graphischen Benutzeroberflächen. 26. Juni 2013

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

Fortgeschrittenes Programmieren mit Java. Test Driven Development

Prinzipien Objektorientierter Programmierung

Testphase. Das Testen

Testen von graphischen Benutzeroberflächen. 24. Juni 2015

Unit Testing mit JUnit. Dr. Andreas Schroeder

Test-Driven Design: Ein einfaches Beispiel

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

Unit Tests und Fehlersuche

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

JUnit. Software-Tests

Programmieren in Java

Peter Liggesmeyer. Software-Qualität. Testen, Analysieren und Verifizieren von Software. 2. Auflage. Spektrum k-/l AKADEMISCHER VERLAG

JUnit. Unit testing unter Java

Software - Testung ETIS SS05

Gliederung Grundlagen Schlüsselworte try-catch Fehlerobjekte Fehlerklassen Schlüsselwort finally Schlüsselwort throws selbst erstellte Exceptions

Unit Tests. Programmiermethodik. Eva Zangerle Universität Innsbruck

Diplomarbeit. Konzeption und Implementierung einer automatisierten Testumgebung. Thomas Wehrspann. 10. Dezember 2008

Programmieren I. Martin Schultheiß. Hochschule Darmstadt Wintersemester 2010/2011

Markus Wichmann. Testen von Java Code mit. JUnit

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

Unit Tests mit Junit 4. Dario Borchers

Das automatisierte Testen mit JUnit

Software Engineering in der Praxis

Java Einführung Abstrakte Klassen und Interfaces

Programmierprojekt. Anne0e Bieniusa Sommersemester 2014

Java: Vererbung. Teil 3: super()

Einführung in die Informatik Tools

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

Einführung Arten von Softwaretests Prinzipien Continuous Integration Tests in FLOSS-Projekten Quellen. Softwaretests. Christoph Betschart

SEP 114. Design by Contract

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

Java Schulung. Objektorientierte Programmierung in Java Teil IV: Testen mit JUnit. Prof. Dr. Nikolaus Wulff

Java - Programmierung - Objektorientierte Programmierung 1

Testgetriebene Entwicklung mit JUnit4

Softwaretechnik. Vertretung von Prof. Dr. Blume Fomuso Ekellem WS 2011/12

Testen von Softwaresystemen. 13. Januar 2015

Konzeption. und prototypische Implementierung. eines Werkzeuges. für den funktionalen Klassentest

Testgetriebene Entwicklung

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

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

Projektmanagement. Vorlesung von Thomas Patzelt 9. Vorlesung

Softwaretechnik 1 Tutorium

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

Testing & Logging DBS. Tobias Lingelmann SEP

Testen. SEPR Referat: Testen - Oliver Herbst

SE Besprechung. Übung 6 Softwaretests

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

Code verifizieren mittels

Software Engineering II (IB) Testen von Software / Modultests

,$ -. "+0 *+*+ ! / -#$%$. #$%'' $ () 1 2$ #$%$! 1 2$3 )!

Systematisches Testen von Software

Einführung in die Programmierung

Client-Server-Beziehungen

Einführung in die objektorientierte Programmierung mit Java. Klausur am 19. Oktober 2005

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

Testen. Robert Binder: Software Testing is the execution of code using combinations of input and state selected to reveal bugs.

Der EMF-generierte Code. 7. November 2012

Java Kurs für Anfänger Einheit 5 Methoden

Klausur zur Einführung in die objektorientierte Programmierung mit Java

C# im Vergleich zu Java

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

Testen - Konzepte und Techniken

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

Qualitätsmanagement im Projekt

Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden.

Unit Testing, SUnit & You

1. Einführung und Unit Testing Programmieren / Algorithmen und Datenstrukturen 2

OO Softwareentwicklung

Testmanagement in IT-Projekten

Softwaretechnikpraktikum SS Qualitätsmanagement I. 1. Überblick. Qualität. Qualitätsmerkmal

Seminar Simulation und Bildanalyse mit Java SS2004. Themenschwerpunkt: Tests in Informatik und Statistik

Praktische Übung 'JUnit-Test'

Prüfungszeuch im Fach Objektorientierte Programmierung WS 2000

Algorithmen und Datenstrukturen

Typumwandlungen bei Referenztypen

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

Softwarequalitätssicherung

Unit Testing mit NUnit

Java Einführung Packages

Testen mit JUnit. Martin Wirsing. in Zusammenarbeit mit Matthias Hölzl, Nora Koch 05/03

Transkript:

Seminar Simulation und Bildanalyse mit Java Thema: Testen von objektorientierter Software Uta Dienst

1. Teil: Einführung in den Software-Test 2. Teil: JUnit-Einführung Uta Dienst 17.11.2003 2

1. Teil: Einführung in den Software-Test Uta Dienst 17.11.2003 3

Inhaltsübersicht Motivation Softwarebedingtes Fehlverhalten, Software-Qualität Wie findet man Software-Fehler? Konventioneller Software-Test Definition, Blackbox- und Whitebox-Test,... OO Software testen Unit Test, Dummy- u. Mock-Objekte Uta Dienst 17.11.2003 4

Software Fehler Trägerrakete Ariane 5 Bestrahlungsgerät Therac 25 Verkehrsflugzeug B373 Defekter Geldautomat bei der Postbank Pentium Bug Uta Dienst 17.11.2003 5

Software-Qualitäts Merkmale nach DIN ISO 9126: Funktionalität Zuverlässigkeit Benutzbarkeit Effizienz Änderbarkeit und Übertragbarkeit Uta Dienst 17.11.2003 6

Qualität als Unternehmensziel Erhöhung der Marktanteile und Kunden- Bindung Steigerung der Rentabilität und Produktivität Kostenreduktion Mitarbeiterzufriedenheit Vermeidung von Gewährleistungs- und Haftungs-Ansprüchen Uta Dienst 17.11.2003 7

Software-Fehler Wo? Spezifikation Design Implementierung Wie entdecken? Software-Test Reviews/Inspektion Dynamische Überprüfung (z.b. Debuggen) Uta Dienst 17.11.2003 8

Software-Test Definition: Testen von Software ist jede Ausführung eines Testobjekts, die zur Überprüfung dessen dient. Testen ist der Prozess, ein Programm mit der Absicht auszuführen, Fehler zu finden. Uta Dienst 17.11.2003 9

Konventionelle Test Methoden (1) Statische Analyse - Testobjekte kommen nicht zur Ausführung! - Verifizierende Prüftechniken Algebraische Techniken Automatenbasierte Techniken Analysierende Prüftechniken Review- und Inspektions-Techniken Metriken (Maße) Grafiken und Tabellen Uta Dienst 17.11.2003 10

Konventionelle Test Methoden (2) Dynamische Programmanalyse - Klassifizierung von Testfall-Ermittlungsverfahren! - White-Box vs. Black-Box-Test Einordnung nach verwendeter Testreferenz Uta Dienst 17.11.2003 11

Konventionelle Test Methoden (3) Dynamische Programmanalyse Strukturorientiere Test Kontoll- oder Datenflussorientierte Tests Bsp.: Anweisungs-, Zweigüberdeckungstest Funktionsorientierte Test Bsp.: Äquivalenzklassenbildung, Zustandsbasierter Test Diversifizierender Test Bsp.: Regressionstest Uta Dienst 17.11.2003 12

Testarten Modultest ( Unit Test ) Methodentest, Klassentest Integrationstest Bottom-up oder Top-down-Integrationstest Systemtest Funktionstest, Leistungstest, Stresstest Uta Dienst 17.11.2003 13

Besonderheiten OO-Systeme Botschaften zwischen Objekten Objektzustände Kapselung Polymorphie Dynamisches Binden Vererbung Uta Dienst 17.11.2003 14

Testen von OO-Software Kleinste testbare Einheiten sind Klassen. Getestet wird über die Schnittstelle bzw. über die Methoden der Klasse. Klassentest als OO Modultest ( Unit Test ). Testbarkeit wird durch möglichst kleine und möglichst unabhängige Einheiten gefördert. Uta Dienst 17.11.2003 15

Unit Tests Treiber Spez. Testteiber: Dummy- und Mock-Objekte Testrahmen Einbettung eines Testmoduls in eine künstliche Testumgebung. Automatisierte Unit Tests Weitverbreitetes Testframework: JUnit Uta Dienst 17.11.2003 16

2. Teil: JUnit - Einführung Uta Dienst 17.11.2003 17

JUnit: Ein Open Source Software JUnit ist ein Java-Framework zum Schreiben und Ausführen automatischer Unit Test. JUnit erleichtert den Test-First-Ansatz. http://www.junit.org http://www.frankwestphal.de/ UnitTestingmitJUnit.html Uta Dienst 17.11.2003 18

Kleine Begriffslehre Testfälle Testmethoden Fixture Methode setup() und teardown() Testsuiten Uta Dienst 17.11.2003 19

Ein erstes Beispiel import junit.framework.*; public class EuroTest extends TestCase { public EuroTest( String name ) { super( name ); } public void testamount( ) { Euro two = new Euro( 2.00 ); assertequals( "two", 2.00, two.getamount( ) ); } public static void main( String[ ] args ) { junit.swingui.testrunner.run( EuroTest.class ); } } Uta Dienst 17.11.2003 20

Erst testen, dann programmieren! public class Euro { private double amount; public Euro( double amount ) { this.amount = amount; } public double getamount( ) { return this.amount; } } Uta Dienst 17.11.2003 21

JUnits graphische Oberfäche Uta Dienst 17.11.2003 22

Testen mit JUnit asserttrue( thejunglebook.ischildrensmovie( ) ); assertequals( "foobar", "foo" + "bar" ); assertequals( 9, customer.getfrequentrenterpoints( ) ); assertequals( 3.1415, Math.pi( ), 1e-4 ); assertnull( hashmap.get( key ) ); assertnotnull( httprequest.getparameter( "action" ) ); assertsame( bar, hashmap.put( "foo", bar ).get( "foo" ) ); Uta Dienst 17.11.2003 23

Fehlschlagen eines Tests (1) public class EuroTest extends TestCase {... public void testrounding( ) { Euro roundedtwo = new Euro( 1.995 ); assertequals( "two", 2.00, two.getamount( ) ); } } Uta Dienst 17.11.2003 24

Fehlschlagen eines Tests (2) Uta Dienst 17.11.2003 25

Fehlschlagen eines Tests (3) public class Euro { private long cents; public Euro( double euro ) { cents = Math.round( euro * 100.0 ); } public double getamount( ) { return cents / 100.0; } } Uta Dienst 17.11.2003 26

Ein Testfall in JUnit (1) public class EuroTest extends TestCase {... public void testadding( ) { Euro two = new Euro( 2.00 ); Euro three = two.add( new Euro( 1.00 ) ); assertequals( "sum", 3.00, three.getamount( ), 0.001 ); } } Uta Dienst 17.11.2003 27

Ein Testfall in JUnit (2) public class Euro {... private Euro( long cents ) { this.cents = cents; } public Euro add( Euro other ) { return new Euro( this.cents + other.cents ); } } Uta Dienst 17.11.2003 28

Ein Testfall in JUnit (3) public class EuroTest extends TestCase { private Euro two; public EuroTest( String name ) { super( name ); } protected void setup( ) { two = new Euro( 2.00 ); } protected void teardown( ) { } public void testamount( ) { assertequals( "two", 2.00, two.getamount( ) ); }... } Uta Dienst 17.11.2003 29

Lebenszyklus eines Testfalls 1. new EuroTest( "testadding" ) 2. setup( ) 3. testadding( ) 4. teardown( ) 5. new EuroTest( "testamount" ) 8. teardown( ) 9. new EuroTest( "testrounding" ) 10. setup( ) 11. testrounding( ) 12. teardown( ) 6. setup( ) 7. testamount( ) Uta Dienst 17.11.2003 30

Testen von Exceptions (1) public class EuroTestextends TestCase {... public void testnegativeamount( ) { try { final double NEGATIVE_AMOUNT = - 2.00; new Euro( NEGATIVE_AMOUNT ); fail( "Should have raised an IllegalArgumentException" ); } catch ( IllegalArgumentException expected ) { } } } Uta Dienst 17.11.2003 31

Testen von Exceptions (2) public class Euro {... public Euro( double euro ) { if ( euro < 0.0 ) { throw new IllegalArgumentException( "Negative amount" ); } cents = Math.round( euro * 100.0 ); } } Uta Dienst 17.11.2003 32

Fazit Testing can show the presence of errors, but never their absence. (Edsger W. Dijkstra) Uta Dienst 17.11.2003 33

Danke für die Aufmerksamkeit! Uta Dienst 17.11.2003 34