Softwarequalitätssicherung Seminarvortrag Peter Winkelhane 1
Agenda Motivation Taxonomie zur Einordnung von Verfahren im Bereich kontraktbasiertem Testen Drei kontraktbasierte Verfahren Vergleich der drei Verfahren Zusammenfassung 2
Motivation (1/2) Was ist modellbasiertes Testen? Tests Testfall Spezifikation generiert Implementierung Struktur Verhalten wird getestet gegen 3
Motivation (2/2) Was ist kontraktbasiertes Testen? Anforderung Gewährleistung Kontrakt 4
Taxonomie (1/2) 5
Taxonomie (2/2) Was müssen modellbasierte Testansätze leisten? Testfälle aus Modell erzeugen Testorakel liefern für Untersuchung der Ausgabe Testausführung in Testumgebung 6
Model Driven Unit Testing (1/6) Wie sieht der Kontrakt aus? Visuelle Kontrakte Spezifiziert einen Kontrakt durch ein Paar von UML- Kompositionsstrukturdiagrammen für Pre-/ Postcondition Abb. Visueller Kontrakt der Methode cartadd() Quelle: Paper Model Driven Unit Testing Seite 7 7
Model Driven Unit Testing (2/6) Überblick Testansatz Abb. Überblick über den Testansatz Quelle: Paper Model Driven Unit Testing Seite 4 8
Model Driven Unit Testing (3/6) Testfallerzeugung am Bsp. cartadd() product: Book ASIN: String = ASIN12345678 titel: String = Shannara pages: Integer = 642 product: Book ASIN: String = ASIN12345678 titel: String = Shannara pages: Integer = 642 product: Book ASIN: String = ASIN12345678 titel: String = Shannara pages: Integer = 642 self: OnlineShop self: OnlineShop self: OnlineShop c: Cart cartid: String c: Cart cartid: cid001 c: Cart cartid: cid001 9
Model Driven Unit Testing (4/6) Testfallerzeugung product: Book ASIN: String = ASIN12345678 titel: String = Shannara pages: Integer = 642 self: OnlineShop person: Person personid: String = pid541 name: String = Brooks public void testcartadd_0(){ int quantity = 1; String cid = "cid001"; Book product = new Book(); Cart c = new Cart(); Person person = new Person(); product.setasin("asin12345678"); product.settitle("shannara"); product.setpages("642"); c.setcardid("cid001"); person.setpersoid("pid541"); person.setname("brooks"); c: Cart cartid: cid001 } OnlineShop self = new OnlineShop(); self.addcart(c); self.addproduct(product); product.addauthor(person); self.cartadd(product, quantity, cid); checkforumlclassdiagrammfailures(self); 10
Model Driven Unit Testing (5/6) Testfallerzeugung product: Book ASIN: String = ASIN12345678 titel: String = Shannara pages: Integer = 642 S0 self: OnlineShop cartadd S1 S2 c: Cart cartid: cid001 Sl Su Sy 11
Model Driven Unit Testing (6/6) Testausführung 1.Schritt: Ausführen der gefundenen Sequenz 2.Schritt: Aufrufen der zu testenden Methode mit Eingabeparametern Zuerst Überprüfung der Vorbedingung Überprüfung der Nachbedingung, wenn Vorbedingung fehlerfrei ausgeführt 12
Automated Boundary Test Generation (1/4) Wie sieht der Kontrakt aus? Verhalten der Methode aus der Precondition 13
Automated Boundary Test Generation (2/4) Symbolische Darstellung der Systemzustände Formale Definition C s V, M N V K T Bsp für Klasse LimitedPurse Genutzt von Präambel der Testausführung 14
Automated Boundary Test Generation (3/4) Testgenerierung Strukturelle Überdeckung Entscheidungsüberdeckung P1 v P2 Beispiel a >= 0 && balance + a <= max && balance ==\old(balance) + a DC = Decision Coverage, SC = Statement Coverage, CC = ConditionCoverage FPC = Full Predicate Coverage, MCC = Multiple Condition Coverage 15
Automated Boundary Test Generation (4/4) Testausführung Bestandteil von JML-Testing-Tools Benutzer wählt Zu testende Methoden Spezifikationüberdeckungskriterium Datenüberdeckungskriterium Präambel Präambel Soll zu beachtende Verhalten aktivieren Generierung und Instanziierung von Objekten und deren Methoden 16
Korat (1/5) Wie sieht der Kontrakt aus? Spezifiziert in Java-Prädikaten (Precondition) 17
Korat (2/5) Finitisation Input kann aus Objekten mehrerer Klassen bestehen Limitiert Anzahl der Eingabeparameter Spezifizierung der Anzahl von Objekten dieser Klassen Objekte einer Klasse bilden Klassendomäne Spezifizierung von Feldern, auf die Objekte von Klassen referenzieren Entstehung einer Felddomäne 18
Korat (3/5) Testfallerzeugung Finitisation 19
Korat (4/5) Generierung des Zustandsraums Suchalgorithmus durchläuft Zustandsraum Beschränkt Eingabeparameter nur nonisomorphe Eingaben (Kandidaten) Bei nichtdeterministischen Methoden folgende Garantie Generierung der Kandidaten wenn repok() immer true Keine Generierung, wenn repok() immer false Generierung nicht vorhersagbar, wenn kein klares Ergebnis vorliegt 20
Korat (5/5) Testausführung Generierung aller gültigen Eingaben Aufruf der testenden Methode mit jeder Eingabe Nutzung von Klasse, die Eingabe repräsentiert Überprüfung der Ausgabe mit Testorakel Testorakel: Methode erfüllt ihre Invariante Automatische Generierung der Testorakel aus Postcondition durch JML Automatische Testausführung durch Nutzung von JMLUnit 21
Vergleich 22
Zusammenfassung Vorstellung einer Taxonomie für kontraktbasierte Testverfahren Vorstellung von drei Ansätzen Einordnung der Ansätze in die Taxonomie Im Modellierungsbereich ähnlich Unterschiede bei der Testfallerzeugung 23
Vielen Dank für eure Aufmerksamkeit. Fragen und Diskussion 24