systematisches testen der funktionalität von softwaresystemen · identifikation von...

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

Upload: vophuc

Post on 13-Aug-2019

215 views

Category:

Documents


0 download

TRANSCRIPT

Systematisches Testen der Funktionalität von Softwaresystemen

17. Juni 2015

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

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

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?

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

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

Beispiel für datengetriebene Tests

Taentzer Softwarequalität 2015 187

[OB88]

Beispiel für datengetriebene Tests

Taentzer Softwarequalität 2015 188

[OB88]

Mögliche Testläufe:

Beispiel für datengetriebene Tests

Taentzer Softwarequalität 2015 189

[OB88]

Kategorien und Wahlmöglichkeiten:

Beispiel für datengetriebene Tests

Taentzer Softwarequalität 2015 190

[OB88]

Eine Kombination von Wahlmöglichkeiten:

Ist diese Kombination möglich?

Beispiel für datengetriebene Tests

Taentzer Softwarequalität 2015 191

[OB88]

Wahlmöglichkeiten mit Abhängigkeiten:

Beispiel für datengetriebene Tests

Taentzer Softwarequalität 2015 192

[OB88]

Wahlmöglichkeitenmit Abhängigkeiten:

Beispiel für datengetriebene Tests

Taentzer Softwarequalität 2015 193

[OB88]

Auszeichnung von Wahlmöglichkeiten, die Fehler produzieren:

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.

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?

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

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

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

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

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

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

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