Top Banner
Systematisches Testen der Funktionalität von Softwaresystemen 17. Juni 2015
22

Systematisches Testen der Funktionalität von Softwaresystemen · Identifikation von repräsentativen Testfällen (datengetrieben) Zum datengetriebenen Testen einer funktionalen Einheit

Aug 13, 2019

Download

Documents

vophuc
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Systematisches Testen der Funktionalität von Softwaresystemen · Identifikation von repräsentativen Testfällen (datengetrieben) Zum datengetriebenen Testen einer funktionalen Einheit

Systematisches Testen der Funktionalität von Softwaresystemen

17. Juni 2015

Page 2: Systematisches Testen der Funktionalität von Softwaresystemen · Identifikation von repräsentativen Testfällen (datengetrieben) Zum datengetriebenen Testen einer funktionalen Einheit

Taentzer Softwarequalität 2015 182

Überblick Semantische Qualität von Software Teststrategien und –prinzipien

Testgetriebene Softwareentwicklung Welche Arten von Tests sind möglich?

Wann haben wir genug getestet? Codeüberdeckung Datenüberdeckung

Was tun, wenn die Daten fehlen? Mock-Objekte benutzen

Page 3: Systematisches Testen der Funktionalität von Softwaresystemen · Identifikation von repräsentativen Testfällen (datengetrieben) Zum datengetriebenen Testen einer funktionalen Einheit

Taentzer Softwarequalität 2015 183

Semantische Qualität

Die semantische Qualität von Software bezieht sich auf die Erfüllung der Anforderungsspezifikation: Erfüllung der funktionalen Anforderungen:

Funktionalität: Korrektheit, Vollständigkeit, Sicherheit, Fehlertoleranz

Erfüllung der folgenden nichtfunktionalen Anforderungen: Effizienz: Wirtschaftlichkeit, Zeitverhalten,

Verbrauchsverhalten

Page 4: Systematisches Testen der Funktionalität von Softwaresystemen · Identifikation von repräsentativen Testfällen (datengetrieben) Zum datengetriebenen Testen einer funktionalen Einheit

Taentzer Softwarequalität 2015 184

Nachweismöglichkeiten für semantische Qualität

Testen: exemplarische Programmausführungen, um Fehler (Defekte) zu finden

Zusicherungen: Konsistenzeigenschaften, die während der Programmausführung überprüft werden

Verifikation: Nachweis, dass alle Programm-ausführungen bestimmte Eigenschaften erfüllen

Welche Vor- und Nachteile haben diese verschiedenen Nachweis-möglichkeiten?

Page 5: Systematisches Testen der Funktionalität von Softwaresystemen · Identifikation von repräsentativen Testfällen (datengetrieben) Zum datengetriebenen Testen einer funktionalen Einheit

Repräsentative Tests Wir können im Allgemeinen nicht alle möglichen

Eingaben austesten. (Warum?) Deshalb wählen wir eine möglichst aussagekräftige

Menge von Testfällen aus. Ein Testfall ist repräsentativ, wenn er

eine neue Kombination von Eingabedatenkategorien prüft (in Blackbox- und Whitebox-Tests) oder

einen neuen Pfad im Programm durchläuft (nur in Whitebox-Tests).

Testziel: Alle möglichen Kombinationen von Eingabedatenkategorien

und alle Pfade des Programms sind getestet.

Taentzer Softwarequalität 2015 185

Page 6: Systematisches Testen der Funktionalität von Softwaresystemen · Identifikation von repräsentativen Testfällen (datengetrieben) Zum datengetriebenen Testen einer funktionalen Einheit

Identifikation von repräsentativen Testfällen (datengetrieben)

Zum datengetriebenen Testen einer funktionalen Einheit (z.B. Methode) hat sich das folgende Verfahren aus [OB88] bewährt:1. Erstelle ein Modell der Eingabedatenstrukturen:

Welche Datenkategorien gibt es für die Parameter? Welche Objekte der Umgebung müssen berücksichtigt werden?

2. Zerlege den Datenraum jeder Kategorie in Wahlmöglichkeiten3. Wie viele Kombinationen von Wahlmöglichkeiten gibt es?4. Welche Kombinationen sind möglich? Welche Abhängigkeiten gibt

es zwischen den identifizierten Wahlmöglichkeiten?5. Für jede mögliche Kombination von Wahlmöglichkeiten werden

passende Werte gewählt und ein Testfall geschrieben. Dieser enthält auch den Erwartungswert.

Taentzer Softwarequalität 2015 186

Page 7: Systematisches Testen der Funktionalität von Softwaresystemen · Identifikation von repräsentativen Testfällen (datengetrieben) Zum datengetriebenen Testen einer funktionalen Einheit

Beispiel für datengetriebene Tests

Taentzer Softwarequalität 2015 187

[OB88]

Page 8: Systematisches Testen der Funktionalität von Softwaresystemen · Identifikation von repräsentativen Testfällen (datengetrieben) Zum datengetriebenen Testen einer funktionalen Einheit

Beispiel für datengetriebene Tests

Taentzer Softwarequalität 2015 188

[OB88]

Mögliche Testläufe:

Page 9: Systematisches Testen der Funktionalität von Softwaresystemen · Identifikation von repräsentativen Testfällen (datengetrieben) Zum datengetriebenen Testen einer funktionalen Einheit

Beispiel für datengetriebene Tests

Taentzer Softwarequalität 2015 189

[OB88]

Kategorien und Wahlmöglichkeiten:

Page 10: Systematisches Testen der Funktionalität von Softwaresystemen · Identifikation von repräsentativen Testfällen (datengetrieben) Zum datengetriebenen Testen einer funktionalen Einheit

Beispiel für datengetriebene Tests

Taentzer Softwarequalität 2015 190

[OB88]

Eine Kombination von Wahlmöglichkeiten:

Ist diese Kombination möglich?

Page 11: Systematisches Testen der Funktionalität von Softwaresystemen · Identifikation von repräsentativen Testfällen (datengetrieben) Zum datengetriebenen Testen einer funktionalen Einheit

Beispiel für datengetriebene Tests

Taentzer Softwarequalität 2015 191

[OB88]

Wahlmöglichkeiten mit Abhängigkeiten:

Page 12: Systematisches Testen der Funktionalität von Softwaresystemen · Identifikation von repräsentativen Testfällen (datengetrieben) Zum datengetriebenen Testen einer funktionalen Einheit

Beispiel für datengetriebene Tests

Taentzer Softwarequalität 2015 192

[OB88]

Wahlmöglichkeitenmit Abhängigkeiten:

Page 13: Systematisches Testen der Funktionalität von Softwaresystemen · Identifikation von repräsentativen Testfällen (datengetrieben) Zum datengetriebenen Testen einer funktionalen Einheit

Beispiel für datengetriebene Tests

Taentzer Softwarequalität 2015 193

[OB88]

Auszeichnung von Wahlmöglichkeiten, die Fehler produzieren:

Page 14: Systematisches Testen der Funktionalität von Softwaresystemen · Identifikation von repräsentativen Testfällen (datengetrieben) Zum datengetriebenen Testen einer funktionalen Einheit

Beispiel für datengetriebene Tests

Taentzer Softwarequalität 2015 194

[OB88]

Auszeichnung vonWahlmöglichkeiten, die Fehler produzieren:

Diese werden nicht in Kombination mitanderen geprüft.

[single] identifiziertTestfälle, die auchnicht in Kombination geprüft werden müssen.

Page 15: Systematisches Testen der Funktionalität von Softwaresystemen · Identifikation von repräsentativen Testfällen (datengetrieben) Zum datengetriebenen Testen einer funktionalen Einheit

Beispiel für datengetriebene Tests

Taentzer Softwarequalität 2015 195

[OB88]

Ein konkreter Testfallfür die angegebene Kombination:

Ein Testfall pro zu prüfender Kombination

Skaliert diese Testmethode?

Page 16: Systematisches Testen der Funktionalität von Softwaresystemen · Identifikation von repräsentativen Testfällen (datengetrieben) Zum datengetriebenen Testen einer funktionalen Einheit

Einsatz in der testgetriebenen Entwicklung

Vorgehensweise: beschreibe wesentliche Testfälle schon mit den

Anforderungen folge dem vorgestellten Verfahren zur Identifikation von

repräsentativen Testfällen programmiere alle repräsentativen Testfälle führe die Testfälle aus: Fehler, da die Funktionalität noch

fehlt implementiere die Funktionalität führe die Testfälle aus: Code solange ändern, bis alle Tests

durchlaufen führe Refactorings durch

Taentzer Softwarequalität 2015 196

Page 17: Systematisches Testen der Funktionalität von Softwaresystemen · Identifikation von repräsentativen Testfällen (datengetrieben) Zum datengetriebenen Testen einer funktionalen Einheit

Taentzer Softwarequalität 2015 197

Mock-Objekte Was tun, wenn bestimmte Ressourcen (Komponenten)

noch nicht zum Testen zur Verfügung stehen? Beispiele: Datenbanken, Dateien, Server, Softwarekomponenten

Was tun, wenn eine Methode schwer testbar ist, weil Eingabeparameter nur sehr umständlich, eingeschränkt oder gar nicht erstellbar sind? Beispiele: Uhrzeit, GUI, Netzwerkfehler

Mock-Objekte: Attrappen, die echte Objekte simulieren Sie implementieren dieselben Schnittstellen wie die „echten“

Objekte. Sie unterstützen den Komponententest. (Warum?)

weitere Informationen: www.mockobjects.com

Page 18: Systematisches Testen der Funktionalität von Softwaresystemen · Identifikation von repräsentativen Testfällen (datengetrieben) Zum datengetriebenen Testen einer funktionalen Einheit

Taentzer Softwarequalität 2015 198

Beispiel: Mock-Objekte (manuell)<<interface>>

Course

getNextParticipant()

MockCourse

getNextParticipant()

Lecture

getNextParticipant()

public Person getNextParticipant() {//...Person p1 = new Person(„Meier“);//... return p1; }

public PersongetNextParticipant() {

return getManagement().getNextParticipant();}

Vorlesungsverzeichnis

VerzeichnisTest

Page 19: Systematisches Testen der Funktionalität von Softwaresystemen · Identifikation von repräsentativen Testfällen (datengetrieben) Zum datengetriebenen Testen einer funktionalen Einheit

Beispiel: Mock-Objekte mit Mockitoimport static org.mockito.Mockito.*; //…

@Test public void firstCourseTest(){ //arrange Course c=mock(MockCourse.class); when(c.getNextParticipant()).thenReturn(

new Person(“Maier”));//act String result=c.getNextParticipant(); //assert assertEquals(“Meier", result.toString()); }

Taentzer Softwarequalität 2015 199

Page 20: Systematisches Testen der Funktionalität von Softwaresystemen · Identifikation von repräsentativen Testfällen (datengetrieben) Zum datengetriebenen Testen einer funktionalen Einheit

Taentzer Softwarequalität 2015 200

Werkzeuge für das Testen mit Mock-Objekten

Wie wird getestet? Unit-Testing mit Mock-Objekten Mock-Objekt erzeugen Das erwartete Verhalten aufnehmen Mock-Objekt auf Abspielen des Verhaltens schalten

Was kann getestet werden? Aufruf von Methoden (auch die Anzahl und Reihenfolge) Rückgabewerte Werfen von Exceptions Verhalten zwischen mehreren Mock-Objekten

Werkzeuge für Java: EasyMock: http://www.easymock.org Mockito: http://code.google.com/p/mockito

Page 21: Systematisches Testen der Funktionalität von Softwaresystemen · Identifikation von repräsentativen Testfällen (datengetrieben) Zum datengetriebenen Testen einer funktionalen Einheit

Taentzer Softwarequalität 2015 201

Zusammenfassung

Semantische Qualitätsprüfungen: Testen, Zusicherungen, Verifikation

Testen ist eine analytische Qualitätssicherungsmaßnahme. Testen hilft, Fehler zu finden. Es kann nicht die Abwesenheit

von Fehlern zeigen. Zentrale Frage: Wann haben wir genug getestet? Repräsentative Testfälle

decken die möglichen Eingabewerte optimal ab und testen alle möglichen Programmabläufe (in Whitebox-Tests).

Mock-Objekte: falls die echten Daten für das Testen noch fehlen

Page 22: Systematisches Testen der Funktionalität von Softwaresystemen · Identifikation von repräsentativen Testfällen (datengetrieben) Zum datengetriebenen Testen einer funktionalen Einheit

Literatur[Mye95] Glenford J. Myers: Methodisches Testen von Programmen, Oldenbourg Verlag, 1995[Lin05] Johannes Link u. a.: Softwaretests mit JUnit. Techniken der testgetriebenen Entwicklung. 2. Auflage. dpunkt, 2005[OB88] T. Ostrand, M. Balcer: The category-partition method forspecifying and generating functional tests, Communication of theACM, 1988 www.cc.gatech.edu/~harrold/6340/cs6340_fall2009/Readings/ostrandCategoryPartition88.pdf

Taentzer Softwarequalität 2015 202