Klassen von Testfällen. 3. Äquivalenzklassentests. Äquivalenzklassenbildung. Beispiele für Äquivalenzklassen von Eingaben



Ähnliche Dokumente
3. Äquivalenzklassentests. Motivation der Äquivalenzidee typische Findung von Äquivalenzklassen integrierte Grenzwertanalyse abgeleitete Testfälle

Beispielerweiterung JUnitParams (1/4)

Programmierkurs Java

Klassen von Testfällen. 3. Äquivalenzklassentests. Äquivalenzklassenbildung. Beispiele für Äquivalenzklassen von Eingaben

Java: Vererbung. Teil 3: super()

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

Objektorientierte Programmierung

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!.

Einführung in die Programmierung

SEP 114. Design by Contract

Übungen Programmieren 1 Felix Rohrer. Übungen

Software Engineering Klassendiagramme Assoziationen

Einführung in die Programmierung für Wirtschaftsinformatik

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

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

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

Tagesprogramm

Die integrierte Zeiterfassung. Das innovative Softwarekonzept

Überblick. Lineares Suchen

Test-Driven Design: Ein einfaches Beispiel

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

Whitebox-Tests: Allgemeines

Testen mit JUnit. Motivation

Programmiertechnik II

Stellen Sie bitte den Cursor in die Spalte B2 und rufen die Funktion Sverweis auf. Es öffnet sich folgendes Dialogfenster

1. Man schreibe die folgenden Aussagen jeweils in einen normalen Satz um. Zum Beispiel kann man die Aussage:

Objektorientierte Programmierung. Kapitel 12: Interfaces

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

Software Engineering Interaktionsdiagramme

Software Engineering Klassendiagramme weiterführende Konzepte

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

Einführung in die Java- Programmierung

Sichtbarkeit & statische Methoden. Einsatz von Sichtbarkeit Einsatz statischer Methoden programmatische Realisierung 2 Beispielaufgaben

Beispiel: DB-Mock (1/7)

Einführung in die Java- Programmierung

Übungen für Woche 10

Javakurs zu Informatik I. Henning Heitkötter

Folge 18 - Vererbung

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

Einführung in. Logische Schaltungen

Anlegen eines DLRG Accounts

Benutzerverwaltung Business- & Company-Paket

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

Algorithmen und Datenstrukturen

Typumwandlungen bei Referenztypen

Systeme 1. Kapitel 6. Nebenläufigkeit und wechselseitiger Ausschluss

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 22

Inhalt. 1 Einleitung AUTOMATISCHE DATENSICHERUNG AUF EINEN CLOUDSPEICHER

Objektorientierte Programmierung

Algorithmen und Datenstrukturen

Erklärung zum Internet-Bestellschein

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

Große Übung Praktische Informatik 1

Erfahrungen mit Hartz IV- Empfängern

Java Einführung Collections

Abituraufgabe zur Stochastik, Hessen 2009, Grundkurs (TR)

Eine Logikschaltung zur Addition zweier Zahlen

Client-Server-Beziehungen

Professionelle Seminare im Bereich MS-Office

Übungskomplex Felder (1) Eindimensionale Felder Mehrdimensionale Felder

Java Kurs für Anfänger Einheit 5 Methoden

Einführung in die Programmierung

IBIS Professional. z Dokumentation zur Dublettenprüfung

Ohne Fehler geht es nicht Doch wie viele Fehler sind erlaubt?

a n auf Konvergenz. Berechnen der ersten paar Folgenglieder liefert:

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

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

BEISPIELKLAUSUR Softwareentwicklung:

Constraint-Algorithmen in Kürze - Mit der Lösung zur Path-Consistency-Aufgabe 9

Orderarten im Wertpapierhandel

Software-Engineering Software-Management

Der Zwei-Quadrate-Satz von Fermat

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

Drei-Schichten-Architektur. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 16: 3-Schichten-Architektur 1 Fachkonzept - GUI

Zählen von Objekten einer bestimmten Klasse

Fachhochschule Deggendorf Platzziffer:...

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

Software Engineering Klassendiagramme Einführung

Informatik 2 Labor 2 Programmieren in MATLAB Georg Richter

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

5.2 Neue Projekte erstellen

Das große ElterngeldPlus 1x1. Alles über das ElterngeldPlus. Wer kann ElterngeldPlus beantragen? ElterngeldPlus verstehen ein paar einleitende Fakten

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

Suche schlecht beschriftete Bilder mit Eigenen Abfragen

2A Basistechniken: Weitere Aufgaben

Tutorial: Homogenitätstest

Fortgeschrittenes Programmieren mit Java. Test Driven Development

Informationssystemanalyse Problemstellung 2 1. Trotz aller Methoden, Techniken usw. zeigen Untersuchungen sehr negative Ergebnisse:

Das Leitbild vom Verein WIR

1 Mathematische Grundlagen

AUTOMATISCHE -ARCHIVIERUNG. 10/07/28 BMD Systemhaus GmbH, Steyr Vervielfältigung bedarf der ausdrücklichen Genehmigung durch BMD!

Programmieren. 10. Tutorium 4./ 5. Übungsblatt Referenzen

Software Engineering in der Praxis

5 DATEN Variablen. Variablen können beliebige Werte zugewiesen und im Gegensatz zu

Vorkurs C++ Programmierung

Kurzanleitung fu r Clubbeauftragte zur Pflege der Mitgliederdaten im Mitgliederbereich

Verarbeitung der Eingangsmeldungen in einem Callcenter

DB2 Kurzeinführung (Windows)

1 Vom Problem zum Programm

Die reellen Lösungen der kubischen Gleichung

Transkript:

3. tests Motivation der Äquivalenzidee typische Findung von integrierte Grenzwertanalyse abgeleitete Testfälle Klassen von Testfällen In der Literatur gibt es recht unterschiedlich detaillierte Klassifizierungen von Testfällen, eine erste grobe Einteilungsmöglichkeit ist : Datenbezogene Testfälle: Ausgehend von der Spezifikation des zu untersuchenden Objekts werden verschiedene Eingaben überlegt, deren gewünschtes Resultat aus der Spezifikation abzuleiten ist Ablaufbezogene Testfälle: Es wird die Struktur des zu untersuchenden Programms analysiert und versucht, möglichst alle Ablaufalternativen (if, while) durchzuspielen Software-Qualität Stephan Kleuker 80 Software-Qualität Stephan Kleuker 81 bildung bildung zerlegt Menge in disjunkte Teilmengen jeder Repräsentant einer Teilmenge hat das gleiche Verhalten bzgl. einer vorgegebenen Operation Beispiel: Restklassen (modulox), werden zwei beliebige Repräsentanten aus Restklassen addiert, liegt das Ergebnis immer in der selben Restklasse Übertragungsidee auf Tests: Eingaben werden in Klassen unterteilt, die durch die Ausführung des zu testenden Systems zu gleichartigen Ergebnissen führen Beispiele für von Eingaben erlaubte Eingabe: 1 <= Wert <= 99 (Wert sei ganzzahlig) eine gültige Äquivalenzklasse: 1 <= Wert <= 99 zwei ungültige : Wert < 1, Wert > 99 erlaubte Eingabe in einer Textliste: für ein Auto können zwischen einem und sechs Besitzer eingetragen werden eine gültige Äquivalenzklasse: ein bis sechs Besitzer zwei ungültige : kein Besitzer, mehr als sechs Besitzer erlaubte Eingabe: Instrumente Klavier, Geige, Orgel, Pauke vier gültige : Klavier, Geige, Orgel, Pauke eine ungültige Äquivalenzklasse: alles andere, z.b. Zimbeln Software-Qualität Stephan Kleuker 82 Software-Qualität Stephan Kleuker 83

Regeln zur Bildung von man muss mögliche Eingaben kennen (aus Spezifikation) für einfache Zahlenparameter meist einfach: Intervall mit gültigen Werten eventuell Intervall mit zu kleinen und Intervall mit zu großen Werten (wenn z. B. alle interlaubt, gibt es nur eine Äquivalenzklasse, etwas schwieriger bei double) explizit eine Menge von Werten vorgegeben: jeder Wert eine Äquivalenzklasse dar andere Eingaben möglich: zusätzliche Äquivalenzklasse falls nach Analyse der Spezifikation Grund zur Annahme besteht, dass Elemente einer Äquivalenzklasse unterschiedlich behandelt werden, ist die Klasse aufzuspalten Beispiel (1/5) Spezifikation: Als Beispiel dient eine Methode, genauer ein Konstruktor, zur Verwaltung von Studierendendaten, der ein Name, ein Geburtsjahr und ein Fachbereich übergeben werden. Dabei darf das Namensfeld nicht leer sein, das Geburtsjahr muss zwischen 1900 und 2000 liegen und es können nur die Fachbereiche, FBBWL und FBPOL aus einer Aufzählung übergeben werden. Software-Qualität Stephan Kleuker 84 Software-Qualität Stephan Kleuker 85 Beispiel (2/5) Testfallerzeugung aus : Eingabe Name Geburtsjahr Fachbereich gültige Ä1) nicht leer Ä4) 1900< = Geburtsjahr <= 2000 Ä6) Ä7) FBBWL Ä8) FBPOL ungültige Ä2) leer Ä3) Geburtsjahr < 1900 Ä5) Geburtsjahr > 2000 Die sind eindeutig zu nummerieren. Für die Erzeugung von Testfällen aus den sind zwei Regeln zu beachten: gültige : möglichst viele Klassen in einem Test kombinieren ungültige : Auswahl eines Testdatums aus einer ungültigen Äquivalenzklasse Kombination mit Werten, die ausschließlich aus gültigen entnommen sind. Grund: für alle ungültigen Eingabewerte muss eine Fehlerbehandlung existieren Software-Qualität Stephan Kleuker 86 Software-Qualität Stephan Kleuker 87

Beispiel (3/5) Testfälle nach einer analyse: (jeder Klasse wird [mindestens] einmal getestet, die Testanzahl soll möglichst gering sein) geprüfte Testnummer Name Geburtsjahr Fachbereich Ergebnis 1 Ä1 Ä4 Ä6 Mei 1987 2 (Ä1) (Ä4) Ä7 Max 1989 FBBWL 3 (Ä1) (Ä4) Ä8 Schulz 1985 FBPOL 1988 Meier 1892 Meier 2006 Abbruch Abbruch Abbruch Software-Qualität Stephan Kleuker 88 4 Ä2 5 Ä3 6 Ä5 Grenzwertanalyse Viele Software-Fehler sind auf Schwierigkeiten in Grenzbereichen der zurück zu führen (z.b. Extremwert nicht berücksichtigt, Array um ein Feld zu klein) Untersuchung von um die Untersuchung der Grenzen ergänzt Beispiel: 1<=Wert<=99 (wobei Wert ganzzahlig ist) Äquivalenzklasse Int-Wert<1: obere Grenze Wert=0 (untere Grenze spielt hier keine Rolle) Äquivalenzklasse Int-Wert>99: untere Grenze Wert=100 (obere Grenze spielt keine Rolle) Äquivalenzklasse 1<=Int-Wert<=99 : untere Grenze Wert=1 und obere Grenze Wert=99 Grenzfallbetrachtung geht direkt in die Testfallerzeugung ein (es gibt Ansätze, bei denen zusätzlich ein Fall mit einem Wert aus der Mitte der Äquivalenzklasse genommen wird) Software-Qualität Stephan Kleuker 89 Beispiel (4/5) Testfälle nach einer analyse und Grenzwertanalyse Anmerkung: Testfallanzahl erhöht sich meist geprüfte Testnummer Name Geburtsjahr Fachbereich Ergebnis 1 Ä1 Ä4U Ä6 Mei 1900 2 (Ä1) Ä4O Ä7 Max 2000 FBBWL 3 (Ä1) (Ä4) Ä8 Schulz 1985 FBPOL 1988 Ä3O Meier 1899 Abbruch Abbruch Ä5U Meier 2001 Abbruch Software-Qualität Stephan Kleuker 90 4 Ä2 5 6 Beispiel (5/5) mögliche Übersetzung nach JUnit (Ausschnitt) public class ImmatrikulationTest {... public void test1(){ try{ new Immatrikulation("Mei",1900,Bereich.); catch(immatrikulationsexception e){ Assert.fail("falsche Exception"); public void test4(){ try{ new Immatrikulation("",1988,Bereich.); Assert.fail("fehlende Exception"); catch(immatrikulationsexception e){... Software-Qualität Stephan Kleuker 91

zweites Beispiel (1/4) - Spezifikation Spezifikationsausschnitt: Zu entwickeln ist eine Klasse Mitarbeiter, wobei jedes Mitarbeiterobjekt (Anf1) einen änderbaren Nachnamen mit mindestens zwei Zeichen hat (Anf2) eine Informationssammlung mit maximal vier Fachgebieten hat, die ergänzt und gelöscht werden können Aufbau einer Beziehung zwischen Methoden und Anforderungen Anf1 Anf2 Mitarbeiter(String, String) setnachname(string) getnachname() addfachgebiet(fachgebiet) removefachgebiet() Software-Qualität Stephan Kleuker 92 zweites Beispiel (2/4) - setnachname(string nachname) mit Grenzwerten Ä1: String mit mindestens zwei Zeichen (gültig) Ä2: String mit einem Zeichen (ungültig) Ä3: null-referenz(ungültig) abgeleitet aus OO-Erfahrung Testnummer geprüft nachname Ergebnis 1 Ä1 Me geändert 2 Ä2U X Abbruch null Abbruch Software-Qualität Stephan Kleuker 93 3 Ä3 zweites Beispiel (3/4) - Tests @Test public void testsetnachname1(){ Mitarbeiter m = new Mitarbeiter("Ute","Mai"); m.setnachname("me"); Assert.assertTrue(m.getNachname().equals("Me")); @Test(expected=IllegalArgumentException.class) public void testsetnachname2(){ Mitarbeiter m = new Mitarbeiter("Ute","Mai"); m.setnachname("x"); @Test(expected=IllegalArgumentException.class) public void testsetnachname3(){ Mitarbeiter m = new Mitarbeiter("Ute","Mai"); m.setnachname(null); Software-Qualität Stephan Kleuker 94 zweites Beispiel (4/4) - Ein-/Ausgabeäquivalenz getnachname() Methode ohne Parameter generell bisher Eingabeäquivalenzklassen betrachtet; gibt auch Ausgabeäquivalenzklassen im Beispiel nur eine Klasse, da beliebige Strings Ergebnis (null nicht möglich) @Test public void testgetnachname(){ Mitarbeiter m = new Mitarbeiter("Ute","Mai"); Assert.assertEquals("Mai", m.getnachname()); genauer: es gibt Eingabeparameter im Testszenario; Werte der Exemplarvariablen Software-Qualität Stephan Kleuker 95

bildung und Objektorientierung bildung ist ein zentrales Verfahren, um systematisch Tests aufzubauen für Methoden von Objekten spielt neben Ein-und Ausgaben der interne Zustand häufig eine wichtige Rolle (erst wenn Methode x ausführt wurde, dann kann Methode y sinnvoll ausgeführt werden) Konsequenterweise muss man sich also mit dem Ein- /Ausgabeverhalten pro möglichem Objektzustand beschäftigen (was noch extrem aufwändiger sein kann) das bisher vorgestellte Verfahren kann in der reinen Form nur für gedächtnislose Objekte genutzt werden Software-Qualität Stephan Kleuker 96 und Objekte (1/5) Spezifikation: In einem Bestellsystem wird für jeden Kunden im Objekt einer Klasse Zuverlaessigkeitfestgehalten, wie er bezüglich seines Bezahlverhaltens eingestuft wird. Diese Einstufung wird durch die folgende Aufzählung beschrieben. public enum Bezahlstatus { STANDARD, GEPRUEFT, KRITISCH; Die Klasse Zuverlaessigkeitsoll eine Methode anbieten, mit der geprüft werden soll, ob eine Bestellung über eine bestimmte Summe ohne eine weitere Liquiditätsprüfung erlaubt werden soll. Die Bestellung soll für geprüfte Kunden immer und für kritische Kunden nie ohne zusätzliche Prüfung möglich sein. Für sonstige Kunden muss eine Prüfung ab einer Bestellstumme von 500 erfolgen. Software-Qualität Stephan Kleuker 97 und Objekte (2/5) public class Zuverlaessigkeit { // zu testende Klasse private Bezahlstatus status; public void setstatus(bezahlstatus status){ this.status=status; public boolean einkaufssummepruefen(int wert){ switch(status){ case GEPRUEFT:{ return true; case STANDARD:{ return wert<500; return false; Software-Qualität Stephan Kleuker 98 und Objekte (3/5) erste Überlegung: nur Parameter wertzu testen, Ä1:[wert<500] und Ä2:[wert>=500] (zwei Tests) zweite Überlegung: Objektzustand als weiteren Parameter berücksichtigen; ergibt drei weitere Klassen Ä3, Ä4, Ä5: Testnummer geprüfte wert status Ergebnis 1 Ä1O Ä3 499 STANDARD true 2 Ä2U Ä4 500 GEPRUEFT true (Ä2U) Ä5 499 KRITISCH false Software-Qualität Stephan Kleuker 99 3

und Objekte (4/5) - JUnit 3.8 import junit.framework.testcase; public class ZuverlaessigkeitTest extends TestCase { private Zuverlaessigkeit zvl; protected void setup() throws Exception { super.setup(); zvl= new Zuverlaessigkeit(); public void testeinkaufsummepruefen1(){ zvl.setstatus(bezahlstatus.standard); asserttrue(zvl.einkaufssummepruefen(499)); und Objekte (5/5) public void testeinkaufsummepruefen2(){ zvl.setstatus(bezahlstatus.geprueft); asserttrue(zvl.einkaufssummepruefen(500)); public void testeinkaufsummepruefen3(){ zvl.setstatus(bezahlstatus.kritisch); asserttrue(!zvl.einkaufssummepruefen(499)); Anmerkungen zu JUnit 3.8: Testklasse muss von TestCase erben Namen der Tests müssen mit testbeginnen Software-Qualität Stephan Kleuker 100 Software-Qualität Stephan Kleuker 101 Beispiel weiter gedacht bisher für Variablen (Parameter + Exemplarklassen individuell) [, ist Testpflicht] konsequent müssen Kombinationen von betrachtet werden Variante 1: Alle Kombinationen betrachten (leider nur selten machbar) (d. h. sechs Tests) Variante 2 (intensives [fehlerträchtiges?] Studium der Spezifikation): Neue durch Kombination von alten betrachten: [status==geprueft] [status==standard&& wert==499] [status==standard&& wert==500] (fehlt bisher) [status==kritisch] Software-Qualität Stephan Kleuker 102 Schwierige bildung (1/4) Spezifikation: Schreibe eine Methode max(), der drei Integer-Werte übergeben werden, die den größten Wert dieser Werte zurück gibt public class Maxi { public static int max(int x, int y, int z){ int max = 0; if (x>z) max = x; if (y>x) max = y; if (z>y) max = z; return max; nullterklassenansatz: jeder Parameter darf beliebige Werte annehmen, jeweils eine Klasse für x, y, z erster Klassenansatz: es gibt keine Ausnahmefälle, also drei Ergebnisse : Maximum an erster, zweiter oder dritter Stelle Software-Qualität Stephan Kleuker 103

Schwierige bildung (2/4) public class MaxiTest { public void testerstesmax(){ Assert.assertTrue("Maximum an erster Stelle", 7 == Maxi.max(7,5,4)); public void testzweitesmax(){ Assert.assertTrue("Maximum an zweiter Stelle", 7 == Maxi.max(5,7,4)); public void testdrittesmax(){ Assert.assertTrue("Maximum an dritter Stelle", 7 == Maxi.max(4,5,7)); Schwierige bildung (3/5) Alle Tests laufen erfolgreich! allerdings war die Klassenbildung zu ungenau, nächster Versuch mit den Klassen (Permutationen der Reihenfolge): x>=y>=z x>=z>=y z>=x>=y z>=y>=x y>=x>=z y>=z>=x [Frage: sind dies??] Software-Qualität Stephan Kleuker 104 Software-Qualität Stephan Kleuker 105 Schwierige bildung (4/5) sechs Testfälle, Ausschnitt: public void testxyz(){ Assert.assertTrue("X>=Y>=Z", 7 == Maxi.max(7,5,4)); public void testxzy(){ Assert.assertTrue("X>=Z>=Y", 7 == Maxi.max(7,4,5)); public void testyxz(){ Assert.assertTrue("Y>=X>=Z", 7 == Maxi.max(5,7,4)); Der Fall X>=Z>=Y offenbart, dass das Verfahren nicht funktioniert Allerdings ist die wahl nicht sauber Schwierige bildung (5/5) Saubere sind: x>y=z y=z>x y>x=z x=z>y z>y=x y=x>z z>y>x z>x>y y>z>x y>x>z x>z>y x>y>z x=y=z Bei Grenzwertanalyse muss Übergang zwischen untersuchten Klassen betrachtet werden, d.h. wenn zwei oder drei Argumente gleich sind (letzter Fall liefert auch Fehler) Aus Spezifikation nicht ableitbar, ggfs. aus der Erfahrung mit Mathematik zu ergänzen, ist Untersuchung negativer Zahlen Software-Qualität Stephan Kleuker 106 Software-Qualität Stephan Kleuker 107

Fazit zur analyse zentrales Hilfsmittel bei der Testerstellung; können auf Programmcodeebene, aber auch bei Abnahmen genutzt werden Grundregel: Zu jedem Stück Spezifikation sollte man Tests mit schreiben können typisch ist, dass nicht alle Kombinationen von elementaren betrachtet werden können Ansatz: Betrachte mehrere Variablen zusammen; trotzdem kombinatorische Explosion möglich hilfreich wäre ein Maß, wie weit man beim Testen bereits ist ( Überdeckungsmaße) Software-Qualität Stephan Kleuker 108