Empirische Softwaretechnik Prof. Dr. Walter F. Tichy Dr. Matthias Müller Sommersemester 2006 Experimente über Zusicherungen 2 Übersicht • Einführung „Programmieren mit Vertrag“ • 2 Experimente über die Nützlichkeit von Zusicherungen beim Programmieren • Gegenbalancierter Experimententwurf • Wilcoxon-Rangsummen-Test 3 Entwurf durch Vertrag • 1988 Bertrand Meyer stellt Programmiersprache Eiffel vor • In Eiffel sind Zusicherungen eingebaut • Verwendung von Zusicherungen endet in Vertrag zwischen Dienstnehmer und Dienstgeber 4 Vertrag: Dienstnehmer und Dienstgeber Dienstnehmer Dienstgeber Vorbedingung(eineMethode) == true Nachbedingung(eineMethode) == true 6 Zusicherungen Mitlerweile in jeder Programmiersprache verfügbar • C: assert.h • Java 1.4: Zusicherungen in Sprachstandard eingebaut 7 Meyers Hypothesen • Hypothese Korrektheit Mit Zusicherungen geschriebene Software ist korrekt, da sie zusammen mit ihrer Spezifikation entwickelt wird • Hypothese Wiederverwendung Zusicherungen führen zu höherer Wiederverwendung 8 Untersuchte Hypothesen • Mit Zusicherungen erstellte Programme sind nicht zuverlässiger • Benutzung von Zusicherungen reduziert Programmieraufwand nicht • Zusicherungen erhöhen die Wiederverwendung nicht 9 Umfeld • Durchgeführt im WS 1999 (Exp99) und 2000 (Exp00) • Teilnehmer waren Informatikstudenten im Hauptdiplom • Beide Experimente waren Teil des Praktikums Der persönliche Softwareprozess (PSP) 10 Programmiersprachen und Werkzeuge Sprache Exp99 Exp00 C, Java Java Werkzeug APP, jContract jContract Teilnehmer 10/C, 10/Java 13 11 Auswertung • Datenmenge klein • Nicht normalverteilt • nichtparametrischer Test für Lagebestimmung (Rangsummen-Test nach Wilcoxon) • Signifikanzniveau = 0.05 12 Wilcoxon-Rangsummen-Test • Hypothesentest bei kleinen Datenmengen, wenn Art der Verteilung unklar • nichtparametrisches Gegenstück zum t-Test 13 Weiteres Vorgehen • • • • Vorstellung Exp99 Gegenbalancierter Experimententwurf Vorstellung Exp00 Statistik: Wilcoxon-Rangsummen-Test 14 Exp99: APP • Annotation Preprocessor (APP) • Vor/Nachbedingungen im Kommentar von C-Programmen • Zusicherungen lassen sich aus- und einschalten 15 APP – im Programm int square_root(int x) /*@ assume x >= 0; return y where y >= 0; return y where y*y <= x && x < (y+1)*(y+1); @*/ { ... } 17 jContract • Erlaubt Formulierung von – Klasseninvarianten – Vor/Nachbedingungen bei Methoden • Zusicherungen in Java-Doc-Kommentaren mit speziellen Tags 18 jContract – im Programm /** * @pre time != null * @post return.equals("Hello") * || return.equals("Good night") */ String welcome(String time) { ... } 20 Erfahrung mit jContract • jContract war beim Experiment noch im Teststadium • Teilnehmer widmeten sich mehr der Syntax von jContract als der Problemstellung • Folge: jContract Daten verfälscht • Konsequenz: jContract Daten verworfen; also keine Java-Datenpunkte 21 Entwurf: Exp99 • Gegenbalancierter Experimententwurf • Jeder Teilnehmer liefert zwei Datenpunkte • Jeder Teilnehmer benutzt beide Programmiermethoden: – einmal mit Zusicherungen – einmal ohne Zusicherungen • Jede Methode mit anderer Aufgabe 22 Naiver Aufbau 1. Aufgabe 2. Aufgabe A1 / M1 A2 / M2 Jeder: A = Aufgabe M = Methode 23 1. Problem Jede Aufgabe wird immer mit derselben Methode bearbeitet. • Effekt abhängig von mehr als einer unabhängigen Variable. • Effekt durch Zusammenspiel zweier Variablen, Aufgabe und Methode 24 2. Problem Aufgabe/Methode immer an derselben Stelle: A1/M1 an erster Stelle, A2/M2 an zweiter • Reihenfolgeeffekt (order) Reihenfolge der Aufgaben beeinflusst den Effekt (Lerneffekt) • Übertragungseffekt (carry-over) Vorangegangene Leistung beeinflusst die weitere Leistung (Motivation) 25 Gegenbalancierter Entwurf (GBE) • Kombiniere jede Aufgabe mit jeder Methode • Stelle jede Kombination aus Aufgabe/Methode an jede Stelle im Versuchsplan 26 GBE Gruppe 1: Gruppe 2: Gruppe 3: Gruppe 4: 1. Aufgabe 2. Aufgabe A1 / M1 A1 / M2 A2 / M1 A2 / M2 A2 / M2 A2 / M1 A1 / M2 A1 / M1 A = Aufgabe M = Methode 27 GBE • Bisher Inter-Subjekt GBE, Gruppen verglichen • Aber auch Intra-Subjekt GBE möglich: lasse jeden Teilnehmer alle möglichen Wechsel der Versuchsbedingungen machen 28 Intra-Subjekt GBE • Bei zwei Versuchsbedingungen A und B: gib jedem Teilnehmer beide Reihenfolgen, also ABBA. • Beispiel: Geschmackstest Coca Cola vs. Pepsi Cola. 29 Intra-Subjekt GBE • Annahme: Bei jedem wiederholten Versuch steigt die Bewertung um einen konstanten Wert • Wenn die Summe der Bewertungen für A und B gleich ist, so ist der Folge-Effekt neutralisiert. Bedingung A B B A Bewertung 0 1 2 3 Bewertung A: 3 Bewertung B: 3 30 Intra-Subjekt GBE • Wenn Steigerung der Bewertung nicht linear ist (z.B. 0, 4, 6, 8), dann Ordnungseffekt durch Folge BAAB kontrollieren Bedingung A B B A B A A B Bewertung 0 4 6 8 0 4 6 8 Bewertung A: 18 Bewertung B: 18 31 GBE in Exp99 1. Aufgabe Gruppe 1 Gruppe 2 Gruppe 3 Gruppe 4 Str, APP Ch, nAPP Str, nAPP Ch, APP 2. Aufgabe #G #A Ch, nAPP Str, APP Ch, APP Str, nAPP 2 3 2 3 2 3 1 3 Str = String-Aufgabe Ch = Kettenregel-Aufgabe (engl. chain-rule) #G = Anzahl geplant #A = Anzahl aktuell 32 Die Aufgaben • Teile eines Programms für symbolische Ableitung • Programm entstand durch Portierung von Pascal nach C 33 Aufgabe String • String-Operationen von Pascal sind nicht Teil der C-Standardbibliothek • Implementierung der insert und delete String-Funktionen • Funktionen haben nichts mit umgebendem Programm zu tun 34 Aufgabe Kettenregel • Erweiterung des Programms um die Kettenregel: f x f x x • Implementierung der Funktion verlangt Wissen über Ableitungsprogramm 35 Versuchsaufbau Training der APP Syntax Lösen der 1. Aufgabe Lösen der 2. Aufgabe 36 Ergebnis: Programmieraufwand • Gemessen in Mann-Minuten • Kein Unterschied für String und für Kettenregel 37 Ergebnis: Wiederverwendung • Anzahl der wiederverwendeten Funktionen in und ausserhalb von Zusicherungen • Gezählt für Kettenregel-Aufgabe • Innerhalb Zusicherungen: APP scheint Wiederverwendung zu fördern (pval = 0.07) 38 Ergebnis: Wiederverwendung • Ausserhalb Zusicherungen: APP-Gruppe hat mehr Funktionen wiederverwendet (pval = 0.19) • Es scheint, dass Verwendung von APP und Zusicherungen Wiederverwendung fördert • Mögliche Ursache: Besseres Programmverständnis durch Zusicherungen 39 Exp00: jContract • jContract im WS 2000 stabiler • Experiment mit Java und jContract 40 Experimententwurf • Ein Faktor, Nachtest, Intersubjekt-Entwurf • Experimentgruppe (7 Teilnehmer) – Verwendeten jContract – Zusicherungen im Programmtext • Kontrollgruppe (6 Teilnehmer) – Verwendeten keine Zusicherungen – Keine Zusicherungen im Programmtext, aber natürlichsprachliche Information 41 Experimentaufgabe • GraphBase • Implementierung der Hauptklasse einer Graphenbibliothek • Methodensignaturen vorgegeben • Methodenrümpfe sollten geschrieben werden, z.B. – addEdge, removeNode – für gerichtete und/oder gewichtete Graphen 42 Versuchsaufbau ExperimentGruppe Webkurs für jContract Lösen von GraphBase KontrollGruppe kein Webkurs 43 Ergebnis: Programmieraufwand • Gemessen in Mann-Minuten • Ergebnis für jContract-Gruppe: 702 471 399 1148 375 223 282 • Ergebnis für Kontroll-Gruppe: 270 291 276 469 729 392 44 Ergebnis: Programmieraufwand • Kein Unterschied für die Aufgabe Graphbase • pval = 0.31 • Fazit: Verwendung von Zusicherungen und jContract verringert nicht die Arbeitszeit 45 Ergebnis: Wiederverwendete Methoden • Wiederverwendete Methoden mit und ohne Zusicherungen: kein Unterschied (pval = 0.23) • Wiederverwendete Methoden ausserhalb Zusicherungen: – jContract-Gruppe verwendet signifikant weniger Methoden wieder – Implementierung in Zusicherungen verlagert 46 Ergebnis: Zuverlässigkeit • Test, der Graphen des SubjektProgramms und des Goldprogramms vergleicht • Graphen zufällig aufgebaut • Etwa 730 000 Methodenaufrufe mit 7,5 Millionen Zusicherungen überprüft 47 Ergebnis: Zuverlässigkeit • Programme der jContract-Gruppe tendenziell zuverlässiger • pval = 0.11 48 Charakteristiken der Experimente • Teilnehmer erhielten Schulung über Zusicherungen im PSP-Kurs • Aufgabenstellung betonte die Vorzüge von Zusicherungen 49 Widerspruch bei der Wiederverwendung? • Exp99: Zusicherungen erhöhen Wiederverwendung • Exp00: Zusicherungen erhöhen Wiederverwendung nicht • Datenbasis ist klein; deshalb nur geringe Chance, einen Unterschied zu entdecken • Wenn Datenbasis größer gewesen wäre, Unterschied eventuell auch entdeckt 50 Literatur • Müller, Hagner, Typke: Two controlled experiments concerning the usefulness of assertions as a means for programming. International Conference on Software Maintenance ICSM (2002) 51 Literatur (Forts.) • Hagner: Ein kontrolliertes Experiment über die Nützlichkeit von Zusicherungen als Hilfsmittel beim Programmieren. Studienarbeit, Karlsruhe, März 2001 • Typke: Die Nützlichkeit von Zusicherungen als Hilfsmittel beim Programmieren: Ein kontrolliertes Experiment. Diplomarbeit, Karlsruhe, April 1999 52 Literatur (Forts.) • Büning, Trenkler: Nichtparametrische statistische Methoden. (de Gruyter, 1994) • Christensen: Experimental methodology. (Allyn and Bacon, 2001) 53 Fortsetzung folgt (Wilcoxon-Test) 54