Software Engineering in der Praxis



Ähnliche Dokumente
Funktionales Testen. Lehrstuhl für Software Engineering Friedrich-Alexander-Universität Erlangen-Nürnberg

Software Engineering in der Praxis

Programmiertechnik II

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

Fortgeschrittenes Programmieren mit Java. Test Driven Development

Test-Driven Design: Ein einfaches Beispiel

Programmierkurs Java

Übung Grundlagen der Programmierung. Übung 03: Schleifen. Testplan Testergebnisse

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

SEP 114. Design by Contract

Testphase. Das Testen

Testen mit JUnit. Motivation

Unit Tests. Programmiermethodik. Eva Zangerle Universität Innsbruck

Einführung in die Informatik Tools

Software-Engineering Software-Management

Testen Prinzipien und Methoden

Java: Vererbung. Teil 3: super()

Unit Tests und Fehlersuche

Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = Euro ergeben.

Das Test-Framework JUnit ETIS SS04

Unit Testing mit JUnit. Dr. Andreas Schroeder

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

Whitebox-Tests: Allgemeines

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

Aufgabenblatt Nr. 5 Generizität und TicTacToe

Folge 18 - Vererbung

Integrierte und automatisierte GUI-Tests in Java

Internet Explorer Version 6

Softwaretechnik 1 Tutorium

Tutorial: Homogenitätstest

Testen von graphischen Benutzeroberflächen. 26. Juni 2013

Version 0.3. Installation von MinGW und Eclipse CDT

Testen von graphischen Benutzeroberflächen. 24. Juni 2015

Wurzeln als Potenzen mit gebrochenen Exponenten. Vorkurs, Mathematik

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

Es sollte die MS-DOS Eingabeaufforderung starten. Geben Sie nun den Befehl javac ein.

Tagesprogramm

Algorithmische Kryptographie

Einführung in die Programmierung (EPR)

5. Abstrakte Klassen. Beispiel (3) Abstrakte Klasse. Beispiel (2) Angenommen, wir wollen die folgende Klassenhierarchie implementieren:

Software Engineering. Zur Architektur der Applikation Data Repository. Franz-Josef Elmer, Universität Basel, HS 2015

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

Teilnahme am Apple ios Developer Program

Programmieren in Java

1. Legen Sie die mitgelieferte CD in ihr Laufwerk des PC, diese startet dann automatisch mit folgenden Fenster, klicken Sie nun English an.

Test-Strategien. Grundsätzliches Blackbox-Testen Whitebox-Testen Graybox-Testen Ablauf von Tests Zusammenfassung. HS Mannheim

Probeklausur Softwareengineering SS 15

ACDSee Pro 2. ACDSee Pro 2 Tutorials: Übertragung von Fotos (+ Datenbank) auf einen anderen Computer. Über Metadaten und die Datenbank

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

Anwenden eines Service Packs auf eine Workstation

Qualitätsmanagement im Projekt

Handbuch Amos Ersteller: EWERK MUS GmbH Erstellungsdatum:

SCHRITT 1: Öffnen des Bildes und Auswahl der Option»Drucken«im Menü»Datei«...2. SCHRITT 2: Angeben des Papierformat im Dialog»Drucklayout«...

5. Abstrakte Klassen

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

Fragebogen: Abschlussbefragung

Zeichen bei Zahlen entschlüsseln

Registrierung Ihres Fachbesucher Tickets

Anleitung zur Online-Schulung

Installation OMNIKEY 3121 USB

Installation einer C++ Entwicklungsumgebung unter Windows --- TDM-GCC und Eclipse installieren

FB Informatik. Fehler. Testplan

Wie oft soll ich essen?

Übung zur Vorlesung Einführung in Software Engineering

Installation des Authorware Webplayers für den Internet Explorer unter Windows Vista

Abacus Formula Compiler (AFC)

teischl.com Software Design & Services e.u. office@teischl.com

Software Engineering in der Praxis

Swp08-6 Verantwortliche: Yundensuren, Baigalmaa. Testkonzept

Übung - Datensicherung und Wiederherstellung in Windows 7

meinpflegedienst.com Release Notes 3.4

Requirements Engineering für IT Systeme

Starthilfe für C# Inhaltsverzeichnis. Medien- und Kommunikationsinformatik (B.Sc.) Alexander Paharukov. Informatik 3 Praktikum

Upgrade von Starke Praxis

Some Software Engineering Principles

Kurs 1613 Einführung in die imperative Programmierung

Über den Link erreichen Sie unsere Einstiegsseite:

Vorkurs Informatik WiSe 15/16

Sichere Anleitung Zertifikate / Schlüssel für Kunden der Sparkasse Germersheim-Kandel. Sichere . der

Digital signierte Rechnungen mit ProSaldo.net

Fachdidaktik der Informatik Jörg Depner, Kathrin Gaißer

Eigene Formatvorlagen

Mobile-Szenario in der Integrationskomponente einrichten

Applet Firewall und Freigabe der Objekte

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

Vorlagen im Online Banking. Anlegen von Vorlagen

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

Anmeldung und Zugang zum Webinar des Deutschen Bibliotheksverbandes e.v. (dbv)

Übung - Datensicherung und Wiederherstellung in Windows Vista

Benutzerhandbuch MedHQ-App

Hauptseminar Automotive Software Engineering Testen, Rapid Prototyping und x in the loop

Software Engineering II (IB) Testen von Software / Modultests

Autorisierung von ArcGIS 10.3 for Server mit Internetverbindung

Einführung in die Programmierung

Programmierung von Konturzügen aus Geraden und Kreisbögen

So geht s Schritt-für-Schritt-Anleitung

Transkript:

Software Engineering in der Praxis Praktische Übungen

Dirk Wischermann Marc Spisländer Lehrstuhl für Software Engineering Friedrich-Alexander-Universität Erlangen-Nürnberg 18. Dezember 2006

Inhalt Nachlese Testen Ablauf von Tests Testarten JUnit

Nachlese Software-Metriken und Bugpatterns Allgemeine Betrachtungen zum Messen Zweck der Software-Messung Together-Metriken: LOC Halstead-Metriken McCabe-Metrik Fehlersuche mit FindBugs

Testen von Code Definition Ausführung eines Programms in einer definierten Umgebung, um: Fehler zu finden (Programmierfehler, algorithmische Fehler, Nichterfüllung der Spezifikation,... ) Zuverlässigkeitskennwerte zu ermitteln Tests garantieren keine Fehlerfreiheit!

Testen von Code Definition Ausführung eines Programms in einer definierten Umgebung, um: Fehler zu finden (Programmierfehler, algorithmische Fehler, Nichterfüllung der Spezifikation,... ) Zuverlässigkeitskennwerte zu ermitteln Tests garantieren keine Fehlerfreiheit!

Ablauf von Tests 1. Testplanung (Testkriterien, Personal, Budget,... ) 2. Testerstellung: Auswahl der Eingabedaten (Testdaten) und eines Prüfungsverfahrens für die Ausgabedaten 3. Testdurchführung: Ausführung des Programms mit ausgewählten Eingabedaten 4. Testauswertung: Vergleich der Ausgabedaten mit den erwarteten Ergebnissen

Ablauf von Tests 1. Testplanung (Testkriterien, Personal, Budget,... ) 2. Testerstellung: Auswahl der Eingabedaten (Testdaten) und eines Prüfungsverfahrens für die Ausgabedaten 3. Testdurchführung: Ausführung des Programms mit ausgewählten Eingabedaten 4. Testauswertung: Vergleich der Ausgabedaten mit den erwarteten Ergebnissen

Ablauf von Tests 1. Testplanung (Testkriterien, Personal, Budget,... ) 2. Testerstellung: Auswahl der Eingabedaten (Testdaten) und eines Prüfungsverfahrens für die Ausgabedaten 3. Testdurchführung: Ausführung des Programms mit ausgewählten Eingabedaten 4. Testauswertung: Vergleich der Ausgabedaten mit den erwarteten Ergebnissen

Ablauf von Tests 1. Testplanung (Testkriterien, Personal, Budget,... ) 2. Testerstellung: Auswahl der Eingabedaten (Testdaten) und eines Prüfungsverfahrens für die Ausgabedaten 3. Testdurchführung: Ausführung des Programms mit ausgewählten Eingabedaten 4. Testauswertung: Vergleich der Ausgabedaten mit den erwarteten Ergebnissen

Testarten Tests können in zwei Kategorien eingeteilt werden: Black-Box-Tests White-Box-Tests Testdaten werden aus der Spezifikation abgeleitet. Ziel: Übereinstimmung mit Spezifikation prüfen Testdaten werden aus dem Quellcode abgeleitet. Ziel: Auswirkungen aller Code-Abschnitte identifizieren

Testarten Tests können in zwei Kategorien eingeteilt werden: Black-Box-Tests White-Box-Tests Testdaten werden aus der Spezifikation abgeleitet. Ziel: Übereinstimmung mit Spezifikation prüfen Testdaten werden aus dem Quellcode abgeleitet. Ziel: Auswirkungen aller Code-Abschnitte identifizieren

Black-Box-Tests Werden auch funktionale Tests genannt Tests können bereits vor der Implementation definiert werden. Möglichkeiten, Testdaten abzuleiten: Äquivalenzklassentest Grenzwerttests Error Guessing Zufallsdaten

Black-Box-Tests Werden auch funktionale Tests genannt Tests können bereits vor der Implementation definiert werden. Möglichkeiten, Testdaten abzuleiten: Äquivalenzklassentest Grenzwerttests Error Guessing Zufallsdaten

Black-Box-Tests Werden auch funktionale Tests genannt Tests können bereits vor der Implementation definiert werden. Möglichkeiten, Testdaten abzuleiten: Äquivalenzklassentest Grenzwerttests Error Guessing Zufallsdaten

Black-Box-Tests Äquivalenzklassentest Teile die Eingabemenge in Klassen, so dass alle Eingaben einer Klasse»ähnliches Ausgabeverhalten hervorrufen«sollen. Wähle dann aus jeder Klasse Repräsentanten als Testdaten. Grenzwerttests Wähle Testdaten am Rande der Äquivalenzklassen (Voraussetzung: Es ex. Ordnung auf der Menge der Eingabedaten). Error Guessing Spezifikationsbezogener Fehlererwartungstest (aus Erfahrung) Zufallsdaten Wähle Testdaten nach statistischen Verteilungen.

Black-Box-Tests Äquivalenzklassentest Teile die Eingabemenge in Klassen, so dass alle Eingaben einer Klasse»ähnliches Ausgabeverhalten hervorrufen«sollen. Wähle dann aus jeder Klasse Repräsentanten als Testdaten. Grenzwerttests Wähle Testdaten am Rande der Äquivalenzklassen (Voraussetzung: Es ex. Ordnung auf der Menge der Eingabedaten). Error Guessing Spezifikationsbezogener Fehlererwartungstest (aus Erfahrung) Zufallsdaten Wähle Testdaten nach statistischen Verteilungen.

Black-Box-Tests Äquivalenzklassentest Teile die Eingabemenge in Klassen, so dass alle Eingaben einer Klasse»ähnliches Ausgabeverhalten hervorrufen«sollen. Wähle dann aus jeder Klasse Repräsentanten als Testdaten. Grenzwerttests Wähle Testdaten am Rande der Äquivalenzklassen (Voraussetzung: Es ex. Ordnung auf der Menge der Eingabedaten). Error Guessing Spezifikationsbezogener Fehlererwartungstest (aus Erfahrung) Zufallsdaten Wähle Testdaten nach statistischen Verteilungen.

Black-Box-Tests Äquivalenzklassentest Teile die Eingabemenge in Klassen, so dass alle Eingaben einer Klasse»ähnliches Ausgabeverhalten hervorrufen«sollen. Wähle dann aus jeder Klasse Repräsentanten als Testdaten. Grenzwerttests Wähle Testdaten am Rande der Äquivalenzklassen (Voraussetzung: Es ex. Ordnung auf der Menge der Eingabedaten). Error Guessing Spezifikationsbezogener Fehlererwartungstest (aus Erfahrung) Zufallsdaten Wähle Testdaten nach statistischen Verteilungen.

White-Box-Tests Werden auch strukturelle Tests genannt Kriterien, für die Erzeugung der Testdaten: Kontrollflussabdeckung (Pfadüberdeckung, Anweisungsüberdeckung, Verzweigungsüberdeckung) Datenflussabdeckung Tests können erst nach der Implementation definiert werden.

White-Box-Tests Werden auch strukturelle Tests genannt Kriterien, für die Erzeugung der Testdaten: Kontrollflussabdeckung (Pfadüberdeckung, Anweisungsüberdeckung, Verzweigungsüberdeckung) Datenflussabdeckung Tests können erst nach der Implementation definiert werden.

White-Box-Tests Werden auch strukturelle Tests genannt Kriterien, für die Erzeugung der Testdaten: Kontrollflussabdeckung (Pfadüberdeckung, Anweisungsüberdeckung, Verzweigungsüberdeckung) Datenflussabdeckung Tests können erst nach der Implementation definiert werden.

White-Box-Tests Werden auch strukturelle Tests genannt Kriterien, für die Erzeugung der Testdaten: Kontrollflussabdeckung (Pfadüberdeckung, Anweisungsüberdeckung, Verzweigungsüberdeckung) Datenflussabdeckung Tests können erst nach der Implementation definiert werden.

JUnit als Framework für funktionale Tests Erhältlich unter www.junit.org Ziele: Normierung der Testimplementierung, damit Vereinfachung der Testdurchführung Auf Java beschränkt

JUnit Grobe Vorgehensweise 1. Annotiere Methoden, die Tests durchführen, mit @Test. 2. Formuliere innerhalb dieser Testmethoden die Bedingung für erfolgreiches Testergebnis. 3. Die JUnit-Engine findet per Reflections die annotierten Testmethoden, führt sie aus und zeigt an, ob sie erfolgreich waren oder nicht.

JUnit Grobe Vorgehensweise 1. Annotiere Methoden, die Tests durchführen, mit @Test. 2. Formuliere innerhalb dieser Testmethoden die Bedingung für erfolgreiches Testergebnis. 3. Die JUnit-Engine findet per Reflections die annotierten Testmethoden, führt sie aus und zeigt an, ob sie erfolgreich waren oder nicht.

JUnit Grobe Vorgehensweise 1. Annotiere Methoden, die Tests durchführen, mit @Test. 2. Formuliere innerhalb dieser Testmethoden die Bedingung für erfolgreiches Testergebnis. 3. Die JUnit-Engine findet per Reflections die annotierten Testmethoden, führt sie aus und zeigt an, ob sie erfolgreich waren oder nicht.

JUnit Beispiel Klasse Calculator public double sum(double a, double b) public double diff(double a, double b) public double mult(double a, double b) public double div(double a, double b) public void setmem(double a) public double getmem() public void clearmem()

JUnit Beispiel Testklasse CalculatorTest import s t a t i c org. j u n i t. Assert. ; import org. j u n i t. A f t e r ; import org. j u n i t. Before ; import org. j u n i t. Test ; public class C a l c u l a t o r T e s t { private C a l c u l a t o r c a l c u l a t o r ; @Before public void setup ( ) { c a l c u l a t o r = new C a l c u l a t o r ( ) ; } @Test public void testsum ( ) { double a = 5.6, b = 6. 5 ; assertequals ( 1 2. 1, c a l c u l a t o r. sum( a, b ), 0. 1 ) ; }

JUnit Beispiel Testklasse CalculatorTest (Fortsetzung) @Test ( expected = IllegalArgumentException. class ) public void t e s t D i v ( ) { double a = 3. 0 ; double b = 0. 0 ; } c a l c u l a t o r. d i v ( a, b ) ;

Tests starten Aus der Kommandozeile mit: java org.junit.runner.junitcore CalculatorTest Aus der IDE: In Eclipse, das Projekt starten mit»run As.../JUnit Test«

Weiteres Beispiel: Spezifikation testen Abstrakter Datentyp Stack Operationen new : Stack empty : Stack Boolean push : Stack Element Stack pop : Stack Element Stack Axiome: s Stack e Element: empty(new) = true empty(push(s, e)) = false pop(push(s, e)) = (s, e)

Weiteres Beispiel: Spezifikation testen Abstrakter Datentyp Stack Operationen new : Stack empty : Stack Boolean push : Stack Element Stack pop : Stack Element Stack Axiome: s Stack e Element: empty(new) = true empty(push(s, e)) = false pop(push(s, e)) = (s, e)

Spezifikation mit JUnit testen Vorgehen Teste Stack-Implementationen, indem getestet wird, ob die Stack-Axiome erfüllt werden.

JUnit Online-Ressourcen Primärquelle: www.junit.org Javadocs: junit.sourceforge.net/javadoc_40/index.html