Experimente über Zusicherungen

Werbung
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
Herunterladen