510 likes | 660 Views
Empirische Softwaretechnik. Prof. Dr. Walter F. Tichy Dr. Matthias Müller. Sommersemester 2006. Experimente über Zusicherungen. Übersicht. Einführung „Programmieren mit Vertrag“ 2 Experimente über die Nützlichkeit von Zusicherungen beim Programmieren Gegenbalancierter Experimententwurf
E N D
Empirische Softwaretechnik Prof. Dr. Walter F. Tichy Dr. Matthias Müller Sommersemester 2006
Übersicht • Einführung „Programmieren mit Vertrag“ • 2 Experimente über die Nützlichkeit von Zusicherungen beim Programmieren • Gegenbalancierter Experimententwurf • Wilcoxon-Rangsummen-Test
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
Vertrag: Dienstnehmer undDienstgeber Dienstgeber Dienstnehmer Vorbedingung(eineMethode) == true Nachbedingung(eineMethode) == true
Zusicherungen Mitlerweile in jeder Programmiersprache verfügbar • C: assert.h • Java 1.4: Zusicherungen in Sprachstandard eingebaut
Meyers Hypothesen • Hypothese Korrektheit • Hypothese Wiederverwendung Mit Zusicherungen geschriebene Software ist korrekt, da sie zusammen mit ihrer Spezifikation entwickelt wird Zusicherungen führen zu höherer Wiederverwendung
Untersuchte Hypothesen • Mit Zusicherungen erstellte Programme sind nicht zuverlässiger • Benutzung von Zusicherungen reduziert Programmieraufwand nicht • Zusicherungen erhöhen die Wiederverwendung nicht
Umfeld • Durchgeführt im WS 1999 (Exp99) und 2000 (Exp00) • Teilnehmer waren Informatikstudenten im Hauptdiplom • Beide Experimente waren Teil des Praktikums Der persönliche Software-prozess (PSP)
Exp00 Exp99 Java Sprache C, Java Werkzeug APP, jContract jContract Teilnehmer 10/C, 10/Java 13 Programmiersprachen und Werkzeuge
Auswertung • Datenmenge klein • Nicht normalverteilt • nichtparametrischer Test für Lagebestimmung (Rangsummen-Test nach Wilcoxon) • Signifikanzniveau = 0.05
Wilcoxon-Rangsummen-Test • Hypothesentest bei kleinen Datenmengen, wenn Art der Verteilung unklar • nichtparametrisches Gegenstück zum t-Test
Weiteres Vorgehen • Vorstellung Exp99 • Gegenbalancierter Experimententwurf • Vorstellung Exp00 • Statistik: Wilcoxon-Rangsummen-Test
Exp99: APP • Annotation Preprocessor (APP) • Vor/Nachbedingungen im Kommentar von C-Programmen • Zusicherungen lassen sich aus- und einschalten
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); @*/ { ... }
jContract • Erlaubt Formulierung von • Klasseninvarianten • Vor/Nachbedingungen bei Methoden • Zusicherungen in Java-Doc-Kommentaren mit speziellen Tags
jContract – im Programm /** * @pre time != null * @post return.equals("Hello") * || return.equals("Good night") */ String welcome(String time) { ... }
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
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
Naiver Aufbau 1. Aufgabe 2. Aufgabe Jeder: A1 / M1 A2 / M2 A = Aufgabe M = Methode
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
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)
Gegenbalancierter Entwurf (GBE) • Kombiniere jede Aufgabe mit jeder Methode • Stelle jede Kombination aus Aufgabe/Methode an jede Stelle im Versuchsplan
GBE 1. Aufgabe 2. Aufgabe Gruppe 1: Gruppe 2: Gruppe 3: Gruppe 4: A1 / M1 A1 / M2 A2 / M1 A2 / M2 A2 / M2 A2 / M1 A1 / M2 A1 / M1 A = Aufgabe M = Methode
GBE • Bisher Inter-Subjekt GBE, Gruppen verglichen • Aber auch Intra-Subjekt GBE möglich: lasse jeden Teilnehmer alle möglichen Wechsel der Versuchsbedingungen machen
Intra-Subjekt GBE • Bei zwei Versuchsbedingungen A und B: gib jedem Teilnehmer beide Reihenfolgen, also ABBA. • Beispiel: Geschmackstest Coca Cola vs. Pepsi Cola.
A B B A 0 1 2 3 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 Bewertung A: 3 Bewertung B: 3 Bewertung
Bedingung A B B A B A A B 0 4 6 8 0 4 6 8 Bewertung Intra-Subjekt GBE • Wenn Steigerung der Bewertung nicht linear ist (z.B. 0, 4, 6, 8), dann Ordnungseffekt durch Folge BAAB kontrollieren Bewertung A: 18 Bewertung B: 18
2. Aufgabe #G Ch, nAPP Str, APP Ch, APP Str, nAPP 2 3 2 3 GBE in Exp99 1. Aufgabe #A Gruppe 1 Gruppe 2 Gruppe 3 Gruppe 4 Str, APP Ch, nAPP Str, nAPP Ch, APP 2 3 1 3 Str = String-Aufgabe Ch = Kettenregel-Aufgabe (engl. chain-rule) #G = Anzahl geplant #A = Anzahl aktuell
Die Aufgaben • Teile eines Programms für symbolische Ableitung • Programm entstand durch Portierung von Pascal nach C
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
Aufgabe Kettenregel • Erweiterung des Programms um die Kettenregel: • Implementierung der Funktion verlangt Wissen über Ableitungsprogramm
Versuchsaufbau Training der APP Syntax Lösen der 1. Aufgabe Lösen der 2. Aufgabe
Ergebnis: Programmieraufwand • Gemessen in Mann-Minuten • Kein Unterschied für String und für Kettenregel
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)
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 Programm-verständnis durch Zusicherungen
Exp00: jContract • jContract im WS 2000 stabiler • Experiment mit Java und jContract
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
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
Versuchsaufbau Webkurs für jContract Experiment- Gruppe Lösen von GraphBase Kontroll- Gruppe kein Webkurs
Ergebnis: Programmieraufwand • Gemessen in Mann-Minuten • Ergebnis für jContract-Gruppe: • Ergebnis für Kontroll-Gruppe: 702 471 399 1148 375 223 282 270 291 276 469 729 392
Ergebnis: Programmieraufwand • Kein Unterschied für die Aufgabe Graphbase • pval = 0.31 • Fazit: Verwendung von Zusicherungen und jContract verringert nicht die Arbeitszeit
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
Ergebnis: Zuverlässigkeit • Test, der Graphen des Subjekt-Programms und des Goldprogramms vergleicht • Graphen zufällig aufgebaut • Etwa 730 000 Methodenaufrufe mit 7,5 Millionen Zusicherungen überprüft
Ergebnis: Zuverlässigkeit • Programme der jContract-Gruppe tendenziell zuverlässiger • pval = 0.11
Charakteristiken der Experimente • Teilnehmer erhielten Schulung über Zusicherungen im PSP-Kurs • Aufgabenstellung betonte die Vorzüge von Zusicherungen
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
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)
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
Literatur (Forts.) • Büning, Trenkler:Nichtparametrische statistische Methoden. (de Gruyter, 1994) • Christensen: Experimental methodology.(Allyn and Bacon, 2001)