Seminar Methoden der empirischen Softwaretechnik

Transcrição

Seminar Methoden der empirischen Softwaretechnik
Seminar Methoden der empirischen
Softwaretechnik
Technischer Bericht 2006-3
Univ. Prof. Dr.-Ing. Stefan Kowalewski
Lehrstuhl Informatik XI
Betreuer: Dirk Wilking
RWTH Aachen
Wintersemester 05/06
c
Lehrstuhl
Informatik XI, RWTH Aachen University
Contents
Grundlagen
3
Enke
Empirische Forschungsmethoden . . . . . . . . . . . . . . . . . . . . .
5
Sanjaya
Experimententwurf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
Cai
Qualitative Measurement
. . . . . . . . . . . . . . . . . . . . . . . . . 55
Becher
Hypothesen und T-Test . . . . . . . . . . . . . . . . . . . . . . . . . . 77
Wehlmann
Mehrfaktorielle Versuchspläne und Messwiederholungen . . . . . . . . . 101
Toborg
Kritik in der Statistik . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
Experimente: Allgemein
146
Püttmann
The 28:1 Grant/Sackman legend . . . . . . . . . . . . . . . . . . . . . 149
Mattar
Die Annahme der statistischen Unabhängigkeit bei Multiversionsprogrammierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169
Briem
Untersuchungen zur Fehleranalyse . . . . . . . . . . . . . . . . . . . . . 189
Sonaimuthu
Documentation and Source Code Reading . . . . . . . . . . . . . . . . 213
Franken
Softwaremetriken . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235
Experimente: Objektorientierung
Bai
Objektorientierte Entwürfe
260
. . . . . . . . . . . . . . . . . . . . . . . . 263
Yin
Experimente auf Designebene . . . . . . . . . . . . . . . . . . . . . . . 283
Experimente: Agile Methoden
302
Mahnkopf
Effekte des Pair Programming . . . . . . . . . . . . . . . . . . . . . . . 305
Ritzkopf
Effects of Test Driven Development . . . . . . . . . . . . . . . . . . . . 325
Grundlagen
Empirische Forschungsmethoden
Lutz Enke
Keywords: Empirie, Evaluation, Stochastik
Grundlagen
1
1.1
Einleitung
Was eigentlich ist Empirie?
Die Empirie (griechisch embiria – die Erfahrung) ist nichts anderes als auf
wissenschaftlichem, methodischen Wege gewonnene Erfahrung.
Kapitel 2 widmet sich, aufbauend auf einem historischen Rückblick und
einem Vergleich mit anderen wissenschaftlichen Methoden in Kapitel 1, den
eigentlichen Empirischen Forschungsmethoden, ihren Definitionen und ihrer
Anwendung auf die Naturwissenschaften.
In der Geschichte der Philosophie ordnet sich der Empirismus, der geisteswissenschaftlicher Vorreiter der sozial- und naturwissenschaftlichen Empirie zusammen mit dem Rationalismus auf der optimistischen Seite der
grundlegenden Frage ein, ob Erkenntnis erreichbar sei.
Dem gegenüber stehen die pessimistischen Theorien wie der des Skeptizismus oder des Relativismus entgegen, die Möglichkeit des Erreichens objektiver Erkenntnis aus grundsätzlichen Überlegungen heraus verneinen. Der
Konflikt zwischen Empirikern und Rationalisten einerseits mit Vertretern des
erkenntnistheoretisch pessimistischen Lagers wie David Hume andererseits
wird in 1.2 behandelt.
Wissenschaftstheoretisch steht der Empirie als naturwissenschaftlicher
Ansatz der Hermeneutik (sinngemäß Lehre vom Verstehen eines Textes“)
”
entgegen, dieser Konflikt wird in 1.4 behandelt.
1.2
Wo die Analytik versagt – oder: Wieso Empirie in der
Informatik?
Gerade im Bereich der Informatik läuft, ähnlich der Mathematik, ein großer
Teil der wissenschaftlichen und praktischen Arbeit auf rein analytischer
Ebene ab.
Die Frage, ob ein Programm terminiert ist ebenso mit reiner Logik beantwortbar wie die Frage nach der Beweisbarkeit eines mathematischen Satzes.
Der Informatiker könnte sich also mit gutem Gewissen als Analytiker bezeichnen, der a priori auf erkenntnistheoretische Spielereien wie der Empirie
verzichten könnte – schließlich ist sowohl die theoretische Vorarbeit der algorithmischen Problemlösung wie auch ihre Umsetzung auf Rechnersystemen
eine wohl definierte Umgebung, die theoretisch wie praktisch deterministisch
verläuft.
Doch ist die Informatik keine rein theoretische Wissenschaft, in der Realität und im Alltag muss sie sich vielfältigen Begrenzungen wirtschaftlicher
oder technischer Natur unterwerfen.
6
Methoden der empirischen Softwaretechnik
1 Einleitung
Die Zeit und die Kosten, die die Entwicklung einer Problemlösung verbrauchen sind ebenso wichtig, wie die deterministische Problemlösung an
sich; jedes Projekt ist dem gleichen Prinzip unterworfen, wie alles, was eine
Bedeutung für die Realität eines oder mehrerer Menschen hat: Die Kosten/Nutzenrechnung.
Da sowohl Kosten als auch Nutzen keine axiomatisch aufgebauten oder
auch nur aufbaubaren Größen sind, hilft hier weder pure Logik oder andere
rein analytische Verfahren. An dieser Stelle hält die Empirie und ihr gesamter
theoretischer Überbau auch in der Informatik Einzug:
• Wie viele Mittel setzte ich wo und wann ein, um ein Problem zu lösen?
• Wie lege ich erlaubte Ungenauigkeiten fest?
• Welche Heuristiken wähle ich zur Vereinfachung und wieso?
• Wie viel Zeit und Geld investiere ich, wie viel Personal setze ich ein,
um eine Lösung zu optimieren?
• Wann teile ich ein Projekt auf, und wie partitioniere ich es am besten?
All diese Fragen verlangen nach einer Antwort, die ihnen die Empirie im Rahmen ihrer Möglichkeiten (ihrer inhärenten und unausweichlichen, aber minimier- und steuerbaren Ungenauigkeit) geben kann.
Manche Fragen setzen Erfahrung heraus, manche Experimente. Manche
dieser Erfahrungen macht jeder Mensch in seinem Leben, viele jedoch
müssen auf wissenschaftlichem Wege gewonnen werden. Mittels empirischer
Forschungsmethoden.
1.3
Die Geschichte des wissenschaftlichen Experimentes
Auch wenn sich vereinzelt die Anfänge des Experimentes bei den griechischionischen Philosophen in Kleinasien finden lassen, ist der Durchbruch des
Experimentes als Form wissenschaftlicher Erkenntnis – und damit der Empirie – mit der Renaissance anzusetzen.
Seit dieser Zeit, genauer gesagt seit Francis Bacons Schrift Novum Organum setzte eine wahre Flut von Experimenten ein, deren erkenntnistheoretischer Wert erst durch einen Streit zwischen den Denkern Hume und Kant
in ein anderes Licht gerückt wurde.
Francis Bacon, dessen Namensvetter, der Franziskanermönch Roger Bacon, bereits im 13. Jahrhundert eine scientia experimentalis gefordert hatte,
postulierte sogar die Anwendbarkeit seiner experimentellen Methode auf
Methoden der empirischen Softwaretechnik
7
Grundlagen
alle Wissenschaften. Zwar machte schon die Scholastik, wie vor ihr andere
Philosophien Gebrauch von der beim Experiment grundlegenden Vorstellung
der Kausalitiät, an der Alleinursache aller kausalen Phänomene, nämlich
Gott, wurde nicht gerüttelt. Alles aber, was in Bewegung ist, wird von
”
einem anderen bewegt“ – Thomas von Aquin, Summa Theologica). Letzte
Ursache war immer Gott.
1.4
Hume und Kant – verschiedene Meinungen zur
Erkenntnistheorie
Die Wende von einer Metaphysik im ontologischen Gewand zur Empirie
wurde im englischen Empirismus vollzogen.
Kausalität wurde von David Hume (1711 – 1776, s. Abb.) nicht mehr deterministisch verstanden, sondern nur noch als gewohnheitsmäßige Verknüp”
fung im Denken“. Gleichzeitig verschiebt sich der Primat eindeutig auf die
Sinne, die allein den Schiedsrichter bei der Frage nach Ursache und Wirkung
spielen. Hume baut hierbei auf John Locke auf, der schon vorher behauptete,
dass sich alle Erkenntnis nur auf Erfahrung gründen könne.
Für Hume stellt sich die Kausalität als eine gewohnheitsmäßige Verknüp”
fung im Denken oder in der Einbildung zwischen einem Gegenstand und
seinem üblichen Begleiter“ (David Hume, An enquiry concerning human understanding) dar. Man kann Kausalität nämlich nie beweisen, sondern immer
nur einen mehr oder weniger großen Grad an connexion“ (Hume) zwischen
”
verschiedenen Phänomenen beobachten.
Humes wissenschaftlicher Kontrahent in dieser Betrachtungsweise war
der Königsberger Philosoph Immanuel Kant (1727 – 1804, s. Abb.). Kant
schloss, dass, wenn sich Kausalität nie beweisen ließe, der Begriff der Kausalität eine Vorstellung in unserem Denken sei, der über die reine Erfahrung
hinausginge.
Nach Kant kommt Erkenntnis erst dadurch zustande, dass unsere Sinneseindrücke nach einem Prinzip zu ordnen sind, das als notwendig gedacht
und postuliert werden muss. Er zog den Schluss, dass Kausalität etwas sein
müsse, was der Erfahrung vorausgeht, um die Erscheinungen der Wirklichkeit
überhaupt erklären zu können.
In Kants Terminologie: Kausalität ist ein Urteil a priori“.
”
Als Beweis dienten ihm die Sätze der Mathematik und der Geometrie,
die, obwohl unabhängig von Sinneseindrücken gefunden (Mathematik beruht
nur auf Axiomen und Logik), in der Wirklichkeit Gültigkeit hatten.
Im Kontrast zu Hume leugnete diese Sichtweise, dass menschliche Erkenntnis mit Sinneseindrücken allein möglich sei.
8
Methoden der empirischen Softwaretechnik
1 Einleitung
Im zwanzigsten Jahrhundert wiederholte sich dieser Streit in leicht veränderter Form.
Karl Popper (1902 – 1994) zog seit den dreißiger Jahren gegen die Neo”
Positivisten“ zu Felde, indem er den Primat der Theorie bei der Gewinnung
von Erkenntnissen betont. Ausschließlich bestimmte Annahmen von vornherein würden die Entscheidung zwischen unterschiedlichen Sinnesdaten ermöglichen, niemals jedoch die Sinne allein.
Erst theoretische Annahmen erlaubten es, die ungeordneten Daten der
Erfahrung aufzuschlüsseln und nach Ursache und Wirkung Ausschau zu halten.
Gilt einerseits in Fortführung der Gedanken Humes Kausalität nur als
probabilistische Beziehung1 , so wird andererseits die Behauptung Kants weitgehend geteilt, eine Ordnung und Erklärung der Sinnesdaten – also allem,
was ein Mensch im Experiment und damit der Empirie gewinnen kann –
wäre immer nur durch Rückgriff auf theoretische Sätze möglich, die vor der
Erhebung und Auswertung der Sinnesdaten aufzustellen sind
Die hier angeschnittene Diskussion, die zeigt, dass die Empirie auch
in der Moderne nicht unumstritten ist, lässt sich knapp zusammenfassen:
Die Kausalvorstellung ist nicht Ergebnis, sondern Voraussetzung em”
pirischer Erkenntnis“. Der Begriff der Kausalität dient damit als heuristisches Werkzeug, das beim Aufschlüsseln der Sinnesdaten nach Ursache und
Wirkung Hilfestellung leistet.
1.5
Hermeneutik – der große Widersacher?
Die Hermeneutik leitet sich linguistisch von Hermes, dem altgriechischen Götterboten ab, der den Menschen den Willen der Götter stets verschlüsselt,
und damit interpretationsanfällig, übermittelt hat; griechisch hermeneutike
techne – die Kunst des Interpretierens, Übersetzens, Erklärens und Auslegens.
Bezogen auf die Informatik findet die Hermeneutik nur im alltäglichsten
Sinne Anwendung, d.h. im Rahmen der menschlichen Interaktion und Kommunikation, beispielsweise wenn die vagen Anforderungen eines Projektes
in ein Pflichtenheft umformuliert werden oder Mitarbeiter die Memos ihrer
Kollegen entziffern müssen.
Nicht anwendbar ist sie jedoch in den Teilen der Informatik, die ihr wirklich als Wissenschaft zugeordnet werden können. Augenfällig ist dank der
1
Auch eine Variablenbeziehung mit einer Wahrscheinlichkeit von 0,999. . . , die de facto
gleich 1 wäre, ist nach der modernen Wissenschaftstheorie“ Poppers höchstens probabilis”
tischer und vorläufiger“ Art.
”
Methoden der empirischen Softwaretechnik
9
Grundlagen
syntaktischen Ähnlichkeit der Aufgabe das Interpretieren von Texten“, was
”
im informatischen Sinne die Aufgabe eines Compilers ist. Ein Compiler muss
per Definition deterministisch ablaufen, als Modell für ihn werden deterministische Automaten herangezogen. Das steht der Arbeitsweise und dem Selbstverständnis der Hermeneutik diametral entgegen.
Hauptproblem der Hermeneutik aus Sicht der Naturwissenschaften ist die
ungeklärte Frage nach der Validität (oder Glaubwürdigkeit) von ihr getroffener Aussagen.
Einziger Lichtblick scheint eine von C.S. Pierce (1839-1914) definierte
Schnittstelle zur Logik zu sein: Er interpretiert hermeneutische Aussagen
zunächst als Hypothesen bzw. abduktive Aussagen, sozusagen als Lückenfüller in unvollständigen logischen Systemen.
Diese Hypothese wird als zusätzliche Regel so gewählt, dass sie überraschende Phänomene als sinnvoller Fall dieser Regel gelten könnten.
Da ein unvollständiges logisches System durchaus zum Alltag
naturwissenschaftlicher oder informatischer Probleme gehören kann, ist sie
eine Möglichkeit, an Probleme heranzugehen, die auf den ersten Blick weder
mit Deduktion (Herleitung von Axiomen) oder Induktion (empirische Herleitung von vorhandenen Fakten) echt lösbar sind.
Ob es sich bei der Abduktion jedoch um einen echten logischen Schluss
handelt, ist umstritten – das gilt jedoch per se auch für die der Empirie
so eigene Induktion, da sie nur Wahrscheinlichkeitsaussagen als Schlussfolgerung von Stichproben treffen kann (s. Kapitel 2). Streng gesehen ist die
Hypothese zunächst kein Teil der Logik (jede neue echte“, aber bislang un”
bekannte Regel kann abduktiv gefolgerte Sätze über den Haufen werfen), sie
ist – wie der Hermeneutik so oft inne – eine Schnittstelle zwischen (oft von
Menschenhand) unzulänglich präzisen Daten oder Problembeschreibungen
und der Logik oder der Informatik.
Der Vollständigkeit halber sei erwähnt, dass natürlich gerade diese Funktion die Hermeneutik an anderer Stelle unverzichtbar macht, so basiert die
Rechtsprechung sogar in ihrer Selbstauffassung auf ihr (Rechtshermeneutik).
Gesetzestexte sind, im Gegensatz zu Gesetzen in den Naturwissenschaften,
der Interpretation ausgesetzt: Muss oder wird das Gericht sie wörtlich
nehmen, oder gibt es Spielraum für eine übertragene Anwendung?
Versöhnlicherweise stehen Empirie und Hermeneutik oft gar nicht in
direkter Konkurrenz, sondern sind eher Ausdruck verschiedener Herangehensweisen an ein Problem. So versucht sich die Medizin, dem Tod eines
Menschen empirisch zu nähern und ihn so ursächlich zu erklären. Die Geisteswissenschaften jedoch stellen eher eine Frage wie: Was ist der Tod¿‘.
”
Die Berechtigung einer solchen Frage im wissenschaftlichen Sinne kann
und soll hier nicht geklärt werden.
10
Methoden der empirischen Softwaretechnik
2 Empirische Forschungsmethoden
2
Empirische Forschungsmethoden
Empirische Forschungsmethoden sind Verfahren, mit denen Erfahrungswissen – also empirisch gewonnene Erkenntnisse – in systematischer und nachvollziehbarer Weise gewonnen und analysiert werden kann.
Ziele der empirischen Forschung sind:
1. Überprüfung von Theorien und daraus abgeleiteten Hypothesen
2. Untersuchung von singulären Sachverhalten
Einkommensverteilung eines Landes)
(z.B.
spezifische
3. Untersuchung von Wirkungen und Nebenwirkungen planerischer Maßnahmen (Wirkungs- oder Evaluationsforschung)
Eine grundlegende Unterscheidung empirischer Forschungsmethoden
kann in quantitative und qualitative Methoden erfolgen.
Wichtig bei der Wahl der Methode ist immer das zugrunde liegende
Erkenntnisinteresse. Qualitative Verfahren werden oft zur Erforschung eines
neuen Forschungsgebietes oder -gegenstandes benutzt und um Hypothesen
zu entwickeln. Quantitative Methoden setzen hingegen Hypothesen voraus,
die dann getestet werden. Oftmals folgt der explorativen Phase einer qualitativen Methode – die durchaus ergebnisoffen sein konnte – eine quantitative
Phase, in der entstandene Hypothesen empirisch überprüft werden.
2.1
Qualitative Methoden
Qualitative Methoden finden hauptsächlich Anwendung in der Sozialforschung und anderen auf den Menschen bezogenen Disziplinen. In den
Naturwissenschaften finden sie kaum Anwendung, ihre Datenerhebung erfolgt fast immer über Befragung oder Beobachtung von Menschen. Viele
solche sehen sich in hermeneutischer Tradition oder sind extrem spezifisch,
daher sei an dieser Stelle auf eine tiefer gehende Betrachtung dieser Methodenfamilie verzichtet.
2.2
Quantitative Methoden
Quantitative Methoden betreffen die Bereiche Datenerhebung, Messung,
Stichprobe und Datenanalyse. Durch Konsum- und Wahlforschung in den
Alltag eingerückt und unterfüttert durch mathematische Theorie ihrer Aussagekraft, sind sie das Herzstück wissenschaftlicher Empirie.
Methoden der empirischen Softwaretechnik
11
Grundlagen
Unterscheidungskriterien verschiedener quantitativer Methoden sind vor
allem die unterschiedlichen Methoden der Datenerhebung und die Anwendung statistischer und stochastischer Methoden wie Mittelwerte, Varianzen,
Stichprobengrößen oder Signfikanztests. In Abhängigkeit der Anzahl betrachteter Variablen unterscheidet man ein- oder mehrfaktorielle Untersuchungen; die Anzahl abhängiger Variablen teilt die Verfahren in univariate und
multivariate auf.
2.3
Datenerhebung
Sämtliche empirischen Forschungsmethoden setzen stets Datenbestände voraus. Von Interesse ist daher die Art der. Die häufigsten Verfahren hierfür
sind Befragung, Beobachtung und Experiment.
2.3.1
Befragung
Gängige Formen der Befragung sind
• mündliche Befragung
• schriftliche Befragung
• Telefoninterviews
• postalische Befragung
• computergestützte Selbstinterviews
Die Methode der Befragung hat ebenso einen Einfluss auf die Qualität der
Daten wie die Qualität der Fragestellungen und ihre Standardisierung. Meist
werden so genannte geschlossene Fragen gestellt, deren Antwortmöglichkeiten
fest vorgegeben sind, um die Vergleichbarkeit der Daten zu gewährleisten.
Bei gefragten Zahlenwerten (Zeitangaben, Mengenangaben etc.) spricht man
normalerweise auch bei freier Antwortmöglichkeit von geschlossenen Fragen,
da ihre Kategorisierung eine einfache Diskretisierung des zugrunde liegenden
Zahlenraumes ist.
2.3.2
Beobachtung
Unter Beobachtung versteht man das passive Verfolgen von Verhaltensweisen
oder Vorgängen unter Zuhilfenahme verschiedenster Aufzeichnungsarten. Im
Gegensatz zur Befragung kommt die Beobachtung bereits für die Überprüfung naturwissenschaftlicher Hypothesen in Frage.
12
Methoden der empirischen Softwaretechnik
3 Das Experiment
2.3.3
Experiment
Experiment meint die Gewinnung von Daten unter vollständig kontrollierten
Bedingungen. Das idealerweise nur bewusste Auftreten von Nebenbedingungen und störenden Faktoren kann hierbei die Relevanz des Datensatzes im
Vergleich zu unvollständiger Beobachtung stark erhöhen.
3
Das Experiment
3.1
Merkmale
Ein Experiment (lat. experimentum – Versuch, Beweis, Prüfung, Probe) im
wissenschaftlichen Sinne ist eine methodisch aufgebauter Versuch, der eine
Hypothese beweisen oder widerlegen soll.
Dazu werden unterschiedliche Situationen untersucht, in denen alle bis
auf einen Faktor der Kontrolle des Experimentes unterliegen, um ursächliche
Beziehungen zu diesem variablen Faktor zu zeigen. Der nicht kontrollierte
Faktor ist derjenige von besonders großem Interesse, da er die hypothetische
Wirkung oder Ursache darstellt. Als Beobachtung kann ein Experiment also
tatsächlich aufgefasst werden, jedoch ist die gängige Kurzdefinition: Ein
”
Experiment ist eine Beobachtung unter kontrollierten Bedingungen“ noch zu
unspezifisch, da sie nicht auf die Relevanz der zugrunde liegenden Hypothese
eingeht. Zur Gewinnung relevanter Daten gesellt sich die Notwendigkeit der
Wiederholbarkeit des Experimentes, welches jedoch je nach Auslegung bereits im Terminus Kontrolle“ enthalten ist. Selbstverständlich ist der Begriff
”
Kontrolle“ hier auch sehr relativ gesehen, denn gerade die Wiederholung
”
von Experimenten hat oft gezeigt, dass gleiche Versuchsanordnungen völlig
unterschiedliche Hypothesen zu bestätigen schienen. Zur Bewertung eines
Experimentes ist also auch das Wissen oder die Vermutung über den Grad
der tatsächlichen Kontrolle, die vorliegt, relevant.
Als Merkmale eines Experimentes seien hier deshalb festgehalten:
1. Hypothese
2. unterschiedliche Situationen
3. Kontrolle bis auf einen Faktor
4. Wiederholbarkeit (um Störfaktoren, die Punkt 3. entgehen, zu identifizieren)
Ein mögliches fünftes Kriterium, welches jedoch entweder trivial oder sehr
schwer zu erfüllen sein kann, wäre die sogenannte ökologische Validität“,
”
Methoden der empirischen Softwaretechnik
13
Grundlagen
also die Frage, inwieweit sich ein Experiment, welches so viele Faktoren kontrolliert, überhaupt auf nicht-experimentelle Situationen generalisiert werden kann. Diese Frage muss jedoch im Einzelfall beantwortet werden, im
Allgemeinen schränkt jedoch eine Verletzung dieser Generalisierbarkeit nur
die Hypothese und ihren Wirkungsbereich ein, und nicht die Gültigkeit des
gesamten Experimentes.
3.2
Experiment vs. Beobachtung
Die oben genannte Kurzdefinition des Experimentes als Beobachtung unter
”
kontrollierten Bedingungen“ ist nicht nur unpräzise, sondern droht die Trennung der Methoden zur Datenerhebung (s. 2.3) zu verwässern. Tatsächlich
scheint die Trennung nicht ganz schlüssig, ist Beobachtung doch auch im Experiment notwendig. Als empirische Methode unterliegt der Begriff Beobachtung jedoch dem Primat der Passivität, welche dem Experiment entgegensteht.
Auch wenn man davon ausgeht, dass kontrollierte Beobachtung Voraussetzung aller wissenschaftlicher Methoden sei, bleibt ein Unterschied:
Das Experiment behält tatsächlich die aktive Kontrolle über die Faktoren,
die Beobachtung unterliegt lediglich der Notwendigkeit, diese Faktoren
wahrzunehmen.
Der von einigen Sozialwissenschaftlern vertretene Ansicht, die Beobachtung sei das übergeordnete Mittel der Forschung“ als Folgerung daraus, dass
”
man ohne kontrollierte Beobachtung nicht auskomme, scheint also falsch,
denn dann könnte man ebenso gut der Statistik diese Rolle zugestehen.
Die reine Beobachtung als Datenerhebungsmethode über das Experiment zu
stellen hieße, das Handwerkszeug zum König zu machen.
3.3
Definition
Eine abgrenzende Definition des Begriffes scheint also zweckmäßig:
Experiment:
Wiederholbare Beobachtung unter kontrollierten Bedingungen, wobei
eine (oder mehrere) unabhängige Variable(n) derartig manipuliert wird
(werden), dass eine Überprüfungsmöglichkeit der zugrunde liegenden Hypothese (Behauptung eines Kausalzusammenhangs) in unterschiedlichen Situationen gegeben ist
14
Methoden der empirischen Softwaretechnik
3 Das Experiment
3.4
Mills Methoden
Für die Logik des Experiments ist das Buch von John Stuart Mill (18061883), A System of Logic so etwas wie ein veralteter Klassiker.
Klassiker“, weil einige seiner Regeln noch heute begrenzte Gültigkeit
”
haben, veraltet“, weil die Entwicklung der Logik und des Experimentes eine
”
Vielzahl von spezifizierenden Bedingungen zutage gefördert hat, an deren
Existenz zu Mills Zeiten nicht oder kaum zu denken war.
Mill nennt vier Möglichkeiten kausaler Aussagen beim Experiment. Ihre
teilweise Gültigkeit und das, was nach dem Stand der letzten 150 Jahre gegen
sie spricht, veranschaulicht Herangehensweisen und Trugschlüsse im Raum
der empirischen Forschung.
3.4.1
Methode der Übereinstimmung
Wenn zwei oder mehr Fälle der zu untersuchenden Erscheinung
”
nur einen Umstand gemeinsam haben, dann ist der Umstand, der
das alleinige übereinstimmende Merkmal sämtlicher Fälle ist, die
Ursache der betreffenden Erscheinung.“ (Mill, A System of Logic)
Das nachfolgende Beispiel zeigt jedoch sofort den Mangel dieser Methode:
A : T, U, V, W, X → Y
B : ¬T, ¬U, ¬V, ¬W, X → Y
Nach Mill wäre das gemeinsame Merkmal beider Fälle, X, die Ursache
für Y , also hinreichendes Merkmal (s. 4.1) für das Auftreten von Y . Dagegen
lassen sich aber folgende Einwände erheben:
1. Es ist nicht einzusehen, warum nicht irgendwelche anderen – u.U. für
A und B sogar verschiedenen – Merkmale, die hier nicht vertreten sind,
kausale Wirkung haben sollten.
2. Es wird sehr schwer sein, sich einen Fall zu denken, bei dem zwei Individuen nur ein Merkmal gemeinsam haben. Meistens bedeutet die Tatsache, dass ein Merkmal vorhanden ist, auch gleichzeitig das Vorhandensein anderer Merkmale. Hier sei nur an komplexe Phänomene wie
Gencode, soziale Schichtung oder Intelligenz erinnert.
3. Man kann keine Kausalaussage beweisen, also als absolut gesicherte
Erkenntnis bezeichnen (s. 4.1). Solche Aussagen wie hier müssen probabilistischen Charakter aufweisen.
Methoden der empirischen Softwaretechnik
15
Grundlagen
4. Der Geltungsbereich dieser Methode ist dadurch beschränkt, dass Mill
hier ausschließlich von zweiwertiger Logik ausgeht und damit die für die
Wissenschaft sehr relevante Quantifizierung von Merkmalsdimensionen
nicht berücksichtigte.
Betrachtet man die Methode als rein heuristisches Hilfsmittel zur Analyse möglicher Kausalitäten, mag sie in Verbindung mit anderen Techniken
durchaus ihre Berechtigung haben. So liefert sie bei vehementem Auftreten
doch oft Hinweise auf bedeutsame Variablen.
3.4.2
Methode der Differenz
Wenn ein Fall, in dem die untersuchte Erscheinung vorkommt,
”
und ein anderer, in dem sie nicht vorkommt, alle Umstände außer
einem gemeinsam haben, wobei dieser eine Umstand nur im erstgenannten Fall auftritt, dann ist der Umstand, durch den sich
die beiden unterscheiden, die Wirkung oder Ursache oder ein unentbehrlicher Teil der Ursache der Erscheinung.“ (Mill, A System
of Logic)
Die Logik dieser Methode lässt sich wie folgt veranschaulichen:
A : T, U, V, W, X → Y
B : T, U, V, W, ¬X → ¬Y
Hier würde man nach Mill schließen: X ist Ursache ( notwendiges Merk”
mal“, s. 4.2) für das Auftreten von Y , da im sonst gleichen Fall B X fehlt.
An dieser Methode ist folgendes zu kritisieren:
1. Wieder dürfte es schwer fallen, in der Wirklichkeit einen solchen Fall
zu finden, bei dem sich zwei Individuen nur in einem Merkmal unterscheiden, in allen anderen Merkmalen aber gleich sind.
Setzt man aber statt der Gleichheit in allen anderen Merkmalen nur
eine Zufallsstreuung voraus, die ihre verzerrenden Einflüsse gegenseitig
neutralisiert und damit intern validiert (s. 4.3), dann erscheint die
Leistungsfähigkeit dieser Methode in einem neuen Licht.
2. Der Fall ist denkbar, dass man zwar zwei Fälle wie oben tatsächlich
findet, aber nicht sagen kann, was Wirkung (= abhängige Variable)
und was Ursache (= unabhängige Variable) ist. Allerdings ist dieser
Einwand weitaus allgemeingültiger als nur diese Methode von Mills in
Frage zu stellen.
16
Methoden der empirischen Softwaretechnik
3 Das Experiment
Interpretiert man Mills Behauptung vom unentbehrlichen Teil der Ur”
sache der Erscheinung“ als probabilistisch, dann erweist sich die Methode der
Differenz als wesentlich brauchbarer für Kausalaussagen als die Methode der
Übereinstimmung. Lässt man dazu noch die anderen Faktoren nach dem Zufallsprinzip streuen, so kommt Mill hier schon nahe an eine der Kernmethoden
moderner Empirie heran: Die des sozialwissenschaftlichen Experiments.
3.4.3
Methode der gleichlautenden Variationen
Eine Erscheinung, die auf irgendeine Weise stets dann variiert,
”
wenn eine andere Erscheinung auf eine besondere Art und Weise
variiert, ist entweder eine Ursache oder eine Wirkung der betreffenden Erscheinung oder steht mit ihr durch irgendeine Kausalität
in Zusammenhang.“ (Mill, A System of Logic)
Bei dieser Methode geraten zum ersten Mal quantitative Hypothesen
(s. 2.2) in Mills Blickfeld. Es geht nicht mehr nur um Fragestellungen,
die nach den Auswirkungen eines Merkmals im Vergleich zur Nichtexistenz
dieses Merkmals fragen, sondern um Vergleiche stärkerer oder schwächerer
Beziehungen bei der Variation zweier Merkmale. Mill weist sogar in aller
Vorsicht darauf hin, dass es sich sowohl um Ursachen als auch um Wirkungen handeln kann, wird doch dieser Vorbehalt auch heute in der Praxis des
Öfteren noch übersehen.
Ob Mill mit seinem Nachsatz nur die Aussage des Vordersatzes schwächen
wollte, oder bereits an die Existenz weiterer Variablen gedacht hat, ist wohl
nicht entscheidbar. In jedem Fall gilt auch hier der Standardeinwand, dass
alles unter einem probabilistischen Deckmäntelchen gesehen werden muss.
Vergleicht man jeweils Merkmalspaare miteinander, dann ist die Methode der
gleichlaufenden Variationen eine Variante der Differenzmethode (s. 3.4.2).
3.4.4
Methode der Residuen
Wenn man von einer Erscheinung jenen Teil abzieht, von dem
”
man aus früheren Induktionen weiß, dass er die Wirkung bestimmter Voraussetzungen ist, dann ist der Rest des Phänomens
die Wirkung der noch verbleibenden Voraussetzungen.“ (Mill, A
System of Logic)
Hierbei handelt es sich um eine Methode, die auf einer anderen Ebene
liegt. Im Grunde geht es nämlich nur um die Anwendung einer Rechenregel.
Um einen derartigen Residualfaktor überhaupt zu vermuten, müsste man als
Methoden der empirischen Softwaretechnik
17
Grundlagen
Zeitgenosse Mills erst einmal von einer oder mehreren seiner anderen drei
Methoden Gebrauch machen.
Unter Mills vereinfachenden Annahmen ein Beispiel (entlehnt von E. Zimmermann): Vergliche man Studenten und Polizisten und wüsste, dass Studenten liberalere politische Ansichten hätte, sie im Schnitt mehr Bildung
genossen hätten und dazu auch noch überproportional aus Elternhäusern
der oberen Mittelschicht kämen, dann könnte man nach dieser vierten Methode vermuten, dass die restlichen Einflussgrößen für die Unterschiede der
politischen Einstellungen durch Subtraktion zu ermitteln wären, z.B. die
Möglichkeit, dass Studenten eher aus einer Großstadt kämen, Polizisten
hingegen eher vom Lande. Sichtbar wird, dass die vierte Methode aus
sich heraus nicht erklären“ kann. Bei der Erklärung des dritten Faktors,
”
Großstadt oder Land“, würde man im Rahmen der Millschen Analyse eine
”
abgeschwächte Form der Differenzmethode (3.4.2) anwenden.
Die moderne Analogie zur Methode der Residuen ist die Varianzanalyse, bei der auch versucht wird, bislang unerklärte Varianz in der oder den
abhängigen Variablen durch neue unabhängige Merkmale zu erklären.
M. R. Cohen und Ernest Nagel kommen in ihrem Werk An Introduction
to Logic and Scientific Method zu dem Schluss, dass die genannten Methoden
weder für eine Entdeckung der relevanten Variablen noch für Kausalnachweise
ausreichen. Bestenfalls ließen sich damit unzureichende Kausalbehauptungen
eliminieren. Als einfache und leicht nachvollziehbare Methoden – gerade auch
mit ihren Schwächen – sollen sie an dieser Stelle aber als Beispiele ausreichen.
4
Empirische Aussagen und ihre Qualität
Nachdem im Vorigen behandelt wurde, auf welche Weise man zu Datensätzen
gelangt und welche Folgerungen aus ihnen geschlossen werden könnten oder
sollten, fehlt noch jegliche Aussage darüber, unter welchen Bedingungen wir
einer getroffenen Aussage bzw. einer be- oder widerlegten Hypothese eine
gewisse Qualität und damit tatsächliche Aussagekraft zuordnen können.
Neben dem Prinzip von Ursache und Wirkung (Kausalität), dessen Nachweis überhaupt erst eine Bewertung der Ergebnisgüte erlaubt, gibt es weitere,
aufeinander aufbauende Gütekriterien für empirische Untersuchungen: Reliabilität, Validität und statistische Genauigkeit.
4.1
Kausalität
Für die Wertung einer empirischen Aussagen ist relevant, ob der für die
Belegung der Hypothese erforderliche Zusammenhang zwischen Ursache und
18
Methoden der empirischen Softwaretechnik
4 Empirische Aussagen und ihre Qualität
Wirkung überhaupt gegeben ist, oder ob es sich lediglich um eine zufällige
Korrelation o.ä. handelt.
Der Begriff Ursache teilt sich oft in die Begriffe Anlass, Bedingung und
Grund, wobei eine genaue Abgrenzung schwer fällt und auch strittig ist.
Einigkeit besteht meist über
• die Ursache als eine besondere Art der Bedingung (zeitlich vor der
Wirkung und wichtig für die Thematik),
• den Anlass als zufälligen (unwesentlichen) Auslöser einer Wirkung
neben der eigentlichen Ursache
• und den Begriff Grund als ideell im Gegensatz zum materialistischen
Begriff Ursache.
Weiterhin gilt, dass Kausalität empirisch nie total beweisbar ist. Streng
genommen ist Kausalität niemals zureichend beobachtbar. Zwischen der
theoretischen Sprache, in der man wie schon Kant die Kausalität als Hilfskonstruktion auffassen kann, und der empirischen Ebene klafft eine Lücke,
und sei sie im Fall naturwissenschaftlicher Gesetze, die millionenfach durch
Beobachtung verifiziert“ wurden, auch noch so klein.
”
An welchen Merkmalen ist also ein kausales Phänomen erkennbar?
Zwar liegt bei jeder Kausalbeziehung ein gemeinsames Auftreten zweier
Merkmale (= Korrelation) und eine zeitliche Abfolge vor, doch sind weder
Korrelation noch Folge allein ausreichend für eine Kausalaussage.
Das gemeinsame auftreten zweier Merkmale sagt noch nichts darüber aus,
was Ursache ist und was Wirkung, bzw. ob nicht dritte Variablen die Korrelation als Scheinkorrelation entlarven oder sie spezifizieren.
Folglich gilt der Satz: Jede Kausalaussage muss von (zwei oder mehr)
korrelierenden Phänomenen ausgehen (notwendige Bedingung), doch reicht
eine hohe Korrelation allein nicht aus für eine Kausalaussage.
Dasselbe trifft übrigens für eine Vorhersage zu. Diese kann zutreffend
sein, ohne dass das zugrunde liegende Gesetz bekannt ist ( Projektion“ im
”
Gegensatz zur Prognose“, die auf einer Gesetzesaussage beruht).
”
Ebenso gilt folgender Satz: Jede Kausalaussage muss eine zeitliche Abfolge beinhalten, doch reicht eine Folge allein nicht aus für eine Kausalaussage.
Beispiel: Zwar folgt der Tag auf die Nacht, doch verursacht die Nacht
nicht den Tag.
Der Fehlschluss von einem zeitlichen Ablauf auf einen ursächlichen wird
auch mit dem lateinischen Terminus post hoc ergo propter hoc“ bezeichnet.
”
Methoden der empirischen Softwaretechnik
19
Grundlagen
Entscheidend ist eben die Asymmetrie in der Variablenbeziehung und nicht
die zeitliche Abfolge.
Neben einem gemeinsamen Auftreten bzw. einer gemeinsamen Veränderung zweier Merkmale, auch Kovariation genannt, und einer zeitlichen Abfolge dieser beiden Phänomene müssen noch zwei weitere Bedingungen erfüllt
sein, wenn Kausalbeziehungen nachweisbar sein sollen. Zum einen muss es
sich um isolierte Systeme handeln, deren Variablen man – wie eben im Experiment – unter Kontrolle hat, zum anderen müssen alle möglichen Fehler
zufällig streuen, also nicht systematisch untereinander variieren.
Liegen also diese vier Bedingungen vor:
1. Korrelation von (zwei oder mehr) Merkmalen,
2. zeitliche Abfolge,
3. isoliertes System (= Kontrolle der relevanten Variablen) und
4. zufällige Streuung der Fehler,
dann kann man davon sprechen, dass z.B. ein X ein Y produziert, also
eine Asymmetrie in der Merkmalsbeziehung vorliegt. Allerdings kann diese
Asymmetrie auch wechselseitiger Natur sein, wenn man unterschiedliche Zeitpunkte betrachtet. So kann X im Zeitpunkt t0 Y hervorrufen, und Y im
Zeitpunkt t1 X veranlassen. Man spricht dann von reziproker Kausalität.
Ein Beispiel sei hierfür die Wechselwirkung von Sympathie und menschlicher
Interaktion.
Eine mehr wissenschaftstheoretische Frage ist, ob Kausalaussagen unbedingt deterministischen Charakter haben müssen. In der Realität erscheint
es zweckmäßiger, von wahrscheinlichkeitstheoretischen Aussagen auszugehen.
Man ist nämlich meist nicht in der Lage, alle vier oben aufgezählten Bedingungen genau zu erfüllen. Besonders die Kontrolle aller wichtigen Variablen
des Systems und die Forderung, dass die Fehler zufällig streuen müssen, bereiten Schwierigkeiten. Man kann von kausalen Beziehungen sprechen, wenn
die theoretische Struktur gegenüber zusätzlich eingeführten Variablen invariant bleibt.
Eine deterministische Aussage ist dann möglich, wenn – nochmals – die
obigen vier Kriterien erfüllt sind. Wenn man alle relevanten Variablen in
dem jeweiligen System kontrolliert hat, so bedeutet dies, X und nur X ist
die alleinige Ursache für das Auftreten von Y . Das heißt, immer dann, wenn
X auftritt oder eine Veränderung von X, dann folgt auch Y oder eine Veränderung von Y . Es besteht keine Möglichkeit, einer unabhängigen Variation
beider Merkmale.
20
Methoden der empirischen Softwaretechnik
4 Empirische Aussagen und ihre Qualität
Abschließend seien noch kurze Definitionen der hier relevanten Begriffe
von notwendiger“ und hinreichender“ Kausalität gegeben.
”
”
1. X ist eine notwendige und hinreichende Bedingung für Y : Beide Merkmale tauchen zusammen oder überhaupt nicht auf.
2. X ist eine notwendige, aber keine hinreichende Bedingung für Y : X
muss für die Beobachtung von Y vorhanden sein, doch nicht auf jedes
X folgt ein Y .
3. X ist eine hinreichende, aber keine notwendige Bedingung für Y : Y
liegt immer vor, wenn X vorliegt, doch kann Y auch unabhängig davon
auftreten.
4.2
Reliabilität
Reliabilität ist ein Maß für die formale Genauigkeit einer empirischen Untersuchung. Eine völlig reliable Untersuchung ist frei von Zufallsfehlern,
d.h. exakt gleiche Rahmenbedingungen würden bei Wiederholung des Experimentes/der Befragung gleiche Messergebnisse oder zumindest identische
Schlüsse zur Folge haben.
Die praktische Umsetzung dieses Anspruchs stößt schnell an ihre Grenzen: Insbesondere, wenn die Leistung von Menschen auf irgendeine Weise in
die Messung hineinfließt (Wahlverhalten, Arbeitsleistung, taktile Genauigkeit
beim Messen), müssen grundlegende Schwankungen als gegeben hingenommen werden und damit auch gemessen werden müsste. In der Regel begnügt
sich die Reliabilität daher auf Wiederholung unter vermeintlich gleichen Rahmenbedingungen, um ihr Gütesiegel zu vergeben.
4.3
Validität
Validität (lat. validus – stark, wirksam, gesund) bezeichnet das argumentative Gewicht einer Aussage oder Hypothese. Im Gegensatz zur Falsifizierund Verifizierbarkeit ist sie kein boolesches Kriterium, sondern ein kontinuierliches Maß für die Gültigkeit einer wissenschaftlichen Feststellung.
Sinnvoll ist eine Unterteilung in verschiedene Aspekte.
• Externe Validität
Auch Allgemeingültigkeit oder ökologische Validität. Bezeichnet die
Übereinstimmung zwischen tatsächlichem und beabsichtigtem Untersuchungsgegenstand, ergo: Wie generalisierbar sind die Erkenntnisse
eines Experimentes?
Methoden der empirischen Softwaretechnik
21
Grundlagen
• Interne Validität
Interne Validität misst die Fähigkeit eines Experimentes, mögliche
Störvariablen zu kontrollieren. Das bezieht sich beispielsweise auf die
Qualität eigentlich nicht untersuchter Daten wie beispielsweise soziale
Herkunft und Bildungsstand in der Wahlforschung, um auszuschließen,
dass durch einen Zufall diese Störvariablen schlecht verteilt sind.
• Konstruktvalidität
Bemisst die Fähigkeit des Experimentes, tatsächlich das gewünschte
Konstrukt zu messen. Diese Forderung bzw. Frage ergeht häufig an
Intelligenztests, bei denen die Gefahr besteht, dass zu einem Teil bloß
Gewandtheit innerhalb der gesellschaftlichen Konventionen, unter denen der Test entstanden ist, getestet wird. Gute Intelligenztests werben
daher mit Belegen für ihre Konstruktvalidität.
• Konvergente Validität
In wie weit korrelieren die Ergebnisse eines Experimentes/einer Umfrage mit denen ähnlicher Tests? Eine gute konvergente Validität ist
gewährleistet, wenn Ergebnisse eines neuen Tests mit bekannten Tests
hoch korrelieren.
• Diskriminante Validität
Ähnlich der konvergenten Validität werden hierbei die Ergebnisse des
zu validierenden Tests mit bisherigen Resultaten vergleichen. Hier
soll jedoch sichergestellt werden, dass bereits erfasste Merkmale nicht
nochmals gemessen werden.
Zwischenbemerkung: Ein Nachweis der Konstruktvalidität verlangt
Nachweise von sowohl konvergenter als auch diskriminanter Validität.
• Kriteriumsvalidität
Die Kriteriumsvalidität zielt auf den Zusammenhang zwischen empirisch gemessenen Ergebnissen des eigentlichen Messinstruments und
einem anders (extern) gemessenen empirischen Kriteriums ab. Sie wird
unterteilt in:
• Übereinstimmungsvalidität
Wird der Test zeitgleich mit einem anderen durchgeführt (Außenkriterium), und wird dieser ebenfalls überprüft, so kann von einer Übereinstimmungsvalidität gesprochen werden.
• Prognostische Validität
Prognostische Validität ist dann gegeben, wenn dem Test nachfolgende
22
Methoden der empirischen Softwaretechnik
4 Empirische Aussagen und ihre Qualität
Messungen (Außenkriterium) mittels der Ergebnisse des Tests prognostiziert werden können/konnten.
4.4
Statistische Genauigkeit
Der Grad der Kausalität, Reliabilität und Validität erlaubt Aussagen, wie gut
ein Experiment in der Lage ist, die Realität abzubilden und damit darüber, ob
seine Ergebnisse als Verifizierung oder Falsifizierung von Hypothesen geeignet
sind.
Die konkreten Ergebnisse eines Testes unterliegen jedoch, da im tatsächlich stattfindenden Experiment immer nur eine endliche Anzahl Situationen und damit Variablenbelegungen gemessen wird, dem Risiko der Ungenauigkeit.
Theoretisch gerät ein Wahlforscher in die Gefahr, obschon sein Modell
als sehr gut, seine Fragen als sinnvoll für die Wahlentscheidung (Kausalität),
seine Elimination von Störfaktoren als zuverlässig (Validität) und seine bisherigen Ergebnisse von hoher Güte (Reliabilität) waren, ein völlig falsches
Resultat zu prognostizieren.
Denn wer garantiert ihm, dass er trotz sorgfältiger Zufallsauswahl unter
Berücksichtigung einer Gleichverteilung der Befragten in puncto Wohnort,
Bildungsstand und familiärer Situation, nicht ausgerechnet tausend Wähler
der Bibeltreuen Christen befragt?
Theoretisch ist dies natürlich möglich, wenn auch sehr Unwahrscheinlich.
Deswegen spricht man nach – will man präzise sein – nach der Anwendung
empirischer Forschungsmethoden immer nur bedingt von bestimmten Ergebnissen. Üblich ist eine Formulierung wie zu 95% liegt die Abweichung des
”
realen Ergebnisses unter 5% vom Ergebnis der empirischen Erhebung/des
empirischen Experimentes“. Damit wäre gesagt, dass das Experiment bzw.
die Umfrage sowohl qualitativ als auch quantitativ gut genug waren, dass
die Wahrscheinlichkeit, ein mit 5% Fehlertoleranz gutes“ Ergebnis erzielt zu
”
haben, sehr hoch (95%) ist.
Derartige Qualitätsaussagen, die nach Garantierung von Validität und
Reliabilität des empirischen Experimentes getroffen werden können, sind völlig unabhängig vom Thema oder Untersuchungsgegenstand (eben im Gegensatz zur Validität und Reliabilität) und obliegen rein mathematischen Gesetzmäßigkeiten.
Elementarer Bestandteil der Datenauswertung zwischen Datenerhebung
(Experiment) und Präsentation (Bestätigung/Widerlegung der Hypothese)
ist daher sowohl die Hoch- als auch die Fehlerrechnung.
Während die Hochrechnung der experimentell gewonnenen Daten im
”
Wesentlichen“ mit der Grundgesamtheit übereinstimmen sollen und damit die
Methoden der empirischen Softwaretechnik
23
Grundlagen
Kernaussage der Präsentation darstellen, obliegt der Fehlerrechnung eben die
oben genannte Nennung von Ergebnisschwankungen und damit der Berechnung des Risikos, mit welchem das Treffen der gewünschten Aussage behaftet
ist.
References
[1] Zimmermann, E.: Das Experiment in der Sozialforschung, Teubner
[2] Mill, J. S.: A System of Logic
[3] Buhr, M; Klaus, G.: Philosophisches Wörterbuch, VEB Leipzig
[4] Schnell, R.; Hill, P.; Esser, E.: Methoden der empirischen Sozialforschung, Oldenbourg
[5] Nagel, E.; Cohen, M. R.: An Introduction to Logic and Scientific Method
[6] ILMES (http://home.att.net/~blackgr)
[7] Wikipedia (www.wikipedia.de)
24
Methoden der empirischen Softwaretechnik
Experimententwurf
Osmond Sanjaya Tedjasukmana
Grundlagen
1
Einführung
In der Softwaretechnik spricht man von ingenieurmäßigem Entwerfen, Herstellen und Implementieren einer Software. Innerhalb dieser Tätigkeiten kommen die folgenden bekannten Grundprobleme vor:
• Kosten der Softwareherstellung
Hier handelt es sich um die Einsparung der gesamten Arbeitkosten der
• Zykluszeit der Softwareherstellung
Unter der Zykluszeit versteht man die Gesamtdauer der Softwareherstellung.
• Verlässlichkeit der Software
Hier geht es um die Zahl und Art von Defekten in der Software.
• Brauchbarkeit der Software
Sie betrifft die Effizienz, Erlernbarkeit, Bedienbarkeit, etc.
Ein Beitrag zur Lösung der oben geschriebenen Grundprobleme soll an
ihrer Nützlichkeit gemessen werden, die in den meisten Fällen nur empirisch
nachgewiesen werden kann.
Der Begriff ”‘Empirie”’ stammt aus dem Griechischen ”‘empiria”’ und es
bedeutet Erfahrung. Es bezeichnet tatsächliche Ereignisse und Beobachtungen. Empirische Bewertung bedeutet praktische Verwendung und Erprobung
der Softwareartefakte (eines Werkzeuges, eines Modells oder einer Methode),
um deren Eigenschaften zu verstehen und beschreiben zu können.
1.1
Überblick der Empirische Forschungsmethoden in der
Softwaretechnik
Es gibt verschiedene empirische Forschungsmethoden und jede hat bestimmte
Eigenschaften, die bei der Auswahl der am meisten geeigeneten (günstigsten)
Forschungsmethoden nötig sind. Obwohl in dieser Ausarbeitung nur kontrollierte Experimente behandelt werden, werden einige andere empirische
Forschungsmethoden zum Vergleich kurz erläutert:
1. Fallstudie
Eine Fallstudie ist eine Studie der Softwareartefakte anhand eines
konkreten Anwendungsbeispiels, das speziell nur zu diesem Zweck unter
künstlichen oder typischen Bedingungen ausgeführt wird. Da der betrachtende Fall speziell nur einem Zweck dient, ist die Planung einfach,
aber es macht die Verallgemeinerung der Resultate schwierig. Eine
Fallstudie ist eine Beobachtungstudie.
26
Methoden der empirischen Softwaretechnik
1 Einführung
2. Feldstudie
Eine Feldstudie ist eine Studie der Softwareartefakte in einem realen
Softwareprojekt (”‘im Feld”’) und nicht in der Form eines Experiments. Da die Beobachtungen ”‘im Feld”’ erfolgt, sind die Ergebnisse
realistisch. Aber die Verallgemeinerung der Resultate ist auch hier
schwierig, da in den meisten Fällen der ”‘im Feld”’ beeinflussende Kontext schwierig zu verstehen ist. Eine Feldstudie ist auch eine Beobachtungstudie.
3. Umfrage
Bei einer Umfrage beantworten die Umfrageteilnehmer mehrere von
den Forschern sorgfältig formulierte Fragen. Die Ausführung kann
schriftlich (via Fragebogen) oder mündlich (via Interview) erfolgen. Sie
ist einfach und relativ billig, aber die Verlässlichkeit der Ergebnisse ist
unklar, da die Ergebnisse meist ungenau, subjektiv und sogar manchmal absichtlich verfälscht sind. Eine Umfrage kann bei dem Experiment
die Grundlage für eine zukünftige Verbesserung sein, wenn man sie nach
einem Test ausführt.
4. Metastudie
Eine Metastudie ist eine Studie der Softwareartefakte anhand mehrerer
früherer Studien zu demselben Thema, die sich aber in Methodik, Anwendungsfall, Art der Beschreibung und anderer Eigenschaften unterscheiden können. Sie verursacht relativ geringen Aufwand und ist
deswegen im Prinzip billig und nützlich, setzt aber zunächst genügend
viele andere Studien voraus.
5. Kontrolliertes Experiment
Ein kontrolliertes Experiment ist eine Studie, bei der alle für das Ergebnis relevanten Umstände konstant gehalten (kontrolliert) oder manipuliert werden. Die Beobachtungen werden mit verschiedenen Einstellungen der Umstände (Behandlungen) miteinander verglichen, um so
zu reproduzierbaren Resultaten zu kommen. Kontrollierte Experimente
bieten den höchsten Grad an Kontrolle unter allen empirischen Methoden. Sie sind recht aufwändig, da viele Umstände vorher auf die
Relevanz untersucht und kontrolliert werden müssen. Ausserdem sind
sie auch teuer. Aber sie lassen sich wegen der Kontrolle sehr genau
verstehen und relativ gut reproduzierbar. Ein Experiment umfasst
eine Menge von Teilnehmern (Versuchspersonen) sowie den zu bearbeitenden Aufgaben. Die Versuchspersonen werden in einem Experiment den Versuchgruppen fast immer rein zufällig zugeordnet (Randomisierung). Wenn es nicht möglich ist, und arbeitet man mit ganz
Methoden der empirischen Softwaretechnik
27
Grundlagen
oder teilweise vordefinierten Gruppen, solch einen Experimententwurf
bezeichnet man als quasi-experimentellen Entwurf.
1.2
Wichtige Begriffe in kontrollierten Experimenten
Ein kontrolliertes Experiment soll dafür sorgen, dass jede Beobachtung (jeder
Effekt) durch eine eindeutige Ursache (einen eindeutigen Grund) verursacht
wird, d.h. Wenn etwas zweimal durchgeführt wird und dabei alle Umstände
bis auf einen (U) gleich sind, dann müssen eventuell Unterschiede in den
Ergebnissen (E) vorliegen.
In einem kontrollierten Experiment gibt es drei Arten von Parametern,
die wie folgt bezeichnet werden:
• Abhängige Variable
Die im Laufe des Experimentes gemessenen Größe (E).
• Unabhängige Variable
Die im Laufe des Experimentes manipulierten Größe (U). Beispiel: Der
Effekt einer neuen Entwicklungsmethode auf die Produktivität des Personals wird studiert. Dazu wird beispielsweise eine objekt-orientierte
Entwurfsmethode statt einer funktional-orientierten gewählt. In dem
Experiment ist die abhängige Variable die Produktivität und die unabhängigen Variablen sind die Entwicklungsmethode, die Erfahrung des
Personals, die unterstützende Werkzeuge und die Umgebung.
• Störvariable
Die im Laufe des Experimentes konstant gehaltenen Größe. Bei einem
kontrollierten Experiment sollen alle Umstände prinzipiell konstant
sein. Diese Umstände heißen die Störvariablen. Hier ist es zu bemerken, dass die meisten Störvariablen irrelevant sind; zum Beispiel:
Ist es für das Experiment relevant, ob eine Versuchspersonen 1,60 m
groß oder 1,95 m ist?
Aber die genaue Liste der in einem kontrollierten Experiment relevanten Störvariablen ist nicht immer bekannt. Glücklicherweise ist es nicht
nötig diese Liste zu kennen, weil sich fast alle Störvariablen, ob bekannt
oder nicht, durch dieselben Technik kontrollieren lassen. Die Technik
besteht aus der Replikation und der Randomisierung. Die Replikation
bezeichnet die Betrachtung einer ganzen Gruppe (nicht einer einzelnen
Versuchperson). Die Randomisierung bezeichnet die zufällige Auswahl
der Mitglieder dieser Gruppe. Wenn die Gruppen nicht allzu klein sind,
gleichen sich die Einflüsse aller relevanten Störvariabeln innerhalb jeder
28
Methoden der empirischen Softwaretechnik
1 Einführung
Gruppe im Mittel aus. Bespiel: Die Störvariable X verändert unerkannterweise das beobachtete Ergebnis und zufällig war die Störvariable
X für die verglichenen Gruppen nicht genau gleich. Diese Störvariable
kann mit statistischen Techniken quantifiziert und beherrscht werden.
Figure 1: Das Prinzip eines Experiments.
1.3
Experimentprozess
Ein Vorgehensrahmen für Experimentationen in der Softwaretechnik ist wie
folgt aufgestellt [3]:
1. Definition
Der erste Schritt einer Experimentation ist die Experiment-Definition.
Hier erfolgt die Auswahl einer Fragestellung mit den zugehörigen Umständen. Sie besteht aus den folgenden Teilen [4, 5]:
• Analysiere <Studie-Objekt(e)>
die Entität, die im Experiment beobachtet wird.
• mit dem Ziel <Ziel>
Zweck, Absicht, Intention des Experiments.
• in Bezug auf <Qualitätsfokus>
Effektivität, Kosten, Verlässlichkeit, etc.
Methoden der empirischen Softwaretechnik
29
Grundlagen
• nach Ansicht von <Perspektive>
Forscher, Entwickler, Verbraucher, Projekt-Manager(in), etc.
• in dem Kontext <Kontext>
Situation/Umgebung, wo das Experiment ausgeführt wird. Hier
werden die Teilnehmer, die Software-Artefakte mit deren Eigenschaften definiert.
2. Planung (Entwurf)
In dieser Phase legt man fest:
• welche Gruppen ausgewählt werden,
• in welcher Reihenfolge ausgeführt werden,
• welche Aufgaben zu erledigen sind bzw. welchen ”‘Behandlungen”’
unterworfen werden, und
• welche abhängigen Variablen dabei beobachtet werden.
3. Durchführung
Diese Phase besteht aus der Vorbereitung, der eigentlichen Ausführung,
der Datenvalidierung und der Analyse. Hier muss es gewährleistet
werden, dass das Experiment gemäß den Plänen und dem Entwurf
aufgebaut ist, und die gesammelten Daten sind korrekt und statten
ein gültiges Experiment aus.
4. Interpretation
Rohe Resultate der Analysen sind meistens nicht genug, um die Resultate zu verstehen und die Schlussfolgerungen des Experiment zu
begreifen. Deshalb muss eine Interpretation erstellt werden. Sie
beschreibt, wie die Experiment-Resultate angewandt werden. Sie betrifft beispielsweise die Extrapolation, die Wirkung, etc.
Wie man sieht, gibt es viele Arten einen Rahmen für ein Experiment
aufzustellen (z.B.: [1] ”‘Arbeitschritte zur Durchführung”’ Seite 65-69, etc),
aber trotzdem sind alle prinzipiell ähnlich.
1.4
Gültigkeit
Eine wesentliche Frage bezüglich der Ergebnisse eines kontrollierten Experiments ist, wie gültig die Ergebnisse sind. Man unterscheidet die Gültigkeit
in vier Typen:
30
Methoden der empirischen Softwaretechnik
1 Einführung
1. Schlussfolgerungsgültigkeit
Dieser Typ von Gültigkeit bezieht sich auf die Frage, ob die statistische Verarbeitung korrekt war. Eine Gefährdung für die Schlussfolgerunggültigkeit stellen also die Umstände dar, die das korrekte Verhältnis zwischen der Verarbeitung und dem Ergebnis beeinträchtigen.
Sie sind [2]:
• ”‘Fischen”’
Die Forscher können das Ergebnis beeinträchtigen, indem sie ein
bestimmtes oder erwünschtes Ergebnis suchen (fischen). Dies
führt zu Ungültigkeit der Analysen.
• Verlässlichkeit der Messungen
Die Gültigkeit eines Experiments ist stark abhängig von der Verlässlichkeit der Messungen. Diese ist beispielsweise abhängig von
einer schlechten Instrumentation. Im Prinzip misst man zweimal
ein Phänomen, dann soll das Ergebnis gleich sein. Also sind
die objektive Messungen, mit denen das gleiche Ergebnis wiederhergestellt werden kann, sicherer als subjektive Messungen, zum
Beispiel: Zeilen von Codes sind sicherer als Punkte einer Funktion.
• Verlässlichkeit der Ausführung der Behandlungen
Hier beschäftigt man sich mit der Ausführung einer Behandlung
der Versuchspersonen. Es passiert oft, dass die Ausführung der
Behandlungen zwischen den Versuchspersonen nicht gleich ist.
• Zufällige Irrelevanzen in der Experiment-Umgebung
Umstände außer der Experiment-Umgebung können das Ergebnis
beeinträchtigen, wie zum Beispiel Lärm außerhalb des Raumes
oder plötzliche Störungen im Experiment (Handy oder Telefon
klingelt).
2. Innere Gültigkeit
Dies bezieht sich auf die Frage nach der Kontrolle der Störvariablen.
Bedrohungen, die diesen Gültigkeitstyp betreffen, sind also die Umstände, die die Kontrolle in einem Experiment beeinträchtigen. Diese
sind [1]:
• Historie
Das Vergehen von Zeit kann auch Wirkungen auf dem Experiment haben, die außerhalb des eigentlichen Experiments liegen,
aber dennoch das Verhalten der Teilnehmer beeinflussen. Zum
Beispiel: Das Experiment dauert ein Monat, und in einer Woche
gibt es ein besonderes Ereignis (Feiertage oder ähnliches). Die
Methoden der empirischen Softwaretechnik
31
Grundlagen
Ergebnisse können dementsprechend im Laufe der Zeit verschieden
sein, obwohl die Behandlungen konstant gehalten werden.
• Reifung
Die Reifung betrifft Veränderungen im Verhalten der Versuchspersonen, die über die Zeit auftreten. Diese sind Ermüdung, Lernund Reihenfolgeeffekte (siehe Abschnitt 2.4). Sie treten vor allem
in Erscheinung, wenn eine Versuchsperson mehrere Aufgaben
hintereinander löst (siehe auch Abschnitt 2.4: Intra-SubjektEntwurf)
• Instrumentation
Die Instrumentation betrifft die Veränderungen im Verhalten der
Experimentatoren oder dem Experimentaufbau selbst (Artefakte),
die über die Zeit auftreten. Beispiel für eine Veränderung im Verhalten des Experimentators: die subjektiven Urteile des Experimentators ändern sich allmählich im Verlauf mehrerer Beurteilungen. Beispiel für eine Veränderung im Verhalten des Experimentaufbaus: Ein Programmierwerkzeug kann bei späteren Versuchsdurchführungen aufgrund der zunehmenden Dateifragementierung
langsamere Antwortzeiten haben.
• Auswahl
Die Zuordnung der Versuchpersonen in die Gruppen kann bei
einem bestimmten Experiment nicht (wirklich) zufällig erfolgen:
Unterschiedliche Interessen oder Vorkenntnisse könnten bei einem
Experiment schon nötig sein. Hier muss man darauf achten, dass
sich die Kriterien für die Gruppeneinteilung nicht auf die Ergebnisse auswirken. Beispielsweise will man eine objektorienterte Programmiersprache mit einer funktionalen Programmiersprache vergleichen. Dazu hat man Schwierigkeiten, zwei Versuchgruppen zu
finden, von denen manche in ”‘ihrer”’ Sprache gleich viel, manche
wenig Erfahrungen haben und ansonsten hinsichtlich Intelligenz
und Erfahrungshintergrund genügend ähnlich sind.
• Sterblichkeit
Sie betrifft das Ausscheiden der Versuchperson während des Experiments. Falls die Gründe des Ausscheidens in verschieden
Gruppen unterschiedlich sind, ist die Gültigkeit in jedem Fall
bedroht. Falls das Ausscheiden nun nur aufgrund von (beispielsweise) Frustration erfolgt, ist das Experiment ungültig, da tendenziell nur leistungsfähigere Personen übrig bleiben, was die
äußere Gültigkeit zerstört.
32
Methoden der empirischen Softwaretechnik
1 Einführung
• Anforderungscharakteristik
Diese Bedrohung tritt dann auf, wenn die Experimentatoren
bezüglich der Versuchvariablen nicht neutral eingestellt sind, sondern sie erwarten von einer Gruppe eine bessere Leistung als von
einer anderen. Diese ‘Lieblingsgruppe”’ hat dann eine große Motivation, und wird somit zu einer relevanten und nichtkontrollierten
Störvariable.
• Verarbeitungsfehler
Es kann natürlich passieren, dass die abhängige Variable nicht korrekt gemessen oder falsch weiterverarbeitet wird. Dies betrifft
zum Beispiel: Tippfehler, Verwechslung von Daten, falsch angewandte statistische Methoden bei der Auswertung.
3. Konstruktgültigkeit
Sie beschreibt die Effektivität eines Experimentaufbau (Plan bzw. Entwurf). Foglich bezieht sie sich auf die Frage, ob der Entwurf prinzipiell
geeignet zur (teilweisen) Beantwortung der Forschungsanfrage ist. Die
Bedrohungen sind [2]:
• Mangelhafte Erklärung (Definition) des Experimentaufbau
Diese Bedrohung tritt auf, wenn die Konstruktion des Experiments nicht ausreichend definiert wird bzw. wenn die Theorie
nicht klar genug ist. Zum Beispiel: beim Vergleich zweier Inspektionsmethode ist es nicht klar, was hier ”‘besser”’ heißen soll. Soll
es heißen, die meisten Fehler, die meisten Fehler pro Stunde, die
ernsthaftesten Fehler zu finden?
• Interaktionen von verschiedenen Behandlungen
Diese Bedrohung tritt dann nur auf, wenn die Versuchperson auch
zu einer anderen Studie gehört. Die Behandlungen von unterschiedlichen Studien können eine Interaktion erfolgen. Es ist dann
nicht klar, ob das Ergebnis von den Behandlungen oder von einer
Kombination der Behandlungen kommt.
• Interaktionen von Testen und Verarbeitung
Das Testen selbst (Implementation der Behandlungen) kann auch
die Versuchpersonen empfindlicher und empfänglicher gegenüber
die Behandlungen machen, da das Testen auch zu der Behandlung
gehören. Zum Beispiel: Wenn das Testen die Messung der Anzahl
der in der Kodierung gemachte Fehler umfasst, dann werden die
Versuchspersonen vorsichtiger sein und deshalb versuchen sie, die
Fehler zu verringern.
Methoden der empirischen Softwaretechnik
33
Grundlagen
• Eingeschränkte Verallgemeinerung über die Konstruktionen
Die Behandlung kann die studierte Konstruktion positiv beeinflussen, aber in manchen Fällen die andere Konstruktion ungewollt negativ. Zum Beispiel: eine Studie schließt eine Folgerung
ab, dass die bessere Produktivität mit einer neuen Methode erreicht wurde. Aber andererseits kann es beobachtet werden, dass sie
die Wartbarkeit reduziert, wobei es die ungewollte Nebenwirkung
ist.
4. Äußere Gültigkeit
Hier geht es um die Bedrohungen der Verallgemeinerung der Experimentergebnisse, ob die Resultate sich korrekt auf andere Anwendungsfälle (äußere) übertragen lassen. Dies betrifft:
• Interaktion von der Auswahl und der Behandlung
Dies tritt dann auf, wenn man die Versuchspersonen aus der Population wählte, die nicht repräsentativ zu der Population, die man
verallgemeinern wollte. Also nehmen die falschen Personen an dem
Experiment teil. Zum Beispiel: bei einem Inspektion-Experiment
werden nur Programmierer benutzt, wobei sie sowohl als Tester
als auch System-Ingenieur an dem Experiment teilnehmen.
• Interaktion von der Einstellung und der Behandlung
Dies tritt dann auf, wenn man keine in dem Experiment zu benutzende Einstellung (oder Materialen) hat, die repräsentativ zu
(beispielsweise) der industriellen Einstellung ist. Zum Beispiel: in
einem Experiment werden die altmodischen Werkzeuge benutzt,
während die modernen Werkzeuge bereits verbreitet in der Industrie sind.
2
Experimententwurf
Es ist nötig, dass in einem Experiment viele Umstände betrachtet werden
müssen, um die Kontrollen zu haben und die Gültigkeiten der Ergebnisse zu
halten. In einem Experimententwurf sind die folgenden Begriffe wesentlich:
• Faktor und Niveau
Ein Faktor ist eine in dem Experiment manipulierte unabhängige Variable und jeder ihrer Werte heist Niveau (Level). Ein Faktor mit zwei
Niveaus heist dichotom.
34
Methoden der empirischen Softwaretechnik
2 Experimententwurf
Figure 2: Die Stelle, wo man die Art der Gültigkeit beachten muss.
• Effekt
Der Effekt ist die Veränderung in der abhängigen Variablen zwischen
zwei Niveaus eines Faktors.
2.1
Versuchspersonen
Zunächst soll man sich bei dem Entwurf mit der Auswahl der Versuchspersonen beschäftigen.
2.1.1
Kompetenz
Um die geeigneten Versuchspersonen zu erhalten, betrachte man zuerst die
Kompetenzen der Versuchspersonen. Kontrollierte Experimente werden in
den meisten Fällen mit studierenden als die Versuchspersonen vorgenommen.
Diese Experimente sind eigentlich unproblematisch, da die Unterschiede zwischen Studierenden und Profis nicht besonders groß sind(siehe [1, 8]).
Man bemerkt auch, dass nicht die absolute Leistung der Versuchperson
entscheidend ist, sondern die Veränderung der Leistung bei der Änderung der
unabhängigen Variablen. Experimente mit Anfängern sollte man vermeiden,
da ihre Arbeitsweise mit großer Wahrscheinlichkeit völlig andersartig als die
von Erfahrenen ist, und somit wird die innere Gültigkeit bedroht. Die innere Gültigkeit wird auch bedroht, wenn man die Versuchpersonen (egal ob
Studierende oder Profis) überfordert.
Methoden der empirischen Softwaretechnik
35
Grundlagen
2.1.2
Homogenität
Um klare und aussagekräftige (scharfe) Experiment-Ergebnisse zu erhalten,
soll man dafür sorgen, dass die Leistungsunterschiede zwischen den Versuchspersonen möglichst klein sind (homogen). Es ist also sinnvoll, auf Versuchspersonen zu verzichten, deren Qualifikation vermutlich stark von der
übrigen abweicht, da sie die Variabilität der Ergebnisse erhöhen.
In der Realität sind leider diese Tatsache kaum zu vermeiden, es gibt nämlich erhebliche individuelle Unterschiede zwischen Softwareleuten. Glücklicherweise gibt es einen Weg, dieses Problem zu beheben. Wenn die zu erwartende relative Leistung der Versuchspersonen bereits vor dem eigentlichen
Experiment bekannt ist, dann kann man einen großen Teil der Unterschiede
aus den Ergebnissen herausrechnen und trotz starker Schwankungen zu scharfen Aussagen kommen. Dies kann man anhand eines Vortests erreichen. Ein
Vortest ist eine (bzw. mehrere) Aufgabe, der vor Beginn des eigentlichen Experiments unterworfen und von allen Versuchspersonen bearbeitet wird, und
zwar ohne Unterschied in der Behandlung der Versuchspersonen. Ein Vortest
soll idealerweise von gleicher Art sein wie die im Experiment zu bearbeitenden Aufgabe, und auch die gleichen abhängigen Variablen beobachten.
Ein Vortest ist sehr empfehlenswerte, wenn er überhaupt im Experiment
möglich ist. Er bietet nämlich folgende Vorteile:
1. Er kann Lerneffekte vermindert.
Lerneffekte sind eine Folge von einer Situation, in der die Versuchspersonen im Experiment oftmals an ungewohnten Aufgaben oder unter
ungewohnten Bedingungen arbeiten. Eine solche Situation führt zum
Lernen im Laufe des Experiments, es macht die Leistung der Versuchspersonen über die Dauer des Experiments nicht konstant, sondern sie verbessert sich schnell. Lerneffekte können die Ergebnisse
verfälschen oder den eigentlich vorhandenen Unterschied zwischen den
Versuchsbedingungen verdecken.
2. Er dient als Grundlage einer Gruppenbalancierung.
Die Einteilung der Versuchspersonen in eine Versuchsgruppe kann
manchmal aufgrund der Zufälligkeit zur nicht ausgeglichenen Zuteilung
führen. Es kann sein, dass eine Versuchsgruppe spürbar leistungsfähigere Versuchspersonen zugeteilt werden als der anderen. Insbesondere passiert es oft, wenn die Gruppe klein ist. Dies kann man vermindern, wenn man dafür sorgt, dass die Gruppen nach den Anhaltspunkten gleich stark besetzt werden (Gruppenbalancierung). Diese Anhaltspunkte erhält man idealerweise von den Ergebnissen eines Vortests.
Falls ein Vortest nicht möglich ist, dann muss man als Anhaltspunkt
36
Methoden der empirischen Softwaretechnik
2 Experimententwurf
nehmen, was man sonst kriegen kann (z.B. durch Vorstellungsgespräch). Hier hilft auch eine grobe subjektive Einteilung: Wenn man
jemanden zur Hand als Versuchsperson hat, den man bereits gut kennt.
3. Er kann als Grundlage Paarbildung verwendet werden.
Der große Unterschied in der Leistung zwischen den Versuchspersonen
erschwert, zu scharfen Aussagen zu gelangen. Hier bietet die Paarbildung als ein Ausweg: man vergleicht jede Versuchsperson mit einer
anderen, die ihr ähnlich ist. Man betrachte dann diese beiden (Paar)
als ein und dieselbe Person. Die beste Grundlage für eine solche Paarbildung sind die Ergebnisse eines Vortests.
2.1.3
Motivation
Neben den Kompetenzunterschieden muss man noch auf die Motivationsunterschiede zwischen den Gruppen achten, da sie die innere Gültigkeit bedrohen können. Die Bedrohung bezeichnet man den Motivationseffekt. Die
Experimentatoren können (bewusst oder unbewusst) durch ihr Auftreten
und Reden die Versuchspersonen für oder gegen eine der Versuchbedingung
einnehmen. Also hängt das Ergebnis des Experiments nicht von den Versuchbedingungen ab, sondern von der Haltung der Experimentatoren, was
nicht gewünscht war. Zum Beispiel: beim Vergleich zweier Programmiersprachen C++ und JAVA kann es sein, dass die Experimentatoren beispielsweise C++ favorisieren. Durch Reden der Experimentatoren in der Experimenteinleitung wird die Meinung der Versuchgruppen beeinflusst. Ein solcher
Fall kann durch Zurückhaltung der Experimentatoren vermieden werden.
Dieser Motivationseffekt kann auch ohne Beeinflussung der Experimentatoren vorkommen, wenn beispielsweise die Versuchspersonen selbst eine
vorgefasste Meinung mitbringen, nachdem sie die Versuchbedingungen erfahren. Dies kann man mit dem Verschweigen der Experimentvariablen
vermeiden, das aber meistens unmöglich in der Softwaretechnik ist. In
diesem Fall muss man also direkt die Ursachen unterschiedlicher Motivation bekämpfen. Zum Beispiel: die Versuchteilnehmer haben die Erwartung,
dass ”‘die Kontrollgruppe keine Chance hat”’, weil die Versuchbedingung der
Experimentgruppe einen so tollen technischen Fortschritt repräsentiert. In
einem solchen Fall ist die Bekämpfung offensichtlich: die Experimentatoren
müssen den Versuchteilnehmern klar machen, dass der Ausgang des Experiments nicht von vornhinein bekannt ist (sonst braucht man das Experiment
nicht auszuführen). Hier wird also die vorgefasste Meinung der Versuchteilnehmer durch gezieltes Gegenreden in der Experimenteinleitung neutralisiert.
Selbst wenn man keine signifikanten Motivationsunterschiede hat, wird
Methoden der empirischen Softwaretechnik
37
Grundlagen
das Experiment dann noch bedroht, falls die Motivation aller Gruppen extrem hoch oder extrem niedrig ist, denn sie kann zu Ergebnissen führen,
die für die Praxis bedeutungslos sind. Eine extrem hohe Motivation
wird ohne Mitwirkung der Experimentatoren (siehe auch Abschnitt 1.4 Innere Gültigkeit: Anforderungscharakteristik) kaum auftreten. Eine extrem
niedrige Motivation kann man mit Teilnahmeanreize bekämpfen. Die sind:
• Geld
Dieser Anreiz ist meistens problematisch, da er zu einer unnatürlich
hohen Motivation oder zu einer niedrigen Motivation mit AbzockerMentalität führen kann.
• Symbolische Gaben
Sie betrifft eine dingliche Anerkennung (Sachwerte). Eine geringe Gabe
reicht meistens schon aus, um die Motivationsbremse zu neutralisieren.
• Lernen
Hier betrifft die Überzeugung, dass die Teilnehmenden durch die Experimentteilnahme etwas Nützliches oder Interessantes lernen können.
Dieser Anreiz ist besonders gut geeignet, wenn der erwartete Lerneffekt (siehe vorherige Abschnitt Homogenität: Vortest) in allen Gruppen
ungefahr gleich ausfallt.
Figure 3: Die wichtigen Eigenschaften von Versuchpersonen, deren
Wirkungen und die Konsequenzen für die Qualität (Gültigkeit) des
Experiments
38
Methoden der empirischen Softwaretechnik
2 Experimententwurf
2.2
Aufgabenstellung
Der weitere Umstand, den man in einem Experiment betrachten muss, ist
die Frage nach der Aufgabenstellung. Die Aufgabenstellung bei einem Experiment besteht meistens in der Regel aus zwei (bzw. drei) Teilen:
• einem Anweisungstext, der beschreibt, was zu tun ist,
• einem oder mehreren Softwareartefakten, die als Ausgangspunkt dienen
(z.B. Anforderungsbeschreibungen, Entwurfsdokumente, etc),
(•) Unterstützungsmaterialien
Werkzeuge oder ähnliches).
(z.B.
Handbücher
für
verwendete
Die Aufgabenstellung kann von dreierlei Art sein:
• Herstellung eines zusätzlichen Artefakt
• Veränderung oder Erweiterung eines gegebenen Artefakt
• Analysierung eines gegebenen Artefakt
Mischformen sind hier auch möglich.
2.2.1
Repräsentativität und Verallgemeinbarkeit
Bei näherer Betrachtung liegt die wichtigste Bedrohung der äußere Gültigkeit
nicht an den Versuchspersonen, sondern an den Aufgaben. Die Struktur
und der Inhalt der Aufgaben beeinflussen stark die Verallgemeinerbarkeit der
Ergebnisse. Hier unterscheidet man zwei Arten der Verallgemeinerbarkeit:
• Lokale Verallgemeinerbarkeit
Hier geht es um die Details der Aufgabenstellung (der Inhalt). Eine
falsch gewählte Aufgabe kann das Ergebnis stark abweichen lassen, was
man als repräsentativ für die zu untersuchende Klasse von Tätigkeiten
ansehen müsste. Als hypothetisches Beispiel wird ein Vergleich der
Effizienz und Effektivität von Test/Debugging versus Inspektion betrachtet [1], also geht es um Programmdefekte (Fehler):
– Versehentliche Multiplizieren anstatt Dividieren bei der Berechnung eines gleich ausgegebenen Ergebnisses.
Solche Fehler werden meistens im Test sofort entdeckt, lokalisiert
und bereinigt. Hingegen braucht eine Inspektion erhebliche
Aufmerksamkeit, um solche Fehler zu entdecken.
Methoden der empirischen Softwaretechnik
39
Grundlagen
– Subtile Deffekte, die nur unter sehr speziellen Bedingungen zum
Versagen führen.
Im Gegensatz zu dem obigen Fehler sind solche Fehler im Test
schwierig zu entdecken.
– Defekte, die erst nach einiger Zeit zum Versagen führen
Diese Fehler sind beim Debugging schwierig zu lokalisieren.
Hier ist die Wahl der Aufgabe (des zu untersuchenden Programms) kritisch für die Verallgemeinerbarkeit des Resultats.
Werden die Fehler in dem zu untersuchenden Programm künstlich
eingepflanzt (defect seeding), dann können die Experimentatoren absichtlich oder nicht die Aufgabe manipulieren. Im günstigen Fall steht
noch die Frage, ob die eingepflanzten Defekte ihrer Natur realistisch
sind. Ein solches Experiment wird keine hohe Glaubwürdigkeit erreichen, deshalb sollte man Fehlereinpflanzung vermeiden.
• Globale Verallgemeinerbarkeit
Sie handelt sich um die Übertragung des Ergebnisses auf ein anderes Anwendungsbereich. In der Softwaretechnik gibt es viele Unterschiede, was die Übertragung (Verallgemeinerbarkeit) unmöglich erscheint. Diese Unterschiede betreffen sowohl die Personen, die Softwarebauen, die Methoden und Prozesse als auch die Struktur und
Eigenschaften der Produkte. Diese dramatischen Unterschiede zwischen den verschiedenen Anwendungsbereichen stellen sich eigentlich
nur bei einer globalen Betrachtung ein, wenn man genauer die einzelnen Elemente eines Softwareprozesses oder die einzelnen Merkmale der
Softwareprodukten untersucht, dann gibt es zwar noch große Unterschiede, aber nicht mehr viele verschiedene Klassen. Zum Beispiel bei
der Sicherheit in einem Projekt: ob die Sicherheit eine kritische Eigenschaft oder von nur mäßiger Bedeutung (mit ein paar Ausnahmen) ist.
Im Prinzip kann man Aufgaben finden, deren Ergebnisse sich auf einen
erheblichen Teil aller Softwareprojekte verallgemeinern lassen, da bei
einem kontrollierten Experiment meistens nur ein enger Aspekt untersucht wird. Also sollte man den Einfluss minimieren, der nicht für die
Experimentfrage relevanten Eigenschaften der Aufgabe. Dazu untersucht man, welche Aufgabenstellung am wenigsten zur Festlegung auf
ein bestimmtes Anwendungsfeld führt (Isolation) und welche Bedingungen am besten zur Verallgemeinerbarkeit der Experimentergebnisse
beitragen.
40
Methoden der empirischen Softwaretechnik
2 Experimententwurf
2.2.2
Nötiges Vorwissen
Ein Aspekt, der bei Verallgemeinerung wichtig ist, ist das nötige Vorwissen.
Muss viel Vorwissen vermittelt werden, so gibt es zwei Gefahren:
• Diese Vermittlung verbraucht viel Zeit und Konzentrationsvermögen
der Teilnehmer. Dadurch wird der praktikable Umfang der eigentlichen
Aufgabe begrenzt.
• Es ist schwierig, viel Vorwissen gleichmäßig in die Köpfe der Teilnehmer zu transportieren. Also wird die Homogenität der Versuchgruppen (siehe 2.1.3) beeinträchtigt, was die Variabilität erhöht und
die Trennschärfe reduziert.
Dehalb sollte man die Aufgaben aussuchen, die aus möglichst leicht verständlichen Anwendungsgebieten ist.
2.2.3
Umfang und Skalierung
Ein weiterer Aspekt, der bei der Auswahl der Aufgabe betrachtet werden
muss, ist die Komplexität der Aufgaben. Nach Kritikern ist geringe Komplexität unrealistisch und zerstört die Verallgemeinerbarkeit der Ergebnisse.
Diese Aussage ist oftmals unzutreffend, denn:
• Bei realer Softwareentwicklung kommen ja auch massenhaft Aufgaben
mit geringer Komplexität vor.
• Komplexere Aufgabe haben auch mehr Eigentümlichkeiten, die von
der Experimentfrage ablenken und die Verallgemeinerbarkeit verschlechtern.
Um diese Gründe zu realisieren, sollte man idealerweise bei der Entwicklung
der Aufgabe folgendermaßen vorgehen:
1. Die vermüteten Vor- und Nachteile weisen die einzelnen Versuchbedingungen in einer umfangreichen realen Softwareentwicklung auf.
2. Die Klasse geeigneter Aufgaben muss so umrissen werden, dass sie
sowohl realistisch ist als auch möglichst alle Vor- und Nachteile
berühret.
3. Die Aufgabe soll ”‘klein”’ gewählt werden. Dabei bedeutet ”‘klein”’
einen möglichst geringen Zeitaufwand für die Versuchspersonen.
4. Man skaliert die Aufgabe noch weiter herunter, falls es möglich ist, d.h.
man versucht, von ihrem Umfang Teile zu entfernen, die keinen Einfluss
auf das Experimentergebnisse haben.
Methoden der empirischen Softwaretechnik
41
Grundlagen
2.2.4
Zeitbeschränkung
Eine Zeitbeschränkung bei der Bearbeitung der Aufgaben verbessert die
äußere Gültigkeit, da sie zur Zeitdruck führt, was auch in der Realität
passiert. Außerdem verringert sie auch den Aufwand der Organisation und
Durchführung (Raumbelegung, Überwachung, etc). Andererseits ermöglicht
eine Zeitbeschränkung die Verstärkung des Qualitätsunterschieds der Ergebnisse.
Figure 4: Die wichtigen Eigenschaften von Aufgaben, deren Wirkungen
und die Konsequenzen für die Qualität (Gültigkeit) des Experiments
2.3
Implementierung und Durchführung
Nun werden die Überlegungen über die Durchführung des eigentlichen Experiments behandelt. Bei der Durchführung des Experiments gibt es zwei
mögliche Störungen:
• Verwirungen
• Messversagen
Experimente arbeiten mit Menschen und eventuell auch mit Computern,
deshalb können (werden) bei ihrer Durchführung relativ viele unvorgesehene
Dinge passieren. Aus diesem Grund ist die maximale Robustheit nötig für
den Experimentaufbau. Dies kann man durch die Anwendung folgender zwei
Prinzipien erreichen:
42
Methoden der empirischen Softwaretechnik
2 Experimententwurf
• Einfachheit
– Inhaltliche und strukturielle Einfachheit
Sie betrifft die Aufgabenstellungen (auch die Lösungen).
– Technologische Einfachheit
Sie bedeutet die Vermeidung der komplizierten Messaufbauten,
wie komplexe Arbeitsumgebungen und Hilfsmitteln.
• Redundanz
Sie kann zur Vermeidung der Verwirung oder des Versehens beitragen.
Insbesondere ist sie zur Vermeidung der Messversagen wichtig.
2.3.1
Infrastruktur für Teilnehmer
Hier wird das Experiment aus dem Perspektiv der Versuchspersonen betrachtet. Für Suche nach Robustheit sind die folgenden Überlegungen zu betrachten:
• Die Benutzung eines Softwarewerkzeuges ist problematisch, denn es
muss dafür gesorgt werden, dass alle Versuchspersonen damit gut vertraut sind.
• Allerdings kann das Softwarewerkzeug für das zügige Untersuchen eines
umfangreichen vorgegebenen Artefakts notwendig sein; z.B. Verfügbarkeit der Suchfunktionen (Werkzeug) eines Computers (Artefakt).
• Lösungen handschriftlich abzuliefern, werden gegenüber per Tastatur
eingegebenen Lösungen viele Versuchspersonen verlangsamen.
• Insbesondere, wenn es sich um eine formale Notation handelt (z.B.
Programmcode), ist eine handschriftliche Lösung problematisch, denn
damit sind die Änderungen an teilfertigen Lösungen viel komplizierter
vorzunehmen.
• Andererseits sind Skizzen in den meisten Fällen schneller von Hand auf
Papier anzufertigen als mit einem Softwarewerkzeug.
Diese Überlegungen bedeuten, dass das Experiment besser papierbasiert
durchgeführt wird und nur dort Computerhilfe in Anspruch vorzunehmen, wo
es für die Aufgabe nötig ist. Allerdings gibt es bei einem vollständig papierbasierten Experimentaufbau eine Einschränkung: falls sich die Aufgabe um
die Erzeugung von Programmcode handelt (auch bei anderen Fällen), hat ein
Softwareingenieur in der Realität stets die Möglichkeit, diesen sofort zu validieren (durch Kompilieren und Ausführungstest). Wenn diese Möglichkeit
Methoden der empirischen Softwaretechnik
43
Grundlagen
im Experiment nicht gegeben ist (was bei papierbasierten Experimenten der
Fall ist), werden die Ergebnisse eine kürzere Arbeitszeit und eine schlechtere
Lösungsqualität widerspiegeln, als in Praxis zu erwarten wäre.
Eine Überlegung zur Vermeidung der groben Fehler ist die teilweise
Wiederverwendung von Materialien aus früheren Experimenten.
2.3.2
Infrastruktur für Datensammlung
Jetzt wird das Experiment aus dem Perspektiv der Experimentatoren betrachtet. Das Messversagen ganz auszuschließen, ist unmöglich, deshalb sollte
man alternative Möglichkeiten finden, um die wichtigsten Daten zu erfassen
(Redundanz-Prinzip).
Ein wichtigster Maßstab eines Softwareprozess ist der Zeitbedarf der Versuchspersonen für die Erledigung jeder Aufgabe. Bei Experimenten, die unter
Laborbedingungen stattfinden und kurze Laufzeit haben, ist die Zeit einfach
zu messen (z.B. handschriftliche Angaben der Versuchpersonen). Bei Experimenten, die unter Bürobedigungen stattfinden und lange Laufzeit haben,
ist die Zeitmessung um einiges schwieriger. Hier sind die von Versuchpersonen berichteten Werte (Zeit) oft ungenau und müssen unbedingt durch
unabhängige Beobachtungen redundant abgesichert werden.
Um Fehler bei der Experimentdurchführung zu vermeiden, kann alternativ eine Automatisierung des Ablaufs der groben Experimentschritte ausgeübt werden. Ein Problem bei automatische Abwicklung ist, sie garantiert
nicht die Abwesenheit von Fehlern, selbst wenn sie selber ohne Versagen
abläuft: Beispielweise hat eine Person zu Beginn eine falsche Versuchspersonennummer (ID) eingegeben. Mit genügender Sorgfalt in der Vorbereitung
ist dennoch eine automatische Abwicklung eine gute Hilfe für die Experimentdurchführung.
2.3.3
Pilottest
Ein ”‘frisch”’ fertig aufgebautes Experiment hat fast immer noch Tücken und
Mängel: beispielweise enthalten die Anweisungen mehrdeutige Formulierungen, Inkonsistenzen und Schreibfehler. Aus diesem Grund sollte man nicht
sofort die ”‘echten”’ Versuchspersonen auf diesen Aufbau loslassen. Die Mängel sollten zuerst nach und nach in einer Reihe einzelner Pilottest beseitigt
werden. Dazu kann man die Versuchspersonen benutzen, die aus irgendeinem
Grund nicht in die Versuchsgruppen hineinpassen oder zumindest die den
späteren ”‘echten”’ Versuchspersonen genügend ähnlich sind, damit man ein
realistisches Bild von der Eignung des Versuchsaufbaus und der Aufgaben
erhält.
44
Methoden der empirischen Softwaretechnik
2 Experimententwurf
2.3.4
Datenvalidierung
Die wirksamsten Methoden zur Verbesserung der Robustheit besteht im sofortigen Valiedieren der gesamten Daten: Idealerweise während des Verlauf
des Experiments (Kompilieren und Ausführungstest bei Experimenten, deren
Aufgaben mit Erzeugung von Programmcode zu tun haben).
2.4
Entwurfspläne
Ein Experiment bestehen aus einer Reihe von Tests (Behandlungen). Ein
Experimentplan beschreibt, wie diese Tests aufgebaut und durchgeführt werden. Die Experimentpläne, die am häufigsten in Experimententwürfe benutzt
werden, sind:
• Ein-Faktor-Pläne
Den Plan behandelt nur ein Faktor. Zum Beispiel: zum Vergleich zweier
Entwurfsmethoden zur Herstellung einer Software, die eine alt und eine
neu sind, wird ein Experiment mit 6 Versuchspersonen aufgebaut (d.h.
der Faktor ist die Methode und zwar mit zwei Niveaus – neu und alt).
Versuchsperson
1
2
3
4
5
6
neue Methode
X
alte Methode
X
X
X
X
X
Hier wird die Zuordnung zufällig ausgeübt.
Für einen Faktor mit mehr als zwei Niveaus kann der Plan folgendermaßen erweitert werden:
Versuchsperson
bzw. Versuchgruppe
1
2
3
..
.
Niveau 1 Niveau 2 Niveau 3 · · ·
X
X
X
• Mehr-Faktor-Pläne
Wenn in einem Experiment mehr als ein Faktor manipuliert werden,
Methoden der empirischen Softwaretechnik
45
Grundlagen
dann spricht man von einem faktoriellen Entwurf oder Faktorentwurf.
Der Sinn eines faktoriellen Entwurfs ist es, Interaktionen zwischen den
Faktoren zu studieren. Sei A, B Faktoren mit zwei Niveaus und EA , EB
die zugehörigen Effekten. Sei ferner EAB der Effekt, wenn man beide
Faktoren zugleich ändert. Eine Interaktion ist ein Phänomen, wobei
EAB 6= EA + EB . Die Größe der Abweichung, EA∗B , heißt der Interaktionseffekt: EAB = EA + EB + EA∗B . In diesem Fall nennt man EA
und EB die Haupteffekte. Man unterscheidet die faktoriellen Entwürfe
noch in:
– vollständigen faktoriellen Entwürfen
Alle Kombinationen der Niveaus treten in dem Entwurf auf.
– unvollständigen faktoriellen Entwürfen
Nicht alle (teilweise) Kombinationen treten in dem Entwurf auf.
Zum Beispiel: das Experiment erforscht die Produktivität von zwei
Programmiersprachen (Java und C) in Bezug auf zwei gegebenen Aufgaben. Hier ist der erste Faktor die Wahl der Programmiersprache und
der zweite ist die Wahl der Aufgabe.
Aufgabe
Aufgabe 1
Aufgabe 2
Programmiersprache
Java
C
Versuchsperson 4,6 Versuchsperson 1,7
Versuchsperson 2,3 Versuchsperson 5,8
Dieser Plan kann auch die folgende Form haben:
Aufgabe
1
1
2
2
Programmiersprache
Java
C
Java
C
Versuchsperson
4,6
1,7
2,3
5,8
In diesem Plan ist zu bemerken, dass es sich um einen 2*2 vollständigen faktoriellen Entwurf handelt; zwei Faktoren jeder mit zwei Niveaus
(Java oder C für der erste Faktor und Aufgabe 1 oder 2 für der zweite).
Die Erweiterung dieses Planes für mehrere Faktoren mit beliebigen
Niveaus ist:
46
Methoden der empirischen Softwaretechnik
2 Experimententwurf
1.Faktor · · ·
a11
a12
a13
..
.
n.Faktor
an1
an2
an3
..
.
Versuchsperson
2,15
3,14
10,16
..
.
Neben der Anzahl der Faktoren unterscheidet man die Entwürfe
bassierend auf die Anzahl der zu bearbeitenden Aufgaben in zwei Klassen:
• Extra-Subjekt-Entwurf
Hier hat jede Versuchsperson nur eine Aufgabe zu bearbeiten, so dass
die miteinander verglichenen Gruppen in jedem Fall disjunkt sind.
Dieser Entwurf erlauben als Vorteil umfangreiche Aufgaben.
• Intra-Subekt-Entwurf
Wenn man in einem Experiment nicht genügend viele Versuchspersonen hat, dann kann man so vorgehen, dass eine Versuchsperson mehrere
Aufgaben löst. Folglich werden mehrere separate Messungen vorgenommen. Dieser Entwurf hat die Vorteile:
– Bei gleicher Zahl von Versuchspersonen können mehr Daten erhoben werden.
– Zufällige Unterschiede zwischen den Versuchgruppen können ausgeglichen werden können.
Allerdings muss man bei diesem Entwurf beachten, dass der Reihenfolgeeffekt hier vorkommen kann. Der Reihenfolgeeffekt ist eine Form
von der Bedrohung der inneren Gültigkeit, nämlich die Reifung. Also
kann die Reihenfolge der zu bearbeitenden Aufgaben zur Ermüdung
oder zum Lerneffekt führen.
Eine gute Gegenmaßnahme sind gegebalancierte Experimentpläne. In
einem gegenbalancierten Experimentplan werden alle verschiedenen
Reihenfolgen der Niveaus eines Faktors untersucht, in dem man jede
Versuchsgruppe in entsprechende Untergruppen aufteilt. Durch den
Vergleich bzw. das Zusammenwerfen dieser Untergruppen kann man
Reihenfolgeeffekte wahlweise anlysieren bzw. neutralisieren. Falls alle
Kombination der Reihenfolge im Experimentplan auftreten, so heißt der
Plan vollständig gegenbalanciert, andernfalls teilweise gegenbalanciert.
Ein Beispiel für einen vollständig gegenbalancierten Plan aus dem obigen Beispiel: Erforschung der Produktivität von zwei Programmiersprachen in Bezug auf zwei gegebenen Aufgaben.
Methoden der empirischen Softwaretechnik
47
Grundlagen
Versuchperson
A
B
C
D
E
F
G
H
Behandlung
A1/Java A2/Java
A1/C
A2/Java
A2/C
A1/C
A2/Java A1/Java
A2/Java
A2/C
A1/Java A1/Java
A1/Java
A1/C
A2/Java
A1/C
Versuchperson
I
J
K
L
M
N
O
P
Behandlung
A2/C
A2/Java
A1/Java
A2/C
A1/C
A2/C
A1/C
A1/Java
A2/Java A2/Java
A2/C
A2/C
A1/C
A1/C
A2/C
A1/Java
Dabei bedeutet ”‘A1/C A2/Java”’, dass die Versuchperson zuerst die
Aufgabe 1 mit C und später die Aufgabe 2 mit Java arbeitet.
In der Praxis benutzt man fast nie vollständig gegenbalancierte Pläne,
denn viele der Kombination wären sinnlos. Zum Beispiel: Von der Behandlungen der Versuchpersonen A, C, D, E, F, G, I, K, L, M, N und
O aus dem obigen Beispiel sind keine Erkentnisse zu erwarten. Aus
diesem Grund sollte man nur die Kombination in den Experimentplan
aufnehmen, die voraussichtlich wichtig sind (Zum Beispiel: die Behandlungen der Versuchpersonen B, H, J und P aus dem obigen Beispiel).
3
Beispiel Entwurf: C versus C++
Hier als Beispiel wird der Vergleich zweier Programmiersprache C und C++
eingeführt [2], die eine funktional und eine objektorientierte sind (siehe auch
der Vergleich C++ mit SML [6]). Die Studie geht von einer Hypothese aus,
dass C++ besser als C wegen des Vorteils der Objekt-Orientierung ist, und
wird innerhalb des PSP-Kontexts1 ausgeführt.
Als Versuchspersonen werden Studenten ausgewählt. Sie entwickeln
unabhängig voneinander zehn verschiedenen Programms(die PSP-Aufgabe
#1A-#10A). Diese Aufgaben werden immer erweitert; von einem einfachen
Prozess in der ersten Aufgabe #1A bis zum komplexen Prozess in der letzten Aufgabe #10A. Trotz dieser Erweiterung hat jede Aufgabe die folgende
gemeinsamen Phasen (für die Details der Aufgaben: [7]):
1. Planung
Diese Phase befasst sich mit der Planung von der Entwicklung des
Programms in der Aufgabe.
1
Der Personal Software Prozess (kurz PSP) ist eine Arbeitsmethodik (Prinzipien und
die zugehörige Techniken), mit der ein einzelner Softwareingenieur angeblich die Vorhersagbarkeit und Qualität seiner eigenen Arbeit in fast allen Bereichen der Softwareherstellung
erheblich verbessern kann.
48
Methoden der empirischen Softwaretechnik
3 Beispiel Entwurf: C versus C++
2. Design
Das Design heißt Herstellen eines ”‘high level”’ Designs für das Programm in der Aufgabe.
3. Design-Review (nur für die drei letzten Aufgaben #7A-#10A)
Design-Review ist der Rückblick des hergestellten Designs.
4. Code
Diese Phase betrifft die Implementierung des Designs.
5. Code-Review (nur für die drei letzten Aufgaben #7A-#10A)
Code-Review ist der Rückblick des hergestellten Codes.
6. Kompilieren
Kompilieren heißt hier Kompileren des Programms, bis keine (syntaktischen) Fehler gefunden wurden.
7. Test
Der Test betrifft die Ausführung des Programms und die Korrektur des
Programms, bis alle (semantischen) Fehler behoben wurden.
8. Postmortem
Diese Phase befasst sich mit dem Zusammenfassen und der Auswertung
der Entwicklung.
Die Zuordnung der Studenten und der Programmiersprachen erfolgt nicht
zufällig, sondern die Studenten haben die Freiheit, die Programmiersprache
zu wählen, denn das Ziel der Studie ist nicht der Vergleich der Sprachen für
Leute, die zum ersten Mal die Sprache kennenlernen, sondern für Leute, die
mit der Sprache vertraut sind. Die Studenten bzw. die Versuchspersonen
werden zuerst über PSP in verschidenen Klassen ausgebildet. Die drei ersten
Aufgaben sind von der Studie ausgeschlossen, denn die Versuchspersonen
haben zu diesem Zeitpunkt noch keine Erfahrung über die Studie; also werden
nur die sieben letzten Aufgaben #4A-#10A in der Studie ausgewertet.
Die Variablen in der Studie sind:
• Die unabhängige Variable (der Faktor) in der Studie ist die Auswahl
der Programmiersprache mit zwei Niveaus (C und C++).
• Die mögliche Störvariable ist die Klasse, in der die ”‘PSP-Kurs”’ gehalten ist, aber man kann sie hier als eine zusätzliche unabhängige Variable
sehen.
• Die abhängige Variablen sind:
Methoden der empirischen Softwaretechnik
49
Grundlagen
1. Gesamtdauer:
ist die benötigte Zeit zum Entwickeln aller Programme. Sie stellt
das Gesamtkosten der Entwicklung der Programme dar.
2. Planungszeit:
ist die benötigte Zeit zur Planung der Aufgabe. Die Auswahl
der Programmiersprache hat eigentlich keine Wirkung auf diese
Variable. Der Hauptgrund, warum sie betrachtet wird, ist es zu
wissen, ob andere Faktoren (Störvariablen) außer der Auswahl der
Programmiersprache die Ergebnisse beeinträchtigen.
3. Code zum Test:
ist die benötigte Zeit zur Arbeitung der Aufgabe von Code bis zum
Test. Diese Zeit erfasst außer der Code- und Test-Phase auch die
Kompilierung und den Code-Review. Sie stellt die Kosten der
Phasen dar, die direkt von der Auswahl der Programmiersprache
beeinflußt werden.
4. Relative Code zum Test:
ist die relative benötigte Zeit der Tätigkeiten von Code bis zum
Test. Sie wird folgendermaßen definiert:
die Zeit von Code bis zum T est
der Gesamtdauer
Die Unterschiede in der Ausführung der Phasen, die von der Programmiersprache beeinflusst werden, werden sich in der relativen
Zeit von Code zum Test zeigen.
5. Gesamtdefekt:
ist die gesamte Anzahl der in der Entwicklung der Programme
eingeführten Defekte.
6. Code-Defekt:
ist die Anzahl der in der Code-Phase eingeführten Defekte.
7. Review-Effektivität:
ist ein Maßstab, wie effektiv die Code-Review-Phase ist. Sie wird
folgendermaßen berechnet:
die Anzahl der Def ekte in Code − Review − P hase
die Anzahl der Def ekte in Code − Review−, Kompilieren − und T est − P has
Sie kann es zeigen, ob es einen Unterschied in der Fähigkeit
zum Finden der Defekten in Reviews verschiedener Programmiersprachen gibt. Eine hohe Review-Effektivität bedeutet, dass der
Code gut verständlich ist.
50
Methoden der empirischen Softwaretechnik
3 Beispiel Entwurf: C versus C++
8. Gesamtes Qualitätskosten:
ist die benötigte Zeit zum Beheben der Defekte nach der CodePhase: Code-Review-, Kompilieren- und Test-Phasen. Sie kann es
zeigen, ob die Kosten vom Beheben der Defekte für verschiedene
Programmiersprache unterschiedlich sind.
9. Wiederverwendung:
Würde ein Programm entwickelt, ist es empfohlen, den Code von
vorherigem wiederzuverwenden. Dieser Maßstab betrifft die relative Menge von dem in alle sieben Programmen wiederverwendeten Code.
Um eine relevante Studie zu erhalten, muss man noch die Gültigkeit überprüfen:
• Innere Gültigkeit
Die mögliche Bedrohungen der inneren Gültigkeit sind:
1. Historie
Diese Bedrohung ist für diese Studie nicht so wichtig, denn keine
systematischen Richtungen wurden in der Studie identifiziert [2].
2. Reifung
Diese Bedrohung soll hier betrachtet werden, da die Studie
während eines ganzen Semester gehalten wird. Der Lerneffekt
wird hier dadurch vermieden, in dem die drei ersten Aufgaben
ausgeschlossen wird.
3. Instrumentation
Da die Studie innerhalb des PSP ohne zusätzlicher Instrumentation ausgeführt ist, wird diese Bedrohung als unwichtig betractet.
4. Auswahl
Die Einteilung der Versuchspersonen, welche mit C bzw. C++
arbeiten, soll nach dem Prinizip eines kontrollierten Experiments
zwar zufällig erfolgen, aber aus dem oben erwähnten Ziel der
Studie ist die Zuordnung in der Studie zulässig. Idealerweise
würde die Versuchspersonen aus größerer Population gewählt, dies
ist allerdings unmöglich wegen praktischen Gründe [2].
5. Sterblichkeit
Die Versuchspersonen, die die Studie ausschieden, machte diese
Entscheidung unabhängig von ihrer Auswahl der Programmiersprache, also wird diese Bedrohung als unwichtig betrachtet.
Methoden der empirischen Softwaretechnik
51
Grundlagen
• Äußere Gültigkeit
Bei Verallgemeinerbarkeit der Ergebnisse in dieser Studie betrachtet
man die folgende Aspekte:
1. Verallgemeinerbarkeit der Einstellung (Infrastruktur)
Die Aufgaben sind relativ klein aufgebaut und befassen die Implementierung der mathematischen Funktionen. Die Aufgaben
werden individuell von einem einzelnen Person bearbeitet, was
es bedeutet, dass das Ergebnis für kleine indivieduelle Entwicklungsaufgaben gültig ist. Ob das Ergebnis für größere Aufgaben
gültig ist, muss es noch ausgearbeitet werden.
2. Verallgemeinerbarkeit der (Versuch-)Personen
Die Studie benutzte die M.Sc.- und Ph.D. Studenten, die gut vertraut mit Software Entwicklung sind. Ob das Ergebnis für industrielle Software-Entwickler gültig ist, muss es noch ausgearbeitet
werden.
4
Zusammenfassung
Bei dem Experimententwurf muss man viele Überlegungen beachten, um die
hohe Gültigkeit der Ergebnisse des Experiments zu erhalten.
Diese Überlegungen betreffen erstens die Versuchspersonen. Die Versuchpersonen sollten möglichst gleiche genügende Leistung haben, damit man
gute Trennschärfe der Ergebnisse erhalten kann. Die Motivationsunterschiede
zwischen den verschiedenen Versuchsgruppen bedrohen die innere Gültigkeit
des Experiments. Eine schlechte Motivation kann man mit Teilnahmeanreize
bekämpfen. Bei der Zuordnung der Versuchspersonen in die Versuchsgruppen
ist ein Vortest empfohlen.
Zweitens betreffen die Überlegungen die im Experiment zu lösenden Aufgaben. Die zu lösende Aufgabe ist der wichtigste Faktor bei der Verallgemeinerung der Ergebnisse (äußere Gültigkeit). In diesem Kontext kann die
schlechte Verallgemeinerbarkeit der Ergebnisse erstens in der grundsätzlichen
Natur der Aufgabe (global: Herkunft/Anwendungsbereich) zweitens in den
Details der Aufgabestelllung (lokal) liegen. Man sollte auch den Einfluss
minimieren, der nicht relevant für die Experimentfrage ist.
Die dritte Überlegung betrifft, wie man das Experiment durchführen
sollte. Bei der Durchführung sollte man die Prinzipien von Einfachheit
und Redundanz festhalten, um die Verwirrungen zu vermeiden und von den
Messversagen zu schützen. Ein Versuchsaufbau hat anfangs Tücken und
Mängel, deshalb muss er unbedingt zunächst durch Pilottests ausprobiert.
52
Methoden der empirischen Softwaretechnik
References
Dazu sollte man nicht mit den ”‘echten”’ Versuchspersonen arbeiten. Bei
der Auswertung bzw. Datensammlung kann man eine automatische Abwicklung benutzen, aber dazu muss man zuerst für genügende Sorgfalt in der
Vorbereitung sorgen. Die Zeitbeschränkung der Durchführung des Experiments verbessert die äußere Gültigkeit, die aber die Qualitätsunterschiede
verstärken kann.
Der Experimententwurf kann man bzgl. die Anzahl der zu bearbeitende Aufgabe in zwei aufteilen: Extra-Subjekt-Entwurf und Intra-SubjektEntwurf. Ein Extra-Subjekt-Entwurf hat den Vorteil, umfangreiche Aufgaben in dem Experiment zu benutzen. Ein Intra-Subjekt-Entwurf hat den
Vorteil, mehr Daten zu ergeben. Bei dem Intra-Subjekt-Entwurf muss man
auf die Reihenfolgeeffekte aufpassen. Um diese Effekte zu bekämpfen, kann
man einen gegenbalancierten Experimententwurf benutzen.
References
[1] Prechelt, L.: Kontrollierte Experimente in der Softwaretechnik.
Springer, 2001.
[2] Wohlin et al.: Experimentation in Software Engineering. Kluwer Academic Publishers, 2000.
[3] Victor R. Basili, Richard W. Selby, and D.H. Hutchens. Experimentation
in Software Engineering. IEEE Trans. on Software Engineering, 12(7):
733-743, July 1986.
[4] L. C. Briand, C. M. Differding and H.D. Rombah, ”’Practical Guidelines of Measurement-Based Process Improvement”’, Software Process
Improvement and Practice, 2(4), pp. 253-280, 1996.
[5] C. M. Lott and H. D. Rombach, ”’Repeatable Software Engineering Experiments for Comparing Defect-Detection Techniques”’, Journal of Empirical Software Engineering, 1(3), pp. 241-277, 1996.
[6] R. Harison, L.G. Samaraweera, M.R. Dobie und P.H. Lewis, ”‘Comparing Programming Paradigms: an Evaluation of Funtional and ObjectOriented Programms”’, Software Engineering Journal, pp.247-254, July
1996.
[7] W.S.Humphrey, A Discipline for Software Engineering, Addison Wesley,
1995.
Methoden der empirischen Softwaretechnik
53
Grundlagen
[8] Sjoberg et al: Conducting realistic experiments in software engineering.
In International Symposium on Empirical Software Engineering, 2002.
IEEPress, 2002.
54
Methoden der empirischen Softwaretechnik
Qualitative Measurement
participant observation∗
Luoxin Cai
Abstract
There are a wide variety of methods that are common in qualitative measurement, in this paper we will discuss mainly one of the
most commonly used methods¨Cparticipant observation. In order to
give a complete view of qualitative measurement, the paper will begin
with a brief introduction for the definition and history of qualitative
measurement; various qualitative measurement methods will be introduced afterwards, then with two represented examples participant
observation will be discussed in detail. Finally, my own application
of participant observation about Extreme programming will be presented, and possible future works will be pointed out.
Keywords: qualitative measurement, history, common methods in qualitative
measurement, participant observation, application of participant observation, future work
∗
thanks for the great help from Dirk Wilking, all my workmates participanted in my
observation and Prof. Dr.-Ing. Stefan Kowalewski
Grundlagen
1
Introduction
Qualitative and quantitative measurements are both widely used in research
areas, some researchers believe quantitative measurement is better, since
it¡¯s more exact and precise, easy to calculate with the data collected; some
support the idea qualitative measurement is better, since it considers also
the subject factors during the data collecting and analysis period. In fact,
the debate between the relative advantages of qualitative and quantitative
methods is stronger than almost any other methodological topic in research,
but we all have to admit both measurements are valuable and proper in
specific areas.
In this paper, we mainly focus on the qualitative-oriented measurement
methods, give the general definition, the history, and the breaking points
along the development of qualitative measurement methods, which is explained in Section 2. Section 3 describes three commonly used qualitative
measurement methods and discusses the strengths and also shortcomings of
them. In Section 4, one of the measurement methods¨Cparticipant observation will be discussed in detail with two examples, one from the area of
social science and the other from the field of information technology, then
a small applicaiton of participant observation conducted by myself will be
presented. Section 5 points out the possible future work in the qualitative
measurement research. At the end of this paper, a conclusion about the
qualitative measurement methods will be given.
2
What is Qualitative research
It’s probably difficult to give an exact definition of qualitative measurement
, many researchers or academicians have already tried to define the meaning:
Patton (1980)has written:”Qualitative measurement has to do with the
kinds of data or information that are collected. Qualitative data consist of
detailed descriptions of situations, events, people, interactions, and observed
behaviors; direct quotations from people about their experiences, attitudes,
beliefs, and thoughts; and excerpts or entire passages from documents, correspondence, records, and case histories. The detailed descriptions, direct quotations, and case documentation of qualitative measurement are data from
the empirical world. The data are collected as open-ended without attempting to fit programmed activities or peoples’ experiences into predetermined,
standardized categories such as the response choices that comprise typical
questionnaires or tests.”
Denzin (1998)has written:”Qualitative research can be defined in gen56
Methoden der empirischen Softwaretechnik
2 What is Qualitative research
eral terms as multimethod in focus, involving an interpretive, naturalistic
approach to its subject matter,Qualitative researchers study things in their
natural settings, attempting to make sense of ,or interpret, phenomena in
terms of the meanings people bring to them.”
Judith Preissle has written:”Qualitative research is a loosely defined category of research designs or models, all of which elicit verbal, visual, tactile,
olfactory, and gustatory data in the form of descriptive narratives like field
notes, recordings, or other transcriptions from audio- and videotapes and
other written records and pictures or films.”
But, actually there is no nice and neat definition for qualitative research,
and the qualitative research does not involve a standard set of research techniques or methods that researchers can apply with. In my own opinion,
qualitative measurement is more subjective than quantitative measurement,
the information it produces is not obtained by means of quantification, for example, by statistical process, but mainly by individual or in-depth interviews
or focus groups or participant observation. It typically got very rich and
detailed information, and helps to gain a deeper understanding of the user
experience, but probably just because of the exploratory and open-ended
nature of qualitative measurement, it normally costs much more time and
resource for data collecting and analysis than quantitative measurement.
2.1
History of Qualitative measurement research
It’s really difficult to give a detailed and complete story about the history of
qualitative research. In this paper I will just try my best to present a whole
picture of the qualitative research development from about early 1900s to
now, and hope to include the information as much as possible:
• The first time period is from early 1900s until the World War II
Some history researchers call it ”The Traditional Period” or easily ”The
Early Decades of qualitative research”. In this period, the positivist scientific
paradigm stands on the leading part in qualitative research area, researchers
struggle to write ” objective” accounts of field experience and their observation of society, and they are willing to make their writings, their collected
data and their interpretations as valid, reliable and objective as possible.
The research problems or subjects are seen as ” alien, foreign, and strange
outsiders”, then any opinions or wills from researchers are seen as bias and
prejudices which should be eliminated from the research process.
Rosaldo (1989) describes this period researcher as Lone Ethnographer,
he has written: ” the ethnographer encountered the object of his quest...
Methoden der empirischen Softwaretechnik
57
Grundlagen
Returning home with his data, the Lone Ethnographer wrote up an objective account of the culture studied... This sacred bundle of terms organized
ethnographic texts around four beliefs and commitments: a commitment to
objectivism, a complicity with imperialism, a belief in monumentalism (the
ethnography would create a museumlike picture of the culture studied), and
a belief timelessness (what was studied would never change).”
This period is also the origin of classic ethnography, scholars like Malinowski, Radcliffe-Brown and Gregory Bateson are representatives. Although
today the idea of complicity with imperialism and the commitment to objectivism are sharply doubted, and the belief in monumentalism is already
passing, some researchers are still yearning for that period. Professor Cora
Du Bois has once said in a conference (1980) that:” I feel a distance from the
complexity and disarray of what I once found a justifiable and challenging
discipline.”
• The second time period is from post-War to the 1970s
This period is called ”Modernist Phase” or ”Post-positivist Period”. In this
period, the researchers like Bogdan, Filstead, Glaser and Taylor etc. sought
to formalize the qualitative methods through the use of ” quasi-statistics” and
other rigorous qualitative analysis methods. Howard S. Becker (1957) in his
famous article Problems of Inference and Proof in Participant Observation
has written: ” Participant observations have occasionally been gathered in
standardized form capable of being transformed into legitimate statistical
data. But the exigencies of the field usually prevent the collection of data in
such a form to meet the assumptions of statistical tests, so that the observer
deals in what have been called –quasi-statistics.”
The researchers in this period no longer eagerly seek for the objectivism
of all data collected and methods used, they have began to admit the impossibility to achieve the goal of total objective. Lyn Lofland (1980) once
said in his work: ” this is a moment of creative ferment-scholarly and political. The San Francisco meetings witnessed not simply the Blumer-Hughes
event but a ”counter-revolution”. A group first came to talk about the problems of being a sociologist and a Female, the discipline seemed literally to be
bursting with new ideas: labeling theory, ethnomethodology, conflict theory,
phenomenology and dramaturgical analysis.”
The period is the golden age of formalization qualitative method, and
also the ferment for the creativeness afterwards.
• The third time period is from 1970 to 1980s
58
Methoden der empirischen Softwaretechnik
2 What is Qualitative research
This period includes the contention of a hundred schools of thought; qualitative researchers had various theories, paradigms, methods, strategies and
conceptions to apply with:
Theories
positivism, post-positivism, phenomenology,
ethnomethodology, critical theory, semiotics,
structuralism, feminism, etc
Strategies and formats
case study, methods of historical,
biographical, ethnographic action,
clinical research, etc.
Methods
qualitative interviewing (open-ended and quasi-structured),
observational visual, personal experience,
documentary methods, etc.
Clifford Geertz (1973) argued that:” the old functional, positivist, behavioral, totalizing approaches to the human disciplines were giving way to
a more pluralistic, interpretive, open-ended perspective. All anthropological
writings are interpretations of interpretations. The boundaries between the
social sciences and the humanities had become blurred. Social scientists were
now turning to the humanities for models, theories, and methods of analysis
(semiotics, hermeneutics).... The golden age of the social sciences was over,
and a new age of blurred, interpretive genres was upon us. ”
This period is a mixture of analysis methods, theories and ideas, but we
must point out that: the naturalistic, post-positivist, constructionist and interpretative paradigms have increase gained their strength in research areas.
And there is also another event should pay much attention, that is the appearance of computers as a help tool for data analysis and data collection in,
for example, interviews or participant observation, etc.
• The fourth time period is from mid1980s to 1995
From many research papers, we can also see there are still sub-periods in
the whole period from mid1980s to 1995, but since we only give a brief introduction about the history of qualitative research, we put these sub-periods
together in this paper. Actually this period is a sharp break from the old
and traditional qualitative research method, it’s the result of ferment creativeness, and the area of qualitative research finally welcomes a new and
impressive age. Researchers make new models of methods, representations,
Methoden der empirischen Softwaretechnik
59
Grundlagen
many critical theories, like feminist theory are on the table. Old conceptions
like validity, reliability, and objectivity are deeply in doubt, in the contrast,
the interpretative theories are more common and widely accepted. Rosaldo
(1989) said: ”writers continue to challenge older models of truth and meaning.”
In the area of Participant Observation, the original distant observer is
replaced by a more activated and participated field worker, and the observers
more like to write texts as small-scale tales which are proper to specific
problems and situations.
• The last time period is from 1995 until now
Concerned with this period, there is one Press Company which can’t be
missed-the AltaMira Press with the leader Mitch Allen, the book series from
AltaMira Press bring out the conception of post-experiment: ” Ethnographic
Alternatives publishes experimental forms of qualitative writing that blur the
boundaries between social sciences and humanities. Some volumes in the series...experiment with novel forms of expressing lived experience, including
literary, poetic, autobiographical, multi-voiced, conversational, critical, visual, performance and co-constructed representations.”
At present, the conflict, the debate and the great tension between methods, theories, and conceptions are more and more furious which obviously
need much future work and our new knowledge power.
At the end of this brief history introduction, there are some points should
be directed. Although we have given relative clear time partition for each
period along the qualitative research development, we can’t see the older
conceptions or theories are completely disappears at present, researchers are
still following some old methods under certain conditions; no period has
so many strategies, theories, methods to apply with as present, this is a
good luck for today’s researchers, but also a challenge for methods selection,
and data analysis; many critical issues like race, gender, ethnicity are added
to the qualitative research areas, which actually change the research into a
multicultural process.
2.2
Qualitative and Quantitative measurement
In fact, a long time ago, in 1979, Cook and Reichardt have already given the
difference between Qualitative and Quantitative research:
60
Methoden der empirischen Softwaretechnik
2 What is Qualitative research
Qualitative research
phenomenological
inductive
holistic
subjective centered
process oriented
anthropological world view
relative lack of control
goal:understand actor’view
dynamic reality assumed;”slice of life”
discovery oriented
explanatory
Quantitative research
positivistic
hypothetico or deductive
particularistic
objective centered
outcome oriented
natural science world view
attempt to control variable
goal:find facts and causes
static reality assumed;relative constancy in life
verification oriented
confirmatory
However, the definitions are not exactly right, some qualitative researchers also use quantitative methods under specific conditions for data
analysis, and some quantitative researchers during the data collected period
also use qualitative theories. In my own opinion, I advocate the combination of both qualitative and quantitative methods during research process,
many times qualitative and quantitative methods served to provide complementary findings, only quantitative data or correspondingly qualitative data
is not enough to understand complex social processes and problems. Udo
Kelle (2001) in his paper Sociological Explanations between Micro and Macro
and the Intergration of Qualitative and Quantitative Methods has pointed
out the ” triangulation” metaphor, which is the central concept for method
integration. Udo Kelle at the end of his paper has written:” the best way to
obtain valid explanations of social phenomena is by combining quantitative
survey technology on the one hand and ethnographic investigations into the
structures of meanings and local knowledge in limited cultural settings on
the other.”
Methoden der empirischen Softwaretechnik
61
Grundlagen
2.2.1
The data of both measurements
We all know that the data for quantitative research is mostly numbers, the
researchers use lots of statistic methods to analysis, the normal sequence for
quantitative research can be presented as:
Observe events or present questionnaire →Tabulate →Summarize data
→Analysis →Draw conclusion
The data for qualitaive research is commonly Text or Narrative description(sometimes also charts and diagrams), the researchers analysis these documents to obtain complete knowledge of the social problem under investigation, the sequence can be defined as:
Observe events or asking open-ended questions→Record and
interpret→Continue to observe and ask→Give theories→Draw conclusions
2.2.2
The assumptions of both measurements
Although the trend for present is the combination of both quantitative and
qualitative methods in research process, but we should admit there are still
fundamental differences lie between these two methods, the assumptions hold
by researchers on each side are obviously not the same:
While the quantitative researchers believe the best way to collect the data
is to give fixed formalized questions or tables, the qualitative researchers are
willing to change their questions when they become more and more immersed
into the situation they are investigating; while the quantitative researchers see
any subject they are studying as a single unitary reality, and try to give a valid
and reliable evaluation, the qualitative researchers admit the unavoidable
individual perceptions from observers when they record the information, the
interpretation of the view as a qualitative research.
3
Different Qualitative measurement methods
There are a wide variety of methods commonly used in qualitative research
measurement, and also new and creative methods continuously appearing in
research areas. In this paper, the methods Participant observation,case study
and content analysis will be shortly introduced.
3.1
Participant observation
Since I will introduce Participant Observation in detail in the next section, I
just give the basic knowledge about it here.
62
Methoden der empirischen Softwaretechnik
3 Different Qualitative measurement methods
Smith (1978) has written:” Participant observation is a process of description, analysis, and interpretation in order to understand an everyday
activity more fully.” Stokrocki (1997) has written:” As a systematic study of
an everyday event, such research is search for patterns of contextual behavior and meaning.” Pohland (1976) defined:” Participant observation research
utilizes multi-methods, multi-persons, and multi-findings as a check for validity.”.... There are still many and many researchers or scholars gave meanings
for Participant observation, and as far as I am concerned the central idea is
”immersion”, the researchers’ immersion into local life in order to understand
and exam the real life and gets to know how things work.
3.2
Case study
Probably, case study is the most commonly used qualitative method in the
area of information science. Yin (2002) has given a definition for case study
as: ” A case study is an empirical inquiry which investigates a contemporary phenomenon within its real-life context, especially when the boundaries
between phenomenon and context are not clearly evident.” The method is
normally a descriptive type of study, which involves an in-depth descriptive
record of an individual or group of individuals.
The strength for case study is: it can help the researchers to get a detailed context-depended view of a particular phenomenon especially when it
is impossible to make experiment research. However, there are also disadvantages for case study, first of all just as what we have said, case study
is more about individual person, then it may not be representative of the
general group or population. Secondly, it’s a descriptive method, not for
explanation, so the conclusions about cause-and-effect relationships cannot
be drawn directly. Finally, the data collected by case study is mostly from
the past events, therefore it’s more about the problems or phenomenal to the
memory.
3.3
Content analysis
Mayring (2000) has written:” Qualitative content analysis is a qualitative
oriented method that applies different techniques for a systematic analysis,
mainly of text material gained by interviews, diaries, observation protocols,
or documents.” Not only in the area of information, social science, qualitative content analysis is widely applied in various research fields, like history,
arts, psychology, etc. Holsti (1969) also given a broad definition of content
analysis as: ”it is the any technique for making inferences by objectively and
systematically identifying specified characteristics of messages.”
Methoden der empirischen Softwaretechnik
63
Grundlagen
According to Krippendorff (1980), when applying with content analysis,
people should ask at least six questions:
1. Which data are analyzed?
2. How are they defined?
3. What is the population from which they are drawn?
4. What is the context relative to which the data are analyzed?
5. What are the boundaries of the analysis?
6. What is the target of the inferences?
The benefits from content analysis come from its priority of replication.
Being unobtrusive, and useful in dealing with large volumes of data, content
analysis can offer us a powerful technique for data reduction.
4
Participant observation
Just as what we have defined, in Participant Observation, the researchers
involve in the daily life of groups of people or an organization, a society that
is under investigation. In order to better understand the cultures or relationships in the organization, the researchers must build a good and fixed
collection with the people, participating in what they do and taking with
them about the events that have been observed. The focus is on the situations the people encounter and how they behave in them. However, since
Participant Observation has also developed during a long history, there are
also different modes in them, and two of the representatives are ” role” and ”
Affective participation”.
4.1
4.1.1
The Modes of participant observation
Participant observation as a role
In the type of participant observation as a role, we must further give two
sub-types: The ”passive” participant observer and the ”active” participant
observer for better understanding.
In the first sight, ”passive” is easily understood as: not directly interacts
with the people under study or as little as possible. Most passive observers
believe that only when she or he doesn’t interrupt the ordinary life of the
people, can they best observe the events happen between the people, they
are afraid that the emotions or bias from themselves will bring interferences
which will minimize the powerfulness of the result of their observation. The
advantage for passive observers is obvious: she or he can study the phenomenal more freely, and can withdraw from the situation easily, but on the other
64
Methoden der empirischen Softwaretechnik
4 Participant observation
side, since the observer is not fully immersed in the society she or he wants
to study, some events or behaviors which hidden deeply in the situation can’
be observed by the researcher.
The ”active” participant observers, on the contrast, try their best to participate in the ordinary life of people under study, and integrate his role with
other roles in the society. She or he experiences the ordinary life as other
people, while the time is passing, the research becomes more and more accustomed to the society or organization. Sometimes the researcher behaves
as an observer, sometimes she or he again plays the role as a normal person living in the society. Morris S. Schwartz (1955) in his paper Problems
in Participant Observation has described the situation as ” a shuttle process
in which the observer participates actively at one moment, shifts imaginatively the next moment to observing what he and others have been doing
and then shifts back to the interaction, thereby continuing the participation
uninterruptedly.” Also the good point for active participant observation is:
the observer can better know the subtleties among the interactions between
people.
4.1.2
Affective participation
Since this mode is called ”affective”, we can immediately get the information:
the observer must have some emotional relationship with the people observed.
Some people may ask:” what is the difference between active participant
observer and the affective observer? Since they are seem to both have close
relationship between the people under investigation.” Actually we have to
admit whether you are aware or nor, when you are continuously observing
the people, your own emotions, your sympathy, your likeness, your disgust
and many other feelings are slowly joining your observation.
Nevertheless, this kinds of distortion are not merely bad points, since
accompanied by the involvement, there are often some important events have
happened and need to be noticed, the observer should have the ability to
convert her or his involvement into valuable information.
4.2
Two examples of participant observations
As one of the most popular qualitative methods, participant observation is
applied in many research projects of different areas:
Methoden der empirischen Softwaretechnik
65
Grundlagen
4.2.1
Participant observation in social care
The first example is a qualitative study of older adults where participant observation played a major part of research on the health and social information
needs of dependent adults living at home. The study involved several categories of participants: the clients ( primary subjects receiving home care) and
(as secondary subjects) the formal care workers and other allied professionals including care managers, trainers in care practice and health practitioner
who have direct contacts with the primary subjects. A dual role was assumed
as the researcher was employed as a care worker. Janet Cooper (2004). By
becoming a care worker it was hoped that the researcher would be able to
see the everyday world from the position of the observed, and be able to
interpret the symbols and meanings of daily social interaction.
A purposive sampling strategy was adopted. In order that a real-life
picture would emerge, in-depth study and observational approaches were
adopted as methods. The initial period of fieldwork for participant observation took place over a period of several months, and only when it was
considered by the researcher that trust was well established, were clients and
their families asked to join the study. Nonetheless, after several months of
care work, one client and his relative declined the invitation to participate in
the study and the researcher had to withdrew from the particular situation.
Although the observers try their best to become ’wall paper’, some clients
still regarded the researchers with suspicion, and statement them as the ”spy”.
Field notes were structured around the guidelines including the spatial and
temporal aspects; the goals, feelings; the activities of the observed; the physical objects that are present in the situation. There is a constant trade-off
between fulfilling the daily requirements of care worker and satisfying the
demands made by the care agency, and simultaneously keeping the needs of
the research schedule.
4.2.2
Participant observation in a computer-mediated community
Participant observation can also be applied in the area of computer science.
The second example is a study which explored the complex multimedia performance of an interactive computer-mediated community called Palace. The
findings demonstrate how virtual architecture, visual context, virtual space
and avatars can be used in social interaction in communities on the World
Wide Web. Charles Soukup (2004)
In the research project, participant observation methods were used as a
means of understanding communicative performances. From the perspective
of the ethnography of communication, communication is understood through
66
Methoden der empirischen Softwaretechnik
4 Participant observation
the lived experience of the participants of the speech community. In order to
observe the lived experience of the community members, the researcher participated in and observed the interaction of a multimedia community on the
World Wide Web called ” Palace”. Logging ethnographic data often involves
observing and obtaining as much relevant data as possible. As a source of
data, the observer primarily compiled a detailed record of the verbal interaction of the room. The ”log” function of the Palace’s computer software
provided a precise record of the text-based interaction that was easily saved
and printed. Finally, the field notes recorded both the descriptions of and
the observers’ subjective impressions of the patterned communication performances. The data collection process continued until the patterns related
to the research question were recurring and exhaustive. Over the six months
of data collection, more than 800 pages of data were obtained from the field
notes, log files, images, and other documents.
4.3
My application of participant observation of Extreme
Prgramming
In order to better understand what ”Participant Observation” is, I decided to
make a real work, and to apply this method in my everyday life. Here comes
the chance, in this summer vocation, I made a two month internship in a
software company as a tester. During my working period, the developers in
the company were working on an urgent project, which should be finished in
a short time, so they decided to choose a relatively original method-Extreme
Programming to develop their software, and I had a golden chance to carefully
observe what my workmates were doing everyday, how they completed their
work, and what would be the possible disagreements among them.
4.3.1
The preparation
Since when I got into the project group, the development work has been
operated in the middle period, developers seem to already accustomed to the
environment, not so many conflicts or struggles as in the early period, which
I have heard from my boss, so I decided to make my participant observation
mainly about the effectiveness of ”pair programming” strategy applied in the
Extreme Programming development method.
Comparing many Frameworks for guiding the observation, I choose the
framework which was offered by Robinson in 1993:
• Space. What is the physical space like?
• Actors. Who is involved?
Methoden der empirischen Softwaretechnik
67
Grundlagen
• Activites. What are they doing?
• Objects. What objects are present?
• Acts. What are individuals doing?
• Events. What kind od event is it?
• Goals. What do they to accomplish?
• Feelings. What is the mood of the group and of individuals?
Following these guides, I asked myself those questions before the observation: what are the goals?how to collect data ?which techniques to use ?how
to interpret the information ?how to gain acceptance ?how to analyze the
data ?if is it necessary to use quantitative method for complement ?
4.3.2
The data collection
Actually it is very difficult for my data collecting, since my Germany is really
limited, many times I can’t understand what people were saying, thanks for
the understanding of my workmates, they had much patience to answer my
requirements of translating what they have said into English when I can’t
understand the meaning.
The main data collecting techniques I applied with are taking notes and
making an intensive interview at the end of my observation.The record for
the intensive interview will be presented in this paper; all names used in the
following record are pseudonyms:
Interviewee information:
Name: Felix
Age: 27
Gender: male
Work position: Programmer
Name: Franz
Age: 30
Gender: male Work position: Senior Programmer
Name: Katrin
Age: 26
Gender: female
Work position: Tester
Name: Thomas Age: 35
Gender: male
Work position: Group leader
The original record:
Interviewer:” Hallo everyone, thanks for your participation, today’s interview will be held about 40 minutes, and the content is about your feelings for
the pair programming strategy , in the following time, I will ask you questions around the topic, you can freely to speak out your ideas, please don’t
hesitate, if you have different thoughts from others.Thank you very much.”
Interviewer: ”the first question is very general, how do you think of pair
68
Methoden der empirischen Softwaretechnik
4 Participant observation
programming? Is it good? Or it’s really a disaster.”
Felix (Felix is really active for presenting opinions during the interview):
” Although now I am gradually used to the strategy, my partner and I cooperate better and better, at the early time, I really didn’t know why we
must apply pair programming. Since many times during my programming,
I had to stop and explained to my partner why I wrote this code, what was
the meaning of the functions, and the worst of all, my partner still couldn’t
understand why I did this, maybe he had better ideas, it needed much time
to coordination, really.”
Thomas:” I know from the very beginning, it needs some time to get into
a fluent situation, some programmer get used to it quickly, but most of my
programmers need relatively long time. ”
Interviewer:” why?”
Thomas:” not really sure, but probably because most of the programmers
are very young, 26 or 28 years old, they thought they did better when they
did by themselves, they don’t want to spend time explaining or teaching.
What do you think, Franz? You are very quickly used to pair programming.”
Franz:” en.........there are some meanings, maybe the age is a reason. You
know, different people have different programming habits, they don’t want
other people to always stare at what she or he does, especially for young person, they normally haven’t enough patience to bring the other person along
with their thoughts, they rather program alone.” (Laugh)
Felix:” yes, that was what I thought at the beginning.”
Interviewer: ” What is the greatest difficulty you have met during your
programming time? Can you give an example to confirm?”
Felix:” OK, I am always the first (laugh). The greatest difficulty I met was
at the beginning of the project, my partner and I seemed both want to stand
on a dominate position in the programming, when he was programming, and
I was watching, I intended to give instructions or my advice to him, but you
know, my partner had his own idea, and I insisted on my methods, but he,
you know (laugh again)....., so when I was on turn for programming, he also
gave ideas, but I thought my way was better and didn’t want to listen, now I
think at that time more or less I had bias on my own opinion, sometimes the
ideas suggested from my partner were really good, I should listen to. Then
the greatest difficulty for pair programming, I think, is how to develop a close
and trusted relationship between these two programmers, and depending on
different characters of the programmer, sometimes it needs relatively short
time, but sometimes much time is wasted for coordinating.”
Methoden der empirischen Softwaretechnik
69
Grundlagen
Katrin:”I am not working as a programmer, and not really participating in
the pair-programming, but as I have noticed, at the beginning of the period
the errors from the software are really many, then from time on they are becoming fewer and fewer. One reason, of course, is that our software becomes
stronger and stable, and another reason, I believe, is the better cooperation
between the two partners.”
Thomas:”one of my programmers even went to me and asked me whether it
was possible to change another partner, or let him alone did the job, but I
was insisted on my decision, even though he gave many reasons and some of
them, I had to admit, are convincible. ”
Interviewer: ”then what you have told him?”
Thomas: ”nothing special, I just said that even I have agreed to change another partner for you, you two will still have the same problem in the future,
and nothing will change unless you change some of your own habits and learn
to more understandable.”
Interviewer: ”have you compared this software project with some project
earlier? Is there some big improvement in this project with the strategy of
pair programming?”
Thomas: ”Since the project has not finished jet, I can’t say exactly what
the improvement is, but apparently, just as what Katrin has said, the error
probability is decreased and the programming speed is faster. I am much
confident we can finish our project as the planned schedule.”
Interviewer: ”I really hope so. Felix and Franz, what do you think is the
biggest advantage of pair programming, since you two are turly engaged in
it?”
Franz:”actually, pair programming is fit for small and young companies like
ours, since normally the time for developing software project is shorter and
efficient, then we can firstly push our products into the Market, and earn our
customers. Still, we need great courage to perform this strategy in the first
time, we all know some failed cases about pair programming from the past,
and it takes time to let our programmers get used to it. We can say, until
now our project develops well, the direction points to the right position, but
we should also pay attention to the development in the future. ”
Felix:”As my experience, although at first my partner and I can’t cooperate very well, the coordinate time doesn’t waste much time, now we work
smoothly, and I truly learn much from my partner. There is another advantage for pair programming as well, since we two are both familiar with the
70
Methoden der empirischen Softwaretechnik
4 Participant observation
code, even when one of us is leaving, the other one can tell the succeeded
person about the code, yes it needs some time, but it’s still quicker than
the condition that the following person has to read the code by her/himself
alone, anyway we should avoid the situation that some programmers are leaving during the development period, but who knows.”
Interviewer: ”OK, so Fanz thinks the greatest advantage for pair programming is its efficiency, and best proper for small and young firms. Felix thinks
pair programming is also good for condition changing, right?”
Franz:”yes, that’s my opinion.”
Felix:”right.”
Interviewer:”before we discussed some general opinions about pair programming, now I want to ask some details about it. When two persons sit side by
side in front of the screen, are there some roles for the two persons? Like, for
example, one person creates a method or function, the other one can check
whether the method created by the partner is really fit for the class or still
needs some change.”
Franz:”Yes, of course the pair does different thinking, they should pay attention to different things, since only one of them is technically programming,
the other is only watching. But that is actually the advantage of pair programming, the watching one normally can see the whole scene, therefore has
the capacity to think about the direction of the work, whether goes well or
some problems has happened. ”
Interviewer: ”oh, sorry, I think the following questions are more detailed
ones, and if Mr. Thomas Wolfgang and Katrin have some other things to do,
you can leave now, and thanks so much for the supporting of my job.”
Thomas and Katrin leave
Interviewer: ”OK, let’s continue. In practice, how often will you two change
your position?”
Felix:”It depends on. Pair members can discuss the problem and set the best
solution, some groups just set a fixed rule, like one member is in change of
two hours, then change. But in my group, we have tried the fixed plan firstly,
but found out that’s not a good one, since sometimes I feel tired in one day,
and can’t concentrate on programming in so much long time, sometimes my
partner feel the same way, then we make a deal to have a more flexible plan,
when the programmer often makes mistakes or something like that, we just
change our role.”
Franz:” yes, the pair just discusses and finds out the best solution. In my
Methoden der empirischen Softwaretechnik
71
Grundlagen
group we have a fixed plan, one for about two hours.”
Interviewer:”Do you think it is necessary to purposely organize the pair this
way that one of the pair is more experienced than the other?”
Franz:”If your programmers are not at the same level, of course it’s better
to let the experienced one and a new one make a couple, and during the pair
programming time the new guy can learn something from the senior one and
then become more familiar with the development tools or languages. ”
Felix:”Ja, yes, in my opinion, people at the same level are even more easily
to have conflict with each other, ( laugh).”
Interviewer: ”I think that’s all, Thank you very much for the interview,
and at last can I ask you both to give a conclusion about Pair Programming,
just one or two sentence, not much.”
Felix:”Altogether, Pair Programming is efficient, just need to pay attention
to the cooperation of the pair.”
Franz:” carefully make the decision whether to execute Pair Programming,
some project is truly not for it, and make sure you have the right person. ”
Interviewer: ” again, thanks and wish this project be successful ”
4.3.3
The data Analysis
From the note I have took, and the interview recorded, I successfully got the
conclusion:
First of all, Pair Programming has many advantages like high efficiency, quick
reflection for changing condition, good learning classroom for inexperienced
programmers etc.
Secondly, it also has its own restrictions like long preparing time for pair
coordination, only proper for relatively small project, high demand for good
communication etc.
Thirdly, an experienced, high respectful, goal-oriented project manager is
very important for the execution of Pair Programming, relatively young group
of programmers who can easily accept new strategy is more fitful for Pair
Programming.
All in all, every project method has its advantages and disadvantages, no
method is all-can key for a successful project, use it properly and cautiously,
you can get happy ending.
72
Methoden der empirischen Softwaretechnik
5 Future work
4.4
Advantages and disadvantages of participant
observation
Participant observation is ideal for developing an understanding of how individuals respond to, interact with, and make use of various narual resources.
For the individuals being observed, their opinions and perceptions are their
reality. Understanding those perceptions can not only give the participants
self-reflection, but also provide the researchers with deep insight and perspective she or he may not otherwise gain. This information can then be further
used as resources for analysis. All in all, through Participant observation,
the researchers can from every aspect study the social problems or society
cultures and people’s ordinary life.
But there are still disadvantages of participant observation: firstly, The
researcher must devote a large amount of time (and money) to develop this
complex understanding. Secondly, an ethnographer’s objectivity may decline as he or she spends more time among the members. Thus,the researchers must be aware of bias and how this influences decisions related
to data recording, interpretation, and reporting. But probably the most serious and difficult problem is ”ethics”. C. George Boeree has once said in
his book:”Do you or do you not participate in activities that are illegal or
that you consider immoral or unethical? My own feeling is that you should
not present yourself to the people you are studying as something other than
yourself. You may get carried away and feel like you are becoming one of
them, but they rarely see you that way. Besides which, your goal is to learn
about them, not become them. So your moral and ethical obligations are
yours - and I believe that most groups will respect you for being yourself in
this regard. Whether or not you then engage in illegal activities depends on
your moral/ethical judgments and your willingness to risk legal punishment
in exchange for the trust of the people.”
5
Future work
Although qualitative research measurement has already been used for a long
time, and in various research fields, there is still much future work waiting
for the researcher’s attention.
Probably the most urgent is the validity of qualitative research. Guba and
Lincoln has proposed four criteria for judging the soundness of qualitative
research:
Methoden der empirischen Softwaretechnik
73
Grundlagen
Judging Quantitative Research
internal validity
external validity
reliability
objectivity
Judging Qualitative Research
credibility
transferability
dependability
confirmability
However, for these criteria, there are various voices speaking out, some
researchers argued:” these criteria are just re-labeling the very successful
quantitative criteria in order to accrue greater legitimacy for qualitative research.” Some researchers suggested:” the alternative criteria represent a
different philosophical perspective that is subjectivist rather than realist in
nature.”William M.K.Trochim(2002) ..... Still many and many different ideas
about the criteria presented out, and we believe new ideas and conceptions
will continuously appear in the future.
Then what will be the relatively good enough criteria to judge the validity and reliability of qualitative data? How to evaluate them in qualitative
research? As far as I know, at present no researchers or scholars have already
pointed out an effective method to assess the validity and reliability in qualitative research, and no criteria can be on the table without an amount of
anti-opinions, which, we all know, really need much future work.
6
Conclusion
Although qualitative method has been put into usage for a long time, many
people still can’t tell the exact meaning of it, in order to give a clear and complete view of qualitative method, after a short introduction of the definition
and history of qualitative method, a brief comparison between qualitative
and quantitative research methods, this paper has mainly represented one of
the most commonly used qualitative methods-participate observation. This
method has not only used in the area of social science, anthropology, medicine
but also in computer science and other engineering fields, hopefully in the
future, more and more research projects can make benefit of participate observation and find out some ways to overcome its shortcomings.
References
Florence R. Kluck-hohn The participant Observer Technique in Small Communities American Journal of
Sociology
Willian F. Whate Observational Field-Work Methods in
74
Methoden der empirischen Softwaretechnik
References
Research Methods in the Social Science
Arthur J. Vidich Participant Observation and The Collection and Interpretation of Data American Journal of
Sociology
Morris S. Schoartz Problems in Participant Obsevation
American Journal of Sociology
Patton, Michael Quinn (1980) Qualiatative Evaluation
Methods. Beverley Hills: Sage
Denzin Norman(1998) Introduction:Entering the Field of
Qualitative Research Thousand Oaks:Sage
Levi-Strauss Claude(1963)La
structuralisme.Paris:Esprit
pensée
sauvage
et
le
Beck Howard(1989)Studies in Symbolic Interaction10.
Tricks of the Trade
Holsti, O.R. (1969)Content Analysis for the Social Sciences and Humanities. Reading, MA: Addison-Wesley
Mayring,Phillip (2000)Qualitative
Forum:Qualitative Social Research
Content
Analysis
Krippendorff, K.(1980) Content Analysis: An Introduction
to Its Methodology. Newbury Park, CA: Sage.
Morris S. Schwartz (1955)Problems in Participant Observation The American Journal of Socialogy
Janet Cooper (2004) Using Participant or non-participant
observation to explain information behaviour Information
Research, Vol.9 No 4
Charles Soukup (2004) Multimedia Performance in a
Computer-Mediated Community:Communication as a
Virtual Drama JCMC 9 (4)
C. George Boeree Qualitative Method chapter 11 Shippensburg University
William M.K.Trochim (2002) Qualitative Validity Research Method Knowledge Base
Methoden der empirischen Softwaretechnik
75
Grundlagen
76
Methoden der empirischen Softwaretechnik
Hypothesen und T-Test
Alexander Becher
Keywords: Schätzen, Punktschätzer, Intervallschätzer, Konfidenzintervalle, Hypothesen, Nullhypothese, Alternativhypothese, Testen, α-Fehler, Signifikanz, βFehler, Teststärke, t-Test, Einstichprobenfall, Zweistichprobenfall
Abstract
Der t-Test ist ein statistischer Test zum Überprüfen von Unterschiedshypothesen. Er kann zum Vergleich von normalverteilten
Merkmalen, deren Varianz unbekannt ist, angewandt werden. Bei
nicht normalverteilten Merkmalen kann der t-Test bei großem Stichprobenumfang dennoch angewandt werden. Er ist somit für viele praktische Fragestellungen von Bedeutung.
Grundlagen
1
Einführung und Grundlagen
Die Organisation dieser Arbeit ist wie folgt:
Dieser Abschnitt widmet sich den notwendigen Grundlagen aus der Statistik. Er ist stellenweise absichtlich kurz gehalten, da Details in jedem einführenden Text zu Stochastik oder Statistik nachgeschlagen werden können. Die Darstellung von Schätzern und Konfidenzintervallen ist etwas ausführlicher gehalten, da ein Verständnis dieser Themen für die späteren Teile
wichtig ist.
Abschnitt 2 widmet sich ganz den verschiedenen Arten von Hypothesen. Er führt die zugehörigen Begriffe ein und erläutert die möglichen Formulierungen anhand von Beispielen.
Eine allgemeine Einführung in Tests findet sich im anschließenden Abschnitt 3. Die grundlegenden Eigenschaften und Voraussetzungen eines Tests
werden dort allgemein besprochen und die Probleme bei der praktischen Umsetzung umrissen.
Der t-Test bildet das Thema von Abschnitt 4. Seine verschiedenen
Arten, die dahintersteckenden Modelle sowie ihre Voraussetzungen werden
dargestellt sowie das praktische Vorgehen erläutert.
Der abschließende Abschnitt 5 führt alle Informationen aus den vorhergehenden Abschnitten in einem fiktiven Anwendungsbeispiel zusammen und
erlaubt einen Einblick in die praktische Anwendung dieser Konzepte.
Eine gut zu lesende, verständliche, mit Beispielen versehende und trotzdem theoretisch fundierte Darstellung des größten Teils des Stoffs findet
sich in [GB05], das eine der hauptsächlichen Quellen für diese Arbeit war.
Viele Gedanken zur praktischen Anwendung zusammen mit vielen Beispielen
finden sich in [Bor05]. Hilfreich waren außerdem die Artikel ”‘T-Test”’, ”‘Students t-Verteilung”’, ”‘Zufallsvariable”’, ”‘Schätzen und Testen”’ und ”‘Statistischer Test”’ aus Wikipedia sowie [Sch01].
1.1
Stichproben und Grundgesamtheiten
Mit dem Ausdruck Grundgesamtheit oder Population wird für ein stochastisches Modell (bzw. für einen statistischen Test) die Menge aller prinzipiell
untersuchbaren Objekte bezeichnet. Von der stochastischen Sichtweise aus
entspricht die Grundgesamtheit der Menge Ω des zugehörigen Wahrscheinlichkeitsraumes. Einige Beispiele:
• Für eine Untersuchung der Gehaltsstruktur eines Unternehmens ist
die Grundgesamtheit gleich der Menge der Personen, die sich auf der
Gehaltsliste dieses Unternehmens befinden.
78
Methoden der empirischen Softwaretechnik
1 Einführung und Grundlagen
• Soll die Wirksamkeit eines Medikaments oder einer medizinischen Behandlung untersucht werden, so setzt sich die Grundgesamtheit aus der
Menge aller Patienten zusammen.
• Steht die Wirksamkeit von Entwicklungsmethoden für Software auf
dem Prüfstand, so besteht die Grundgesamtheit aus allen Softwareprojekten.
Eine Zufallsvariable ordnet einem Element aus der Population eine reelle
Zahl1 zu. Andere Bezeichnungen für Zufallsvariablen sind Merkmal oder
Eigenschaft. Formal ist eine Zufallsvariable eine (meßbare) Funktion X :
Ω → R. Für ein Element ω der Grundgesamtheit bezeichnet somit X(ω)
den zugehörigen Wert der Zufallsvariable X. X(ω) stellt eine sogenannte
Realisation der Zufallsvariable X dar.
Beispiele für Zufallsvariablen:
• monatliches Gehalt einer Person in Euro;
• Behandlungsdauer oder -erfolg bei einem bestimmten Patient unter Anwendung einer bestimmten Behandlungsmethode;
• Entwicklungsdauer oder Anzahl der erfüllten Spezifikationsanforderungen bei einer Software, die mit einer bestimmten Methode entwickelt
wurde.
Zufallsvariablen haben eine zugehörige Wahrscheinlichkeitsverteilung P X
(mit P X (x) = P (X ≤ x)). Damit läßt sich der Erwartungswert einer Zufallsvariablen definieren2 :
X
EX =
x · P (X = x) .
(1)
x∈R
Auf ähnliche Weise wird die zu einer Zufallsvariablen gehörende Varianz
definiert:
X
Var X =
(x − E X)2 · P (X = x) .
(2)
x∈R
Eine Zufallsstichprobe kann man als eine Menge von stochastisch unabhängigen, identisch verteilten3 Zufallsvariablen X1 , . . . , Xn ansehen. Die
dazugehörigen Realisationen X1 (ω), . . . , Xn (ω) = x1 , . . . , xn bezeichnet man
1
allgemein: einen Vektor von reellen Zahlen
hier in der Variante für diskrete Zufallsvariablen
3
iid: independent, identically distributed
2
Methoden der empirischen Softwaretechnik
79
Grundlagen
dann als (konkrete) Stichprobe. Die Zahl n bezeichnet den Stichprobenumfang.
Zwei wichtige statistische Kennwerte einer Stichprobe, die im folgenden
noch benötigt werden, sind das sogenannte Stichprobenmittel
n
1X
X=
Xi
n i=1
(3)
und die Stichprobenvarianz
n
1 X
S =
(Xi − X)2 .
n − 1 i=1
2
1.2
(4)
Grundzüge des Schätzens
Beim Schätzen möchte man von den Eigenschaften einer Stichprobe auf
die Eigenschaften der Grundgesamtheit schließen. Die Grundgesamtheit ist
möglicherweise zu groß, um vollständig untersucht zu werden (z. B. die Tagesproduktion einer Fabrik), oder schlichtweg unbekannt (z. B. alle an einer
bestimmten Krankheit leidenden Personen). Daher untersucht man nur eine
endliche Teilmenge der Grundgesamtheit (die Stichprobe).
Das zu untersuchende Merkmal wird durch eine Zufallsvariable modelliert,
deren konkrete Verteilung zunächst unbekannt ist. Oft kann man von einer
Normalverteilung des Merkmals ausgehen oder eine andere Verteilungsform
theoretisch begründen, so daß nur noch die Parameter oder Kennwerte der
Verteilung ermittelt werden müssen. Für eine normalverteilte Zufallsvariable
X ∼ N (µ, σ 2 ) sind z. B. die interessanten Parameter µ ∈ R und σ 2 > 0. Die
Menge aller möglichen Parameter nennt man Parameterraum und bezeichnet
ihn mit Θ ⊂ Rm für m viele Parameter. Im Falle der Normalverteilung ist
also m = 2 und der gesuchte Parametervektor (µ, σ 2 ) = θ ∈ Θ = R × R+ .
Allgemein ist eine Schätzfunktion eine Funktion θ̂(X1 , . . . , Xn ) von n Zufallsvariablen. Das Ergebnis dieser Funktion ist eine neue Zufallsvariable
Xθ . Für jede konkrete Stichprobe kann man somit einen Schätzwert für den
Parametervektor θ berechnen.
Mittels der in (3) bzw. (4) definierten Werte für das Stichprobenmittel
X und die Stichprobenvarianz S 2 erhält man einen Schätzer (X, S 2 ) für die
Parameter einer normalverteilten Zufallsvariablen. Für zwei verschiedene
konkrete Stichproben werden sich im Regelfall zwei verschiedene geschätzte
Parameterwerte ergeben. Daher ist ein Schätzer wieder eine Zufallsvariable
und kein fester Wert.
Ist das Merkmal X nicht normalverteilt, so kann man dennoch seinen Erwartungswert E X und ihre Varianz Var X aus einer Stichprobe schätzen,
80
Methoden der empirischen Softwaretechnik
1 Einführung und Grundlagen
solange der Stichprobenumfang hinreichend groß ist. Eine der Folgerungen des Zentralen Grenzwertsatzes der Wahrscheinlichkeitsrechnung besagt,
daß Stichprobenmittel und -varianz sich mit wachsendem n immer mehr
normalverteilten Zufallsvariablen annähern. In der Praxis kann man diese
Näherung ab einem Stichprobenumfang von etwa n ≥ 30 voraussetzen.
Um verschiedene Schätzer miteinander zu vergleichen, definiert man
wünschenswerte Eigenschaften eines Schätzers. Die wichtigste ist die Erwartungstreue, die besagt, daß der Erwartungswert des Schätzers gleich dem
wahren Parametervektor θ ist. In Formeln:
Eθ [θ̂(X1 , . . . , Xn )] = θ
für alle θ ∈ Θ .
(5)
Wie man nachrechnen kann, sind das Stichprobenmittel X und die Stichprobenvarianz S 2 erwartungstreue Schätzer für die Parameter µ und σ 2
einer Normalverteilung, und für große Stichproben auch approximativ für
Erwartungswert E X und Varianz Var X einer beliebigen Zufallsvariablen
X. Die Verteilung der Zufallsvariablen X und S 2 nennt man auch Stichprobenkennwerteverteilung.
Betrachten wir schließlich noch die Frage, wie stark die erwartete Abweichung des geschätzten Mittelwerts vom tatsächlichen Mittelwert ist. Der
Standardfehler des Mittelwerts σX bezeichnet die mittlere quadratische Abweichung des geschätzten Mittelwerts vom tatsächlichen Mittelwert, also die
Standardabweichung der Zufallsvariable X:
q p
σX = Var X = E (X − µ)2
r
σ2
σ
=
=√ ,
n
n
(6a)
wobei sich die zweite Zeile durch Einsetzen der Definition von X ergibt
und σ 2 = Var X die Populationsvarianz bezeichnet. Die Populationsvarianz
kann man, wenn sie unbekannt ist, aus den empirischen Daten mit Hilfe des
Schätzers S 2 schätzen und erhält so folgende Gleichung für den geschätzten
Standardfehler des Mittelwerts σ̂X :
r
S2
σ̂X =
.
(6b)
n
1.3
Konfidenzintervalle
Der vorige Abschnitt hat sogenannte Punktschätzer eingeführt. Diese berechnen aus einer Stichprobe einen einzelnen Wert. Ein anderer Ansatz besteht
Methoden der empirischen Softwaretechnik
81
Grundlagen
darin, von einer Stichprobe ausgehend ein ganzes Intervall von Werten
anzugeben, so daß dieses Intervall mit hoher Wahrscheinlichkeit den wahren
Wert des Parameters überdeckt. Ein solches Intervall nennt man Konfidenzintervall, einen solchen Schätzer einen Intervallschätzer.
Für eine Stichprobe X1 , . . . , Xn besteht ein Intervallschätzer
K(X1 , . . . , Xn ) für den Parameter θ allgemein aus einer unteren Grenze
θ(X1 , . . . , Xn ) und einer oberen Grenze θ(X1 , . . . , Xn ). Man nennt K = (θ, θ)
einen Intervallschätzer zum Niveau 1 − α, falls
Pθ [θ(X1 , . . . , Xn ) ≤ θ ≤ θ(X1 , . . . , Xn )] ≥ 1 − α
für alle θ ∈ Θ ,
(7)
also die Wahrscheinlichkeit, daß das berechnete Konfidenzintervall den tatsächlichen Parameter überdeckt, mindestens 1 − α beträgt. Intervallschätzer
sind wie schon Punktschätzer selbst wieder Zufallsvariablen. Bezeichnet man
etwas ungenau das berechnete Konfidenzintervall mit K, so läßt sich die Bedingung (7) auch als Pθ (K 63 θ) ≤ α schreiben. Ein solches Intervall bezeichnet man auch als (1 − α)-Konfidenzintervall.
Als Ausgangsbasis für die Konstruktion eines Intervallschätzers dient
im Regelfall ein Punktschätzer. Beispielsweise ergibt sich für n viele normalverteilte Stichprobenvariablen X1 , . . . , Xn ∼ N (µ, σ 2 ) der Punktschätzer
X mit Erwartungswert E X = µ und Standardabweichung σX = √σn . Ist die
Varianz von X bekannt, so kann man hieraus die standardisierte Zufallsvariable Z = X−µ
∼ N (0, 1) bilden.
σX
Zur Bestimmung des Konfidenzintervalls bedient man sich des α-Quantils
der Standardnormalverteilung, das wie folgt definiert ist: zα∗ ist der kleinste
Wert mit P (Z ≤ zα∗ ) = α. Aus dieser Bedingung erhält man durch Umformen
und Einsetzen der Definition von Z die folgenden (1 − α)-Konfidenzintervalle
(KI) für den Erwartungswert einer Normalverteilung bei bekannter Varianz:
∗
−∞, X + z1−α
· σX
unteres KI,
∗
X − z1−α
· σX , ∞
oberes KI,
i
h
∗
∗
α · σ , X + z
X − z1−
zweiseitiges KI.
1− α · σX
X
2
2
Ist die Varianz σ von X nicht bekannt, so ist auch der Wert von σX = √σn
nicht bekannt. In diesem Fall kann man versuchen, σ aus den Daten der
Stichprobe mittels (6b) zu schätzen. In diesem Fall bildet man aus X die
neue Zufallsvariable T = X−µ
. Diese ist jedoch nicht mehr exakt standardσ̂X
normalverteilt, sondern folgt der t-Verteilung mit (n − 1) Freiheitsgraden:
T ∼ tn−1 . Folglich benutzt man bei der Herleitung der Konfidenzintervalle nicht mehr das α-Quantil der Standardnormalverteilung zα∗ , sondern
82
Methoden der empirischen Softwaretechnik
2 Hypothesen
das analog definierte α-Quantil der t-Verteilung t∗n−1;α . Man erhält dann
die folgenden (1 − α)-Konfidenzintervalle (KI) für den Erwartungswert einer
Normalverteilung bei unbekannter Varianz:
−∞, X + t∗n−1;1−α · σ̂X
unteres KI,
∗
X − tn−1;1−α · σ̂X , ∞
oberes KI,
i
h
zweiseitiges KI.
X − t∗n−1;1− α · σ̂X , X + t∗n−1;1− α · σ̂X
2
2
2
Hypothesen
Als Hypothese bezeichnet man allgemein ”‘eine vorläufig durch Beobachtungen oder Überlegungen begründete Annahme oder Vermutung, die zur Erklärung bestimmter Phänomene dient”’ (aus Wikipedia). In der stochastischen Sichtweise ist eine Hypothese eine Vermutung ”‘über die Beschaffenheit
der unbekannten Verteilungsfunktion der Stichprobenvariablen X1 , . . . , Xn ”’
(aus [Sch01]).
Man leitet also z. B. aus einer Theorie verschiedene Aussagen ab, die
nach dieser Theorie als gültig angesehen werden müssen. Diese Vermutungen
möchte man anschließend durch Experimente oder durch statistische Studien
entweder bestätigen oder widerlegen. Beispiele:
• Die Newtonsche Mechanik sagt voraus, daß die Lichtgeschwindigkeit in
zwei relativ zueinander bewegten Bezugssystemen unterschiedlich ist.
Diese Hypothese wurde durch Experimente sehr genau widerlegt.
• Die allgemeine Relativitätstheorie sagt die Ablenkung von Licht in
einem Gravitationsfeld nach einer bestimmten Formel voraus. Diese
Hypothese wurde durch astronomische Messungen bestätigt.
• Ein Hersteller eines Medikaments behauptet, sein Mittel wirke besser
als andere gegen eine bestimmte Krankheit. In einem Doppelblindtest
wird die Gültigkeit dieser Behauptung untersucht.
• Es wird vermutet, daß die Entwicklungszeit einer Software mit der Anzahl der an ihr beteiligten Entwickler wächst.
Die Entscheidung, ob eine Hypothese anzunehmen oder zu verwerfen
ist, geschieht durch Ziehen einer Stichprobe, deren Ergebnisse mit vorher
definierten Schwellenwerten verglichen werden (siehe Abschnitte 3 und 4).
Diesen Vorgang nennt man einen (statistischen) Test.
Methoden der empirischen Softwaretechnik
83
Grundlagen
Man unterscheidet Hypothesen in Unterschieds- und Zusammenhangshypothesen. Eine Unterschiedshypothese liegt vor, falls lediglich ein Unterschied zwischen zwei Merkmalen vermutet wird. Dies ist z. B. in der Behauptung über die Medikamentenwirksamkeit der Fall: Modelliert man die
Wirksamkeit als die Heilungswahrscheinlichkeit, so ist die Aussage, daß diese
für das neue Medikament größer ist als für andere. Hingegen wird bei der
Aussage über die Software-Entwicklungsdauer ein Zusammenhang zwischen
dieser und der Entwicklerzahl behauptet. Eine Zusammenhangshypothese
trifft also eine Aussage über eine Abhängigkeit zweier Merkmale voneinander.
Die Art der Hypothese bestimmt die Art des statistischen Tests zu ihrer
Überprüfung. Beispiele für Verfahren zur Überprüfung von Unterschiedshypothesen sind t-, F-, U- und Wilcoxon-Test. Mögliche Verfahren für Zusammenhangshypothesen sind Regressions- und Korrelationsrechnung.
2.1
Alternativ- und Nullhypothese
Die Hypothese, deren Gültigkeit behauptet wird, bezeichnet man als die
Alternativhypothese. Dieser Name rührt daher, daß die Gültigkeit dieser Hypothese nach dem jeweils aktuellen Kenntnisstand nicht allgemein akzeptiert
ist und sich erst durch einen statistischen Test beweisen muß. Die beiden
o. a. Beispiele über die Wirksamkeit eines Medikaments und die Entwicklungsdauer von Software sind typische Alternativhypothesen. Alternativhypothesen werden i. a. mit H1 bezeichnet.
Zu jeder Alternativhypothese läßt sich die gegenteilige Aussage formulieren, die z. B. für eine Unterschiedshypothese besagt, daß in Wirklichkeit
eben kein Unterschied existiert, oder für eine Zusammenhangshypothese,
daß es keinen Zusammenhang gibt oder dieser anders beschaffen ist als behauptet. Diese gegenteilige Hypothese wird Nullhypothese genannt und mit
H0 bezeichnet. Nullhypothesen werden als gültig erachtet, bis sie durch einen
statistischen Test widerlegt werden können. In den obigen Beispielen wären
die Nullhypothesen, daß ein neues Medikament keine besseren Chancen auf
Heilung bietet als bisherige Medikamente bzw. daß die Entwicklungsdauer
nicht mit der Entwicklerzahl wächst.
Oftmals ist es schwierig, eine umgangssprachlich formulierte Hypothese
in ein stochastisches Modell zu übertragen und sie als mathematische Hypothese zu formulieren. Möglicherweise existieren auch mehrere unterschiedliche mathematische Formulierungen mit der gleichen Aussage wie die
umgangssprachlich formulierte Hypothese. In vielen Fällen ist die präzise und
korrekte Formulierung einer mathematischen Hypothese eine der schwierigsten Aufgaben für die empirische Forschung.
84
Methoden der empirischen Softwaretechnik
2 Hypothesen
Auf die Frage, welche der beiden Hypothesen als Null- und welche als Alternativhypothese zu wählen ist, wird Abschnitt 3.6 noch genauer eingehen.
Typischerweise wird für die Hypothesenformulierung eine bestimmte
Verteilungsform des zugrundeliegenden Merkmals angenommen.
Die
Alternativ- und die Nullhypothese treffen dann Aussagen über einen oder
mehrere Parameter dieser Verteilung. Als Beispiel sei eine Stichprobe mit n
vielen iid Zufallsvariablen X1 , . . . , Xn ∼ N (µ, σ 2 ) gegeben. Die Behauptung
sei, daß der Parameter µ dieser Verteilung sich von einem bestimmten Wert
µ0 unterscheidet. Die Hypothesen lauten dann:
H 0 : µ = µ0
H1 : µ 6= µ0
Nullhypothese
Alternativhypothese
In einem anderen Fall läßt sich vielleicht behaupten, daß Patienten
mit einer bestimmten Vorgeschichte auf eine bestimmte Behandlung besser
ansprechen als andere. Um diese Behauptung zu überprüfen, würden zwei
Gruppen von Patienten in einer Studie untersucht: Gruppe 1 mit Patienten mit einer derartigen Krankheitsgeschichte, Gruppe 2 mit Patienten ohne
diese. Der Behandlungserfolg in Gruppe i sei mit µi bezeichnet. Es ergeben
sich als Hypothesen:
H 0 : µ1 ≤ µ2
H 1 : µ1 > µ 2
Nullhypothese
Alternativhypothese
Hypothesen werden nach mehreren Kriterien unterteilt. Eine Hypothese
wird einfache Hypothese genannt, falls sie von der Form µ = µ0 ist, also nur
durch einen einzelnen Wert des Parameters µ erfüllt werden kann, nämlich
durch den Wert µ0 . Hingegen umfaßt eine zusammengesetzte Hypothese
mehrere mögliche Werte für den Parameter. So wird z. B. eine Hypothese
der Form µ < µ0 durch alle Verteilungen mit einem Parameter µ erfüllt, der
unter dem festen Wert µ0 liegt.
Die obigen Beispiele zeigen, daß eine Theorie es oft erlaubt, eine Hypothese mehr oder weniger genau zu formulieren. Es wird sich (in Abschnitt
3) herausstellen, daß die Durchführung eines statistischen Tests zur Überprüfung einer Hypothese umso leichter ist, je detaillierter sie formuliert wird.
Dabei bedeutet ”‘leichter”’, daß eine kleinere Stichprobengröße ausreichend
ist. Im folgenden werden die verschiedenen Möglichkeiten, Hypothesen zu
formulieren, besprochen und an Beispielen illustriert.
2.2
Gerichtete und ungerichtete Hypothesen
Eine Alternativhypothese der Form H1 : µ 6= µ0 wie im obigen Beispiel bezeichnet man als eine ungerichtete Hypothese. Es wird lediglich behauptet, daß
Methoden der empirischen Softwaretechnik
85
Grundlagen
irgendein wie auch immer gearteter Unterschied vorliegt. Über die Richtung
dieses Unterschieds wird jedoch keine Aussage getroffen.
Im Gegensatz dazu sagt die Alternativhypothese aus dem zweiten Beispiel
voraus, daß die neue Behandlungsmethode besser wirke, die Wirksamkeit also
größer sei als die bisheriger Medikamente. Ebenso wie im ersten Fall wird
ein Unterschied behauptet, jedoch ist hier klar, in welche Richtung dieser
Unterschied gehen soll. Derartige Hypothesen werden daher als gerichtete
Hypothesen bezeichnet.
Wenn θ den Parameter bezeichnet, über den eine Aussage getroffen werden soll, und θ0 ∈ Θ ein fester Wert ist, so ergeben sich je nach Art der
Alternativhypothese die folgenden möglichen Testprobleme:
H0 : θ = θ0 H1 : θ 6= θ0 zweiseitiger Test
H0 : θ ≤ θ0 H1 : θ > θ0 rechtsseitiger Test
H0 : θ ≥ θ0 H1 : θ < θ0 linksseitiger Test
(8)
(9)
(10)
Hierbei liegt dem zweiseitigen Test eine ungerichtete Alternativhypothese
zugrunde, wohingegen rechts- und linksseitiger Test eine gerichtete Alternativhypothese voraussetzen.
Beispiel für einen zweiseitigen Test. Ein Getränkehersteller möchte wissen, ob die von ihm eingesetzte Abfüllmaschine tatsächlich im Mittel die
eingestellte Füllmenge µ0 liefert. Liefert die Maschine eine zu hohe Füllmenge, so verliert der Hersteller Geld, da er mehr Ware verkauft als er abrechnet. Ist die Füllmenge dagegen zu niedrig, so muß der Hersteller mit Verbraucherbeschwerden rechnen. Die Verteilung der Füllmengen kann als Normalverteilung angenommen werden. Die Nullhypothese lautet H0 : µ = µ0 ,
die Alternativhypothese H1 : µ 6= µ0 .
Beispiel für einen linksseitigen Test. Ein Verbraucher möchte wissen, ob
in den von ihm gekauften Getränkeflaschen eventuell weniger Inhalt ist als
auf der Verpackung angegeben und somit vielleicht Grund zur Reklamation
besteht. Wenn der tatsächliche Inhalt größer ist als der angegebene Inhalt,
so wäre dies dem Verbraucher recht. Daher lautet die Nullhypothese H0 :
µ ≥ µ0 , und die Alternativhypothese H1 : µ < µ0 .
Beispiel für einen rechtsseitigen Test. Ein externer Berater wird vom
Getränkehersteller mit einer Optimierung seiner Geschäftsprozesse beauftragt. Der Berater möchte herausfinden, ob der Hersteller Geld verliert, weil
die Füllmenge der Getränkeflaschen zu hoch ist. Ist sie zu niedrig, so ist dies
86
Methoden der empirischen Softwaretechnik
3 Tests und Fehler
für den Berater kein Problem. Die Nullhypothese ist also H0 : µ ≤ µ0 , die
Alternativhypothese H0 : µ > µ0 .
Auch bei Zusammenhangshypothesen kann man zwischen gerichteten und
ungerichteten Hypothesen unterscheiden. Eine ungerichtete Zusammenhangshypothese würde aussagen, daß zwischen zwei Merkmalen ein irgendwie gearteter Zusammenhang besteht, ohne diesen festzulegen. Beispielhypothese: ”‘Anzahl der eingesetzten EDV-Systeme in einer Verwaltung und
ihre Effizienz sind miteinander gekoppelt.”’ Eine gerichtete Hypothese hingegen würde die Richtung des Zusammenhangs festlegen, also z. B. behaupten,
daß Merkmal A wächst, wenn Merkmal B sinkt. Beispielhypothese: ”‘Die
durchschnittlichen Strom- und Heizkosten eines Monats steigen mit abnehmender Durchschnittstemperatur.”’
2.3
Spezifische und unspezifische Hypothesen
Während eine gerichtete Unterschiedshypothese lediglich einen Unterschied
in einer bestimmten Richtung fordert, legt eine spezifische Hypothese zusätzlich den Betrag fest, den dieser Unterschied mindestens haben soll. Analog
drückt eine spezifische Zusammenhangshypothese den vermuteten Zusammenhang mit konkreten (oberen oder unteren) Grenzen für den Korrelationskoeffizienten aus. Es wird also beispielsweise behauptet, jeder zusätzliche
Entwickler verlängere die Entwicklungszeit eines Programms um den Faktor 0,8, oder die Erfolgsquote des neuen Medikaments sei um mindestens 4
Prozentpunkte besser als die bisher benutzten.
Je spezifischer sich eine Hypothese formulieren läßt, desto leichter wird
wiederum ihre empirische Überprüfung. Kann die Theorie nur einen Unterschied oder einen Zusammenhang begründen, ihn aber nicht quantifizieren,
so muß man auf unspezifische Hypothesen zurückgreifen.
3
Tests und Fehler
Wenn die theoretischen hergeleiteten Aussagen in mathematische Hypothesen umgesetzt worden sind, kann man die empirische Überprüfung mittels
eines Tests angehen. Dazu wird eine Stichprobe gezogen und das Ergebnis mit vorher festgelegten Bereichen verglichen, in denen die Alternativhypothese entweder akzeptiert oder verworfen wird. Die Menge aller möglichen
Stichprobenergebnisse (der Stichprobenraum) wird also partitioniert in zwei
Mengen K und K{ . Die Menge K ist der Ablehnungsbereich der Nullhypothese und wird als kritischer Bereich des Tests bezeichnet. Die NullhyMethoden der empirischen Softwaretechnik
87
Grundlagen
pothese wird also verworfen, falls die konkrete Stichprobe x1 , . . . , xn in den
kritischen Bereich K fällt.
Sind die Hypothesen bezüglich eines Parameters θ formuliert, so erhält
man die Aufteilung des Stichprobenraums aus einer Aufteilung des Parameterraums Θ in zwei Teilmengen Θ0 und Θ1 , die der Nullhypothese H0 : θ ∈ Θ0
bzw. der Alternativhypothese H1 : θ ∈ Θ1 entsprechen und somit direkt aus
diesen abgelesen werden können.
In der Praxis geschieht die Überprüfung, ob eine Stichprobe in den kritischen Bereich fällt oder nicht, mittels einer aus der Stichprobe berechneten
reellwertigen Zufallsvariablen, der sogenannten Prüfgröße oder Teststatistik. Ein Beispiel für eine Prüfgröße ist das Stichprobenmittel X. Der kritische Bereich ist dann als Intervall (k ∗ , ∞), (−∞, k ∗ ) oder [−k ∗ , k ∗ ]{ =
(−∞, −k ∗ ) ∪ (k ∗ , ∞) gegeben. Die Zahl k ∗ heißt kritischer Wert. Die
Entscheidung fällt durch Vergleich des konkreten Wertes der Teststatistik mit
dem kritischen Wert Ist z. B. der beobachtete Wert der Teststatistik kleiner
als der kritische Wert, so wird die Nullhypothese bei einem rechtsseitigen
Test beibehalten und bei einem linksseitigen Test verworfen.
Da jede Stichprobe auf dem Zufall beruht, besteht die Möglichkeit, daß
ein Test eine falsche Entscheidung trifft: Die Nullhypothese könnte verworfen werden, obwohl sie in Wirklichkeit zutrifft. Es könnte auch sein, daß
eine in Wirklichkeit geltende Alternativhypothese nicht als richtig erkannt
wird. Ein guter Test sollte natürlich derartige Fehler nur mit einer geringen Wahrscheinlichkeit begehen. Die Wahl von akzeptablen Grenzen für
diese Fehlerwahrscheinlichkeiten muß vor der Durchführung der Stichprobe
geschehen und bestimmt den kritischen Bereich K des Tests.
3.1
α-Fehler (Fehler 1. Art)
Als Fehler 1. Art oder α-Fehler wird die Ablehnung einer in Wirklichkeit
zutreffenden Nullhypothese durch einen Test bezeichnet. Die Wahrscheinlichkeit, einen solchen α-Fehler zu begehen, heißt Irrtumswahrscheinlichkeit.
Der Irrtum, der dabei begangen wird, besteht demnach in der Verwerfung
der Nullhypothese, obwohl diese richtig ist.
Die Grundlage für eine Entscheidung des Tests gegen die Nullhypothese
sind die Werte der konkreten Stichprobe. Die Irrtumswahrscheinlichkeit ist
die Wahrscheinlichkeit, daß das Ergebnis der Stichprobe x1 , . . . , xn im kritischen Bereich K liegt, obwohl die tatsächliche Verteilung des Merkmals
mit der Nullhypothese im Einklang ist. Für eine einfache Nullhypothese
der Form H0 : θ = θ0 ergibt sich die Irrtumswahrscheinlichkeit direkt zu
Pθ ((X1 , . . . , Xn ) ∈ K), wobei Pθ die Verteilungsfunktion einer mit Parameter
θ verteilten Zufallsvariable bezeichnet.
88
Methoden der empirischen Softwaretechnik
3 Tests und Fehler
Im Falle einer zusammengesetzten Nullhypothese H0 : θ ∈ Θ0 gibt es für
jeden möglichen Wert des Parameters θ eine andere Verteilung des Merkmals.
Somit ergeben sich auch mehrere Werte für die Irrtumswahrscheinlichkeit,
jeweils in Abhängigkeit vom tatsächlichen Wert des Parameters.
3.2
Statistische Signifikanz
Ein Test, dessen Irrtumswahrscheinlichkeit (also die Wahrscheinlichkeit für
einen Fehler 1. Art) klein ist, wird signifikant genannt. Die Signifikanz ist
eine der wichtigsten Eigenschaften eines Tests, da sie eine obere Schranke
für die Irrtumswahrscheinlichkeit angibt. Formal sagt man, ein Test ist signifikant zum Niveau α, wenn gilt
Pθ ((X1 , . . . , Xn ) ∈ K) ≤ α
für alle θ ∈ Θ0 ,
(11)
d. h. die Wahrscheinlichkeit, daß der Test sich bei gültiger Nullhypothese
H0 : θ ∈ Θ0 gegen diese entscheidet (Pθ ((X1 , . . . , Xn ) ∈ K)), ist höchstens α.
Das kleinste solche α ∈ [0, 1] heißt Signifikanzniveau des Tests.
In der praktischen empirischen Forschung werden üblicherweise Tests mit
Signifikanzniveau α = 5 % oder α = 1 % benutzt. Die Ergebnisse derartiger
Tests werden als (statistisch) signifikant bzw. sehr signifikant bezeichnet.
Man beachte, daß das Signifikanzniveau eine Eigenschaft des Tests ist,
und nicht von der konkreten Stichprobe abhängt. Es muß daher vor Durchführung der Stichprobe festgelegt werden, welches Signifikanzniveau für die
zu untersuchenden Hypothesen angebracht ist. Ein kleines Signifikanzniveau
bedeutet ein kleines Risiko, die Nullhypothese abzulehnen, obwohl sie in
Wirklichkeit zutrifft. Je nach den Konsequenzen dieser Entscheidung ist α
entsprechend zu wählen. Eine fortführende Diskussion mit Beispielen findet
sich in Abschnitt 3.6.
3.3
Effektgrößen
Mit wachsendem Stichprobenumfang wird es immer ”‘leichter”’, eine Alternativhypothese auf einem beliebig kleinen Signifikanzniveau abzusichern. Das
heißt, wenn man die Stichprobe nur beliebig groß macht, erhält man immer ein Ergebnis, bei dem die Nullhypothese zu verwerfen ist, selbst wenn
die Abweichung von der Hypothesenbehauptung sehr klein ist. Der Grund
dafür ist die Abnahme der Stichprobenvarianz σX = √σn mit wachsendem
Stichprobenumfang n.
Je nachdem, welche Konsequenzen die Ablehnung der Nullhypothese mit
sich bringt, ist der entstehende Aufwand aber eventuell nicht für beliebig
Methoden der empirischen Softwaretechnik
89
Grundlagen
kleine Effekte gerechtfertigt, sondern erst ab einer bestimmten Größe des Effekts. Mit Effekt wird hierbei die Größe der Abweichung des tatsächlichen
Parameters von dem Wertebereich der Nullhypothese bezeichnet. Eine spezifische Hypothese ist ein gutes Beispiel für eine Behauptung, die die Größe
des postulierten Effekts spezifiziert.
Eine Effektgröße läßt sich prinzipiell für fast jeden praktisch relevanten
Test definieren. Im Falle von Unterschiedshypothesen handelt es sich dabei
z. B. um die Differenz zwischen zwei verschiedenen Stichproben, relativiert
an der Varianz der zugrundeliegenden Zufallsvariablen. Diese Definition der
Effektgröße dient der Vergleichbarkeit verschiedener Studien untereinander.
Bei einer Effektgröße von = 0,2 spricht man von einem schwachen, bei
= 0,5 von einem mittleren und bei = 0,8 von einem starken Effekt.
Die Festlegung einer Effektgröße vor Bestimmung eines Tests erlaubt es,
den Stichprobenumfang passend zu dimensionieren, um unnötigen Aufwand
zu vermeiden und dennoch verwertbare Ergebnisse zu erhalten. Sie erfordert
allerdings eine sehr genaue Kenntnis der vermuteten Zusammenhänge, aus
denen sich die vermutete Größe des Effekts ergeben soll.
3.4
β-Fehler (Fehler 2. Art)
Die andere Art von Fehler, neben einem α-Fehler, die ein Test begehen kann,
besteht darin, eine in Wirklichkeit zutreffende Alternativhypothese zu verwerfen. Dies entspricht der Situation, daß die Theorie stimmt, dies aber
aufgrund der Zufälligkeit des Stichprobenergebnisses nicht erkannt wird. Als
Konsequenz wird die vermutete Aussage für falsch erachtet und weiterhin die
Gültigkeit der Nullhypothese angenommen.
Derartige Fehler werden als Fehler 2. Art oder als β-Fehler bezeichnet.
Die Wahrscheinlichkeit für ihr Auftreten hängt wie die Wahrscheinlichkeit für
α-Fehler vom wahren Wert des gesuchten Parameters θ ab. Der Test wird
sich gegen die Alternativhypothese entscheiden, falls das Ergebnis der Stichprobe außerhalb seines kritischen Bereichs liegt, also falls x1 , . . . , xn 6∈ K
gilt. Ist θ ∈ Θ1 der wahre Parameterwert (d. h. die Alternativhypothese
trifft zu), dann beträgt die Wahrscheinlichkeit für einen Fehler 2. Art
β(θ) = Pθ (X1 , . . . , Xn 6∈ K) (d. h. die Alternativhypothese wird vom Test
verworfen).
Im Gegensatz zu Fehlern 1. Art werden Fehler 2. Art nicht durch
eine obere Schranke für ihre Wahrscheinlichkeit kontrolliert. Bei der
Auswahl eines für die konkrete Fragestellung geeigneten Testverfahrens
wird lediglich eine Grenze für α-Fehler vorgegeben. Aus allen Tests, die
diese Bedingung erfüllen, wird dann derjenige mit der passendsten βFehlerwahrscheinlichkeit ausgewählt. Es ist jedoch nicht vorhersagbar, wie
90
Methoden der empirischen Softwaretechnik
3 Tests und Fehler
klein die β-Fehlerwahrscheinlichkeit letztendlich wird.
Für weitere Details sei auf Abschnitt 3.6 verwiesen.
3.5
Teststärke
Die Teststärke eines Tests ist eng mit der β-Fehlerwahrscheinlichkeit verwandt. Sie ist definiert als 1 − β(θ) für alle θ ∈ Θ. Andere Bezeichnungen
sind Güte, Macht, Power oder Trennschärfe. Man beachte, daß die Güte für
θ ∈ Θ0 der α-Feh”-ler”-wahr”-schein”-lich”-keit entspricht. Für θ ∈ Θ1 ergibt
sich hingegen 1 − β(θ) = 1 − Pr{Fehler 2. Art}.
Anschaulich bedeutet eine große Güte, daß der Test mit hoher
Wahrscheinlichkeit die Nullhypothese verwerfen wird, falls die Alternativhypothese zutrifft. Dies läßt sich auch direkt aus der Definition ablesen: Falls
die Alternativhypothese zutrifft, entspricht die Güte der Wahrscheinlichkeit,
keinen Fehler 2. Art zu begehen.
Die Teststärke wird von verschiedenen anderen Größen beeinflußt: Sie
nimmt zu mit wachsendem Signifikanzniveau α, mit wachsender Effektgröße
und mit wachsendem Stichprobenumfang n. Sie sinkt mit wachsender Varianz der Stichprobenvariablen. Außerdem hat ein einseitiger Test eine höhere
Teststärke als ein zweiseitiger Test.
3.6
Festlegen von Testanforderungen
Bei der Untersuchung einer Fragestellung auf ihre Richtigkeit hin gibt es viele
Möglichkeiten, die Hypothesen und Parameter eines Tests zu wählen. Dieser
Abschnitt beschäftigt sich mit der Auswahl der richtigen Möglichkeiten unter
praktischen Gesichtspunkten.
Es wurde bereits erwähnt, daß diejenige der beiden Hypothesen als Nullhypothese gewählt werden sollte, deren fälschliche Ablehnung die gravierenderen Konsequenzen nach sich zieht. Dies liegt daran, daß die Wahrscheinlichkeit für einen solchen Fehler 1. Art durch ein vorgegebenes Signifikanzniveau α beliebig klein gehalten werden können. So wird man bei
Fragestellungen, die bei falscher Beantwortung zu einem Risiko für Leib und
Leben von Menschen führen können (z. B. in der Medizin, bei der Personenbeförderung oder im militärischen Bereich), ein wesentlich kleineres Signifikanzniveau wählen als bei Fragestellungen, deren falsche Beantwortung
lediglich zu einer peinlichen Situation führen könnte (z. B. ein Verbraucher,
der ein Produkt zu Unrecht reklamiert).
Die typischen Werte α = 0,05 und α = 0,01 wurden bereits erwähnt. Für
die oben angesprochenen sensiblen Tests kommen allerdings durchaus auch
niedrigere Signifikanzniveaus wie α = 0,001 in Betracht.
Methoden der empirischen Softwaretechnik
91
Grundlagen
Weiterhin ist es erwähnenswert, daß die Werte für das α- und βFehlerniveau voneinander abhängen, so daß nicht beide gleichzeitig verringert
werden können, außer durch Vergrößerung des Stichprobenumfangs. Ein
Test mit kleinem α hat eine höhere β-Fehlerwahrscheinlichkeit (und damit
eine geringere Teststärke) als ein ähnlicher Test mit größerem α und gleicher
Stichprobengröße.
Kann man die Nullhypothese nun mit dem Wissen ablehnen, dabei nur
sehr unwahrscheinlich einen Fehler zu begehen, bleibt die Frage, ob die Alternativhypothese damit auch akzeptiert werden kann. Für unspezifische
Hypothesen ist diese Frage natürlich sofort zu bejahen. Bei spezifischen
Hypothesen sieht es jedoch anders aus. Der zu testende Parameter liegt
vielleicht in Wirklichkeit zwar innerhalb des kritischen Bereichs, in dem die
Nullhypothese abzulehnen ist; aber er könnte dennoch außerhalb des Bereichs liegen, in dem die spezifische Alternativhypothese als gültig anzuerkennen ist. Ebenso ist es denkbar, daß das Ergebnis einer Stichprobe weder die
Ablehnung von H0 noch die von H1 zuläßt.
Man kann zeigen, daß zwischen den Größen α, β, und n ein Zusammenhang besteht, der es erlaubt, bei gegebenem α, β und (deren Werte
aus inhaltlichen Überlegungen festgelegt oder gefolgert wurden) den Stichprobenumfang derart zu berechnen, daß solche Indifferenzbereiche gerade
vermieden werden.
Schließlich ist noch zu untersuchen, wie ob die Beweiskraft einer
Studie für die Akzeptanz der Alternativhypothese ausreicht.
Ein
weitverbreiteter Vorschlag besagt, um als akzeptabler Beleg für die Alternativhypothese gewertet werden zu können, müsse ein Testergebnis eine β-Fehlerwahrscheinlichkeit von wenigstens viermal der αFehlerwahrscheinlichkeit haben.
Es sei noch einmal darauf hingewiesen, daß diese Parameter Eigenschaften
des Tests darstellen und nicht im nachhinein aus einer bereits vorhandenen
Stichprobe berechnet werden sollten.
3.7
Herleitung eines Tests aus einem Intervallschätzer
Als Basis für die Bestimmung des kritischen Bereichs eines Tests
kann ein Intervallschätzer für den interessierenden Parameter θ dienen.
Für ein vorgegebenes Signifikanzniveau α berechnet man ein (1 − α)Konfidenzintervall für θ, wobei für einen zweiseitigen Test ein zweiseitiges
Konfidenzintervall, für einen linksseitigen Test ein unteres Konfidenzintervall und für einen rechtsseitigen Test ein oberes Konfidenzintervall gewählt
wird. Einsetzen des gesuchten Parameters θ und Umformen ergibt dann
den gewünschten kritischen Wert, wie im nachfolgenden Beispiel verdeutlicht
92
Methoden der empirischen Softwaretechnik
4 t-Test
wird.
Angenommen, der Mittelwert eines normalverteilten Merkmals mit
bekannter Varianz soll einem rechtsseitigen Test auf Niveau α mit H1 : µ > µ0
unterzogen werden. Die Signifikanzbedingung lautet:
Pµ ((X1 , . . . , Xn ) ∈ K) ≤ α
für alle µ ≤ µ0 ,
und das zugehörige (obere) Konfidenzintervall für den Mittelwert ist
σ
∗
K = K(X1 , . . . , Xn ) = X − z1−α · √ , ∞ ,
n
wobei
Pµ (µ 6∈ K) ≤ α
für alle µ ≤ µ0 .
Einsetzen von K liefert:
σ
∗
Pµ (µ < X − z1−α
·√ )
n
√ X −µ
∗
= Pµ ( n ·
> z1−α
)
σ
≤ α .
√
∗
Es liegt also nahe, Z = n · X−µ
als kritisals Teststatistik und z1−α
σ
chen Wert zu wählen, mit dem sich daraus ergebenden kritischen Bereich
∗
, ∞), in dem die Nullhypothese verworfen wird. Da der Mittelwert
K = (z1−α
µ jedoch nicht bekannt ist, setzt man die Grenze µ0 zwischen Nullhypothese
√
0
und Alternativhypothese stattdessen ein, und erhält Z = n · X−µ
als Testσ
statistik. Wie man sich leicht überzeugt, ist damit die Signifikanzbedingung
immer noch für alle µ ≤ µ0 erfüllt.
Analog ergeben sich die kritischen Bereiche K = (−∞, zα∗ ) für einen links∗
∗
seitigen und K = (−∞, −z1−
α ) ∪ (z
1− α , ∞) für einen zweiseitigen Test.
2
4
2
t-Test
In vielen praktisch interessanten Anwendungsfällen ist nur wenig über die
tatsächliche Verteilung des Merkmals bekannt. Vielfach ist zwar die Annahme einer Normalverteilung begründet, aber die Varianz der Verteilung
ist unbekannt. Ist dies der Fall, so liegt die Idee nahe, die Varianz ebenso
wie den Mittelwert aus den Stichprobendaten zu schätzen. Dieser Gedanke
führt auf den t-Test.
Methoden der empirischen Softwaretechnik
93
Grundlagen
Der t-Test ermöglicht es, Aussagen über den Mittelwert eines Merkmals
zu treffen, ohne die Varianz der zugrundeliegenden Verteilung zu kennen.
Die Anwendung des t-Tests setzt voraus, daß das interessierende Merkmal
einer Normalverteilung folgt. Ist dies nicht der Fall, so kann man den tTest trotzdem anwenden, wenn der Stichprobenumfang groß genug ist (ab
etwa n ≥ 30), da dann aufgrund des Zentralen Grenzwertsatzes das Stichprobenmittel X angenähert normalverteilt ist. Das Ergebnis gilt dann nur
approximativ, für n ≥ 30 ist der Approximationsfehler aber vernachlässigbar
klein.
Die Grundlage des t-Tests ist die sogenannte Student-t-Verteilung, auf
deren Herleitung hier nicht eingegangen wird. Die t-Verteilung hat einen
Parameter n, die Freiheitsgrade der Verteilung. Ist eine Zufallsvariable X
t-verteilt mit n Freiheitsgraden, so schreibt man dies als X ∼ tn . Die
Teststatistik T des t-Tests ist eine t-verteilte Zufallsvariable, die aus den
Punktschätzern (3) und (4) für Stichprobenmittelwert und Stichprobenvarianz ähnlich wie in den Abschnitten 1.3 und 3.7 wird:
T = T (X1 , . . . , Xn ) =
4.1
X − µ0 √ X − µ0
= n· √
.
σ̂X
S2
(12)
Der t-Test für eine Stichprobe
Wir betrachten zunächst den einfachen Fall, in dem eine Stichprobe eines
einzelnen Merkmals X gezogen wird. Voraussetzung ist, wie oben dargelegt,
daß X entweder normalverteilt ist oder aber der Stichprobenumfang n ≥ 30
ist. Die zu testende Alternativhypothese trifft eine Aussage über den Mittelwert µ des Merkmals und ist entweder eine zweiseitige, eine rechtsseitige
oder eine linksseitige Hypothese.
Beispiel 1. Eine Fachzeitschrift testet die Qualität des automatischen
Weißabgleichs einer Digitalkamera. Hierzu schießt die Redaktion n = 100
Bilder des gleichen Motivs mit bekanntem Weißpunkt und ermittelt für jeden Schnappschuß den von der Kamera gewählten Weißpunkt. Die Frage ist,
ob der durchschnittlich von der Kamera gewählte Weißpunkt µ gleich dem
wahren Weißpunkt µ0 ist, es handelt sich also um einen zweiseitigen Test mit
H0 : µ = µ0 . Der t-Test kann wegen der hohen Stichprobengröße unabhängig
von der tatsächlichen Verteilung angewendet werden.
Beispiel 2. Ein Jäger vermutet, daß sein Jagdgewehr eine Abweichung nach
rechts zeigt. Er gibt fünf Schüsse auf eine Zielscheibe ab und mißt die Entfernung vom Mittelpunkt in der Horizontalen. Mit diesen Daten führt er einen
94
Methoden der empirischen Softwaretechnik
4 t-Test
rechtsseitigen Test H1 : µ > 0 durch. Da die Abweichung einer Vielzahl von
Einflüssen unterliegt, wird sie als normalverteilt angenommen. Der t-Test
kann also auch bei dieser geringen Stichprobengröße zum Zuge kommen.
√
√ 0 (siehe GleDie entsprechende Teststatistik des t-Tests ist T = n · X−µ
S2
ichung (12)), die kritischen Bereiche sind K = (t∗n−1;1−α , ∞) für einen
rechtsseitigen Test, K = (−∞, t∗n−1;α ) für einen linksseitigen Test und
K = (−∞, −t∗n−1;1− α ) ∪ (t∗n−1;1− α , ∞) für einen zweiseitigen Test (Herleitung
2
2
analog zu Abschnitt 3.7).
4.2
t-Test für unabhängige Stichproben
In vielen Fällen aus der Praxis kommt in einer Studie nicht nur ein Merkmal
vor, sondern es werden mehrere Merkmale erhoben und miteinander verglichen. So interessiert z. B. der Unterschied zwischen dem Behandlungserfolg zweier Therapietechniken oder die Wirksamkeit zweier Lehrmethoden,
jeweils modelliert als zwei Zufallsvariablen X und Y . Dies ist der Zweistichprobenfall. Man nennt X und Y auch Treatments.
Zwei Stichproben heißen voneinander unabhängig, falls ihre jeweiligen
Stichprobenvariablen voneinander unabhängig sind. Dies kann z. B. dadurch
realisiert werden, daß zur Erhebung der Merkmale X und Y jeweils unterschiedliche Personen4 untersucht werden. Beispiel : Medikamententest –
Patienten aus Gruppe 1 werden mit Medikament A, Patienten aus Gruppe 2
mit Medikament B behandelt. Werden die Merkmale an ein und demselben
Objekt erhoben (z. B. Blutwerte vor und nach einer Medikamentengabe), so
handelt es sich um abhängige Stichproben, die mit dem Verfahren aus dem
nächsten Abschnitt behandelt werden müssen.
Man beachte, daß für X und Y nicht unbedingt dieselbe Anzahl von Messungen vorliegen muß. So können z. B. n Stichprobenvariablen X1 , . . . , Xn
für X existieren und gleichzeitig m 6= n Stichprobenvariablen Y1 , . . . , Ym für
Y . Die Voraussetzungen für die Anwendbarkeit des t-Tests (neben der Unabhängigkeit der Stichprobenvariablen voneinander) sind, daß X normalverteilt
ist oder n ≥ 30 gilt und daß Y normalverteilt ist oder m ≥ 30 gilt.
Die Hypothesen treffen im Fall unabhängiger Stichproben keine Aussagen
mehr über den Erwartungswert einer Zufallsvariablen, sondern über den Unterschied der Erwartungswerte der beiden Zufallsvariablen X und Y :
H 0 : µX = µY
H 0 : µX ≤ µY
H 0 : µX ≥ µY
4
H1 : µX 6= µY
H 1 : µX > µ Y
H 1 : µX < µ Y
zweiseitiger Test
rechtsseitiger Test
linksseitiger Test
allgemein: Objekte aus der Grundgesamtheit
Methoden der empirischen Softwaretechnik
95
Grundlagen
2
Bezeichnen X, SX
, Y , SY2 die Schätzer für Stichprobenmittel und -varianz
von X1 , . . . , Xn bzw. Y1 , . . . , Ym , so benutzt der t-Test für unabhängige Stichproben folgende Prüfgröße T :
X −Y
T =q 2
.
SX
SY2
+ m
n
(13)
Der Wert dieser Prüfgröße wird gegen den kritischen Wert einer tVerteilung mit f Freiheitsgraden getestet, wobei der genaue Wert von f von
den Stich”-pro”-ben”-um”-fän”-gen und den geschätzten Varianzen abhängt.
Im Spezialfall, daß die Varianzen von X und Y zwar unbekannt sind, aber
bekannt ist, daß Var X = Var Y gilt, ist f = n + m − 2. Der kritische Bereich
K ist gegeben durch:
(−∞, −t∗f ;1− α ) ∪ (t∗f ;1− α , ∞)
zweiseitiger Test
(t∗f ;1−α , ∞)
rechtsseitiger Test
(−∞, t∗f ;α )
linksseitiger Test
2
2
Abschließend sei noch angemerkt, daß man den t-Test verallgemeinern
kann, so daß nicht nur ein Unterschied zwischen den beiden Mittelwerten
erkannt wird, sondern auch die Größe dieses Unterschiedes getestet wird.
4.3
t-Test für abhängige Stichproben
Können wir die Unabhängigkeit zweier Stichproben nicht voraussetzen, so
müssen wir unser Modell etwas modifizieren. Wir modellieren die Stichproben als eine Menge von Paaren von Zufallsvariablen (X1 , Y1 ), . . . , (Xn , Yn ),
wobei Xi und Yi nicht voneinander unabhängig sein müssen. Dies ist
dann nicht der Fall, wenn die beiden Werte am selben Untersuchungsobjekt gemessen wurden, z. B. Hebeleistung eines Gewichthebers vor und nach
Beginn einer Diät. Der t-Test für unabhängige Stichproben kann nicht zur
Anwendung kommen, da wir die beiden Mittelwerte X und Y nicht mehr als
unabhängig betrachten und entsprechend nicht mehr die Varianzen gemäß der
Methoden aus dem vorigen Abschnitt schätzen können. Stattdessen bilden
wir die Differenz der beiden Zufallsvariablen D = X − Y und erhalten so für
jedes Paar (Xi , Yi ) eine neue Stichprobenvariable Di = Xi − Yi .
Das restliche Vorgehen ist analog zum Einstichprobenfall, nur daß die
Stichprobe aus D1 , . . . , Dn zusammengesetzt ist. Die möglichen Hypothesen
96
Methoden der empirischen Softwaretechnik
5 Anwendungsbeispiel und Probleme
lauten also:
H 0 : µD = 0 H 1 : µ D =
6 0 zweiseitiger Test
H0 : µD ≤ 0 H1 : µD > 0 rechtsseitiger Test
H0 : µD ≥ 0 H1 : µD < 0 linksseitiger Test
Die Prüfgröße ist
T =
√
n·
D
,
SD
p
2
wobei SD =
SD
die geschätzte Standardabweichung der Differenzenverteilung D ist. T folgt einer t-Verteilung mit n − 1 Freiheitsgraden, die
kritischen Werte sind also dieselben wie in Abschnitt 4.1.
5
Anwendungsbeispiel und Probleme
Zum Abschluß sollen alle besprochenen Punkte noch einmal an einem fiktiven
Beispiel zur Anwendung kommen, um ihr Zusammenspiel untereinander herauszuarbeiten.
5.1
Fragestellung und Hypothesenformulierung
Wir betrachten den Fall, daß ein Veranstalter einer jährlich stattfindenden
wissenschaftlichen Konferenz untersuchen möchte, ob es für die Qualität der
eingereichten Beiträge besser ist, das Ende der entsprechenden Frist von
einem Freitag auf einen Sonntag zu verlegen. Um dies herauszufinden, vergibt
er für diverse termingebundene Abgaben von wissenschaftlichen Assistenten
nach dem Zufallsprinzip entweder einen Freitag oder einen Sonntag als Abgabetermin und bewertet die abgegebenen Arbeiten.
Als Ergebnis erhält er zwei Stichproben für die Variablen QFr und QSo ,
die die Qualität der eingereichten Arbeiten mit Stichtag Freitag bzw. Sonntag darstellen. Da untersucht werden soll, ob die Verlegung des Termins
auf Sonntag einen Vorteil bringt, lautet die erste Hypothese HSo : µSo > µFr ,
wobei µFr und µSo die Mittelwerte darstellen. Die entsprechend entgegengesetzte Hypothese besagt, daß die Verlegung keinen Vorteil bringt, und wird
als HFr : µSo ≤ µFr formuliert.
Nach dem ersten Prinzip eines jeden Verwaltungsapparats (”‘Das haben
wir schon immer so gemacht.”’) wird es für eine eventuelle Terminverlegung
einen Rechtfertigungsdruck geben. Wird jedoch nichts verändert, so sind
bis auf die Möglichkeit einer statistischen Fehlentscheidung keine negativen
Methoden der empirischen Softwaretechnik
97
Grundlagen
Konsequenzen zu erwarten. Von daher sind Null- und Alternativhypothese
wie folgt zu wählen:
H0 = HFr : µSo ≤ µFr
H1 = HSo : µSo > µFr
Damit sich der Aufwand der Terminverschiebung auch lohnt, legt der Veranstalter einen mindestens geforderten Qualitätsunterschied von q0 Punkten auf seiner Qualitätsskala fest. Es handelt sich also bei dem gegebenen
Testproblem um einen Test mit rechtsseitiger (gerichteter), spezifischer Unterschiedshypothese.
5.2
Testauswahl und Anforderungsbestimmung
Der Veranstalter nimmt an, daß die Qualität außer von der Abgabefrist noch
von vielen anderen Faktoren abhängt und dementsprechend normalverteilt
ist. Da ihm die Streuung (die Varianz) jedoch nicht bekannt ist, wird er
diese aus den erhobenen Daten schätzen. Trotzdem kann er davon ausgehen,
daß die Varianz bei Abgabe an einem Freitag gleich der Varianz bei Abgabe an einem Sonntag ist. Da die Arbeiten unabhängig voneinander entstehen und insbesondere von unterschiedlichen Merkmalsträgern stammen, handelt es sich um unabhängige Stichproben. Beide Punkte zusammengenommen führen auf den t-Test für unabhängige Stichproben aus Abschnitt 4.2
als geeignetes Testverfahren. Da für das Merkmal eine Normalverteilung
angenommen wurde, kann der Test auch mit kleinen Stichproben durchgeführt werden, was es dem Veranstalter erspart, 60 Beiträge zu bewerten.
Als nächstes ist die Irrtumswahrscheinlichkeit festzulegen. Da die Konsequenzen einer Terminverschiebung zwar nicht gravierend sind, dem Veranstalter aber eventuell einige Umstände bereiten könnten, entschließt er
sich, den Termin nur zu verschieben, falls er einen signifikanten Unterschied
feststellt. Somit legt er α = 0,05 fest.
Da er einen Unterschied von mindestens q0 Punkten fordert, kann er
sowohl die Effektgröße als auch die β-Fehlerwahrscheinlichkeit bestimmen
und berechnet aus diesen Größen einen Stichprobenumfang n, der bei jedem
möglichen Ergebnis eine eindeutige Entscheidung erlaubt. Auf diese Weise
läuft er nicht Gefahr, ein indifferentes Ergebnis zu erhalten und die Stichprobe wiederholen zu müssen.
5.3
Durchführung
Nun sind alle freien Parameter bestimmt, und die Erhebung der Stichprobe
kann beginnen. Als Ergebnis erhält der Veranstalter eine konkrete Stichprobe
98
Methoden der empirischen Softwaretechnik
References
So
q1Fr , . . . , qnFr , q1So , . . . , qm
mit n vielen bewerteten Arbeiten, die an einem Freitag abgegeben werden mußten, und m vielen, deren Abgabetermin an einem
Sonntag lag.
Gemäß (13) berechnet er aus diesen Daten zunächst das Stichprobenmittel und die Stichprobenvarianz sowohl für QFr als auch für QSo und aus
diesen die Prüfgröße T . Da die Varianzen als gleich vorausgesetzt wurden,
ist T t-verteilt mit n + m − 2 Freiheitsgraden. Den kritischen Bereich für
die Prüfgröße bestimmt der Veranstalter für diesen rechtsseitigen Test zum
Niveau α als (t∗n+m−2;1−α , ∞).
Schließlich überprüft er, ob der berechnete Wert für die Teststatistik innerhalb oder außerhalb des kritischen Bereichs liegt. Liegt der Wert innerhalb
des kritischen Bereichs, so schlußfolgert der Veranstalter, daß die Verlegung
der Abgabefrist auf einen Sonntag die Qualität der eingereichten Arbeiten
signifikant verbessern würde. Auf diese Weise erreicht er durch die Verlegung
eine bessere Konferenz auf Kosten des Wochenendes vieler Autoren.
References
[Bor05] Jürgen Bortz. Statistik für Human- und Sozialwissenschaftler.
Springer, 6. auflage edition, 2005.
[GB05] Ulrike Genschel and Claudia Becker. Schließende Statistik. Springer,
2005.
[Sch01] Volker Schmidt. Stochastik für informatiker, physiker, chemiker
und wirtschaftswissenschaftler. http://www.mathematik.uni-ulm.
de/stochastik/lehre/ss01/stochInfWi/vs1.ps, Juli 2001. Vorlesungsskript an der Universität Ulm.
Methoden der empirischen Softwaretechnik
99
Mehrfaktorielle Versuchspläne und
Messwiederholungen
Sebastian Wehlmann
Grundlagen
1
Grundlagen
Im ersten Kapitel soll zunächst der Sinn und Zweck einer Varianzanalyse erläutert werden. Danach werden einige, für die Behandlung von Varianzanalysen wichtige, Begriffe vorgestellt. Anhand eines Beispiels von verschiedenen
medizinischen Behandlungsformen wird anschließend ausführlich das Prinzip
der einfaktoriellen Varianzanalyse vorgestellt, welches als Grundlage für die
zwei- und mehrfaktorielle Varianzanalyse gilt.
1.1
Motivation
Die Varianzanalyse (kurz: ANOVA = ”ANalysis Of VAriance”) wird dazu
benutzt, Differenzen zwischen Mittelwerten abzusichern ähnlich wie dies der
t-Test liefert. Der t-Test vergleicht dabei immer die Mittelwerte zweier
Versuchsobjekte miteinander und überprüft die Wahrscheinlichkeit der gefundenen Mittelwertsdifferenz unter Annahme der Nullhypothese. Ist diese
Wahrscheinlichkeit sehr gering, so besteht mit einer bestimmten Fehlerwahrscheinlichkeit α ein systematischer Unterschied zwischen den Versuchsobjekten.1
Der große Vorteil der Varianzanalyse gegenüber dem t-Test liegt nun in
der Untersuchung großer Mengen an Mittelwerten. Während beim t-Test
wie beschrieben für jedes Mittelwertpaar ein eigener Test durchgeführt werden muss, kann die Varianzanalyse direkt alle Mittelwerte in die Berechnung aufnehmen. Würde man statt einer Varianzanalyse mehrere t-Tests
machen, so könnte sich das α-Niveau vergrößern, da die α-Fehler aller tTests aufsummiert werden müssen. So kann es sein, dass zwar jeder einzelne
t-Test gegen das a priori festgelegte Niveau testet, dieses Niveaus sich jedoch zu einem größeren Gesamt-α-Niveau addieren. Man spricht hier auch
von α-Fehlerkumulierung (kumulieren = anhäufen). Ein weiteres ”Problem”
bei der Durchführung mehrerer t-Tests ist die Tatsache, dass hierbei immer
nur Teile der gesamten Messwerte in die Analyse mit eingehen. Bei drei
zu vergleichenden Gruppen berücksichtigt ein einzelner t-Test zum Beispiel
lediglich 2/3 aller Versuchsobjekte (gleiche Stichprobengröße vorausgesetzt).
Die Teststärke der Varianzanalyse ist also für die Behandlung von mehr als
zwei Mittelwerten größer als die der entsprechenden t-Tests.
1
Für eine genaue Beschreibung des t-Tests sei an dieser Stelle auf die entsprechende
Ausarbeitung verwiesen.
102
Methoden der empirischen Softwaretechnik
1 Grundlagen
1.2
Begriffe
Zum Verständnis der Varianzanalyse sind einige Begriffe grundlegend. Der
wohl wichtigste Begriff ist dabei die Varianz. Die Varianz gibt die mittlere
Abweichung jedes einzelnen Wertes vom Mittelwert einer Verteilung an.
Formell bedeutet dies:
n
P
(xi − x)2
i=1
2
σ
bx =
n−1
Dabei beschreibt n die Anzahl aller Werte, xi den i-ten Wert der Variablen
x und x den Mittelwert aller Werte von x.
Die Summe über alle quadrierten Abweichungen vom Mittelwert (der Term
im Zähler), wird oftmals als Quadratsumme (QS) bezeichnet.
n
P
Es gilt: QSx = (xi − x)2
i=1
Der Nenner der Varianz beschreibt die Anzahl der Freiheitsgrade df .
Hier gilt: dfx = n − 1
Man kann die Varianz also auch als Differenz von Quadratsumme und Freiheitsgrad schreiben:
QSx
σ
bx2 =
dfx
Letztere Schreibweise wird im folgenden bevorzugt verwendet.
Das Merkmal, dessen Varianz durch eine Varianzanalyse untersucht wird, bezeichnet man als abhängige Variable. Im Gegensatz dazu beschreibt eine
unabhängige Variable diejenige Variable, welche Einfluss auf das Ergebnis der Varianzanalyse haben kann. U.a. wird die Varianzanalyse durch die
Anzahl der unabhängigen Variablen klassifiziert. So wird etwa eine Varianzanalye, die den Einfluss einer unabhängigen Variablen auf die abhängige
Variable überprüft als ”einfaktorielle Varianzanalyse” bezeichnet.
Die gewählte Unterteilung der unabhängigen Variablen bezeichnet man als
Faktor. Wird beispielsweise eine unabhängige Variable ”Parteien” in 5
Parteien unterteilt, so spricht man von einem 5 fach gestuften Faktor.
Ein weiterer wichtiger Begriff ist der des Treatments. Werden randomisierte
Stichproben unterschiedlich behandelt, so wird die unabhängige Variable als
Treatmentfaktor oder kurz Treatment bezeichnet.
1.3
Prinzip der einfaktoriellen Varianzanalyse
Das Grundprinzip der einfaktoriellen Varianzanalyse (auch ”unifaktorielle
Varianzanalyse” genannt) soll in diesem Kapitel näher erläutert werden.
Methoden der empirischen Softwaretechnik
103
Grundlagen
Dabei wird zunächst in allgemeiner Form die Terminologie eingeführt, welche
dann durch ein konkretes Beispiel veranschaulicht werden soll. Anhand dieses
Beispiels werden Grundlagen zu Nullhypothesen, Quadratsummenzerlegungen und Signifikanztests erörtert, welche für das weitere Verständnis der Varianzanalyse unabdingbar sind und in späteren Kapiteln immer wieder auftauchen und gebraucht werden.
1.3.1
Terminologie
Zur Darstellung dieser Daten verwendet man eine Datenmatrix, welche allgemein aus p Spalten für eine p fach gestufte unabhängige Variable und n Zeilen
für n viele Versuchsergebnisse besteht. x22 repräsentiert somit beispielsweise
den zweiten Wert der zweiten Faktorstufe.
Die Summe aller Werte einer Faktorstufe i wird mit Ai bezeichnet. Der
Mittelwert Ai aller Werte einer Faktorstufe i ergibt sich, wenn man die
Summe aller Werte der entsprechenden Faktorstufe durch die Anzahl n selbiger Werte teilt. Desweitern kann die Gesamtsumme G aller Messwerte aller
Faktorstufen bestimmt werden sowie deren Mittelwert G.
Allgemeine Darstellung:
Faktor A
1
2
x11 x12
x21 x22
..
..
.
.
···
···
···
xm1
..
.
xm2
..
.
xn1
xn2
Ai =
n
P
···
···
···
···
i
x1i
x2i
..
.
xmi
..
.
xni
···
···
···
···
···
···
···
p
x1p
x2p
..
.
xmp
..
.
xnp
xmi
m=1
Ai = Ai /n
p
p
n P
P
P
xmi =
Ai
G=
m=1 i=1
i=1
G = G/(n · p)
Zur weiteren Illustration diene nun folgendes Beispiel:
Es sollen drei Behandlungsmethoden, die sich durch unterschiedliche
Medikamente A, B und C unterscheiden, bzgl. ihres Heilungserfolges (hier
messbar als ganze Zahl zwischen 1 und 15) verglichen werden. Dazu werden
104
Methoden der empirischen Softwaretechnik
1 Grundlagen
jeweils 4 Personen mit den unterschiedlichen Medikamenten behandelt.
Insgesamt nehmen also 3 · 4 = 12 Personen an der Untersuchung teil. In
diesem Beispiel sind die Behandlungsmethoden die unabhängige Variable
und der Heilungserfolg die abhängige Variable.
Behandlungsmethoden
A
7
8
6
7
Summen (Ai ):
28
Mittelwerte (Ai ): 7
1.3.2
B
10
11
11
12
44
11
C
11
12
12
13
48
12
Nullhypothese
Die Häufigste Hypothese, die mit der einfaktoriellen Varianzanalyse überprüft wird, ist die sogenannte Nullhypothese. Sie besagt, dass sich alle
Mittelwertparameter µi der entsprechenden Faktorstufen nicht unterscheiden.
Es gilt: H0 : µ1 = µ2 = · · · = µp
1.3.3
Quadratsummenzerlegung
Die einfaktorielle Varianzanalyse geht nun von folgendem Ansatz aus: Eine
durch die Gesamtvarianz aller Messwerte ermittelte Unterschiedlichkeit in
den einzelnen Versuchsergebnissen wird auf deren Abhängigkeit zu den verschiedenen Stufen der unabhängigen Variablen geprüft. Bei genügend großer
Abhängigkeit wird die H0 verworfen und behauptet, die unterschiedlichen
Stufen der unabhängigen Variablen führen zu signifikant unterschiedlichen
Ergebnissen.
1.3.4
Totale Quadratsumme
Als totale Quadratsumme (QStot ) bezeichnet man die Quadratsumme, welche
zur Bestimmung der Varianz aller Messwerte benötigt wird. Diese Gesamtvarianz ergibt sich durch Division der Summe der quadrierten Abweichungen
aller Messwerte vom Mittelwert und der Anzahl der Freiheitsgrade der VariMethoden der empirischen Softwaretechnik
105
Grundlagen
anz (vgl. Kapitel 1.2):
m
P
σ
bx2 =
(xi − G)2
i=1
n−1
Für das Beispiel muss also zunächst der Mittelwert aller Messwerte gebildet
werden:
G = 28+44+48
= 120
= 10
12
12
Desweiteren benötigen wir die quadrierten Abweichungen aller Messwerte
von G:
A
9
4
16
9
m
P
B
0
1
1
4
C
1
4
4
9
(xi − G)2 : 38 6
18
i=1
Wird nun noch die Summe über alle Spaltensummen gebildet, so erhalten
wir die totale Quadratsumme QStot :
QStot =
p
n
X
X
(xmi − G)2
i=1 m=1
Auf das Beispiel bezogen bedeutet das: QStot = 38 + 6 + 18 = 62
2
Die Gesamtvarianz σ
btot
ist dann nach obiger Formel die Differenz der totalen
Quadratsumme und der Anzahl der Freiheitsgrade. Da für die Anzahl der
Freiheitsgrade gemäß allgemeiner Definition dftot = n · p − 1 gilt, ergibt sich
insgesamt:
p P
n
P
(xmi − G)2
2
σ
btot
= QStot /dftot = i=1 m=1
n·p−1
2
Konkret: σ
btot
=
1.3.5
62
11
≈ 5,63
Treatmentquadratsumme
Als nächstes wird nun der Teil der Unterschiedlichkeit zwischen den
gemessenen Werten bestimmt, der auf die unterschiedlichen Stufen der
unabhängigen Variablen zurück zu führen ist. Man nehme an, dass lediglich
diese unterschiedlichen Stufen für die Varianz verantwortlich wären, dann
dürften sich die Messwerte einer Faktorstufe innerhalb dieser Stufe nicht
106
Methoden der empirischen Softwaretechnik
1 Grundlagen
unterscheiden. Als beste Schätzung ergibt sich hier der Durchschnittswert
jeder Stufe, da dieser unter der obigen Annahme gleich dem tatsächlichen
Wert sein muss.
Für das Beispiel ergibt sich damit folgende Datenmatrix:
A
7
7
7
7
B
11
11
11
11
C
12
12
12
12
Um die Unterschiedlichkeit nun zu bestimmen, werden (wie bei der
Bestimmung der totalen Quadratsumme QStot ) wieder die quadrierten Abweichungen der Messwerte vom Gesamtmittelwert G aufsummiert. Konkret
bedeutet das, dass die quadrierten Abweichungen von G = 10 zu bestimmen
sind:
A
9
9
9
9
2
n · (Ai − G) : 36
B
1
1
1
1
4
C
4
4
4
4
16
Die Spaltensummen repräsentieren wiederum die Summe der quadrierten Abweichungen, die nur vom entsprechenden Medikament abhängen.
Die Treatmentquadratsumme QStreat berechnet sich nun aus der Summe
aller Spaltensummen.
p
P
Es gilt: QStreat =
n · (Ai − G)2 = 36 + 4 + 16 = 56
i=1
Für die Anzahl der Freiheitsgrade der QStreat gilt folgende Überlegung: Von
den p Treatmentstufenmittelwerten können bei festgelegtem G genau p − 1
Werte variieren.
Es gilt: dftreat = p − 1
Für die Varianz gilt demnach:
n·
2
σ
btreat
= QStreat /dftreat =
2
Und im Speziellen: σ
btreat
=
56
2
p
P
(Ai − G)2
i=1
p−1
= 28
Methoden der empirischen Softwaretechnik
107
Grundlagen
1.3.6
Fehlerquadratsumme
Der Teil der Varianz, der nicht auf den Treatmentstufen beruht, wird als
Fehlervarianzanteil bezeichnet und ist auf Messungenauigkeiten, unterschiedliche Begabung oder Motivation etc. zurück zu führen. Aufgabe
ist nun, die Größe dieses Fehlervarianzanteiles zu bestimmen. Dazu wird
zunächst der Anteil, der idealerweise ausschließlich auf der entsprechenden
Faktorstufe beruht, eliminiert. Die Überlegungen zur Treatmentquadratsumme haben gezeigt, dass dieser am Besten durch die Mittelwerte der
entsprechenden Stufen abgeschätzt werden kann. Man zieht also von jedem
Messwert den Faktorstufenmittelwert Ai ab, wobei die Spaltensummen
dabei logischerweise gleich 0 sein müssen.
Für das Beispiel ergibt sich folgendes:
A
0
1
-1
0
n
P
(xmi − Ai ): 0
B
-1
0
0
1
C
-1
0
0
1
0
0
m=1
Um die Fehlerquadratsumme zu bestimmen, werden nun die Abweichungen
der Werte vom jeweiligen Mittelwert der Faktorstufe quadriert und pro
Gruppe summiert.
Es gilt:
n
P
A
0
1
1
0
B
1
0
0
1
C
1
0
0
1
(xmi − Ai )2 : 2
2
2
m=1
Die Spaltensummen ergeben
QSF ehler(i) .
Für das Beispiel lauten sie:
QSF ehler(1) = 2
QSF ehler(2) = 2
108
pro
Gruppe
die
Fehlerquadratsumme
Methoden der empirischen Softwaretechnik
1 Grundlagen
QSF ehler(3) = 2
Für die Summe der Fehlerquadratsummen gilt:
p
P
QSF ehler =
QSF ehler(i) = 2 + 2 + 2 = 6
i=1
Zur Bestimmung der Varianz werden wieder die Freiheitsgrade benötigt. Da
die Summe der Abweichungen innerhalb einer Gruppe gleich Null sein muss,
können n − 1 Summanden frei variieren.
Bei n = 4 in dem Beispiel ergibt sich:
σ
bF2 ehler(i) =
σ
bF2 ehler(1) =
σ
bF2 ehler(2) =
σ
bF2 ehler(3) =
QSF ehler(i)
(n−1)
2
≈ 0,67
3
2
≈ 0,67
3
2
≈ 0,67
3
Die durchschnittliche Varianz, welche zur Fehlervarianzschätzung benötigt
wird, erhält man nun, indem man die Summe der Fehlerquadratsummen
durch die Summe der Freiheitsgrade teilt:
p
P
σ
bF2 ehler
=
QSF ehler(i)
i=1
p
P
dfF ehler(i)
i=1
Im Speziellen: σ
bF2 ehler =
2+2+2
3+3+3
=
6
9
≈ 0,67
Es gelten zusammenfassend folgende Zusammenhänge:
QStreat + QSF ehler = QStot
dftreat + dfF ehler = dftot
1.3.7
Varianzaufklärung
Die Varianzaufklärung beschreibt die prozentuale Gesamtunterschiedlichkeit der Treatmentquadratsumme zur totalen Quadratsumme.
treat
Allgemein gilt: Varianzaufklärung = QS
· 100%
QStot
Für das Beispiel ergibt sich
1.3.8
56
62
· 100% ≈ 90,32%
Signifikanztest
Abschließend muss nun überprüft werden ob die Varianzaufklärung zufällig
aufgrund der Stichprobenauswahl zustande gekommen ist, oder ob es signifikante Unterschiede in den Stufen der unabhängigen Variablen gibt. Dazu
Methoden der empirischen Softwaretechnik
109
Grundlagen
wird angenommen, dass die Nullhypothese gilt, also alle Stufen gleich zu bewerten sind, und die Wahrscheinlichkeit bestimmt, dass die errechneten Unterschiede in den Mittelwerten zufällig sind. Ist die Wahrscheinlichkeit dabei
kleiner als ein vorher zu bestimmender Grenzwert α (üblicherweise α = 1%
oder α = 5%), so wird die H0 verworfen. Man sagt, dass sich in diesem
Fall die gefundenen Werte in mindestens zwei Fällen signifikant voneinander
unterscheiden. Andernfalls wird die H0 beibehalten und man bewertet die
Mittelwertsunterschiede als zufällig.
Die H0 , dass zwei voneinander unabhängige Variablen identisch sind, wird
über den F-Test geprüft.
Es gilt:
σ
b2
F = 2treat
σ
bF ehler
28
Für das Beispiel gilt: F = 0,67
≈ 41,79
Durch Nachschlagen in speziellen Tabellen kann dieser Wert mit dem für p−1
Zählerfreiheitsgrade und p·(n−1) Nennerfreiheitsgrade zu erwartenden Wert
auf dem gewählten Grenzwertniveau verglichen werden.
Für das Beispiel ergibt sich auf dem 1%-Niveau bei p = 3 und n = 4 ein
kritischer Wert von 8,02. Da der empirische Wert größer als der kritische
Wert ist, wird die Nullhypothese verworfen.
Die drei verschiedenen Behandlungsformen unterscheiden sich also signifikant
voneinander.
2
Mehrfaktorielle Versuchspläne
Dieses Kapitel beschreibt die Anwendung und das Verfahren der mehrfaktoriellen Varianzanalyse. Dabei werden zunächst die Gründe für mehrfaktorielle Versuchspläne und deren Vorteile gegenüber den einfaktoriellen
Plänen diskutiert. Anschließend wird das bereits bekannte Beispiel der
Wirkungsweise unterschiedlicher Medikamente auf unterschiedliche Versuchspersonen zwei bzw. ansatzweise mehrfaktoriell ausgebaut und daran
die veränderte Behandlung und Berechnung von Quadratsummen, Nullhypothesen und Signifikanztests erläutert.
2.1
Motivation
Die Varianzanalyse ist nicht nur eine Verallgemeinerung des t-Tests auf
mehrere Faktorstufen, es können auch Varianzanalysen mit mehreren Faktoren durchgeführt werden, wobei die Faktoren mindestens zwei Faktorstufen
aufweisen. Dies ermöglicht eine stärkere Differenzierung der Messwerte.
110
Methoden der empirischen Softwaretechnik
2 Mehrfaktorielle Versuchspläne
Dabei gehen mehrfaktorielle Varianzanalyse in der Regel effizienter mit den
Daten um, das heißt, dass man mit Hilfe einer mehrfaktoriellen Varianzanalyse weniger Beobachtungen braucht, um Effekte nachzuweisen. Von besonderem Interesse ist auch ein mögliches Zusammenwirken (Wechselwirkung)
der untersuchten Faktoren.
2.2
Zweifaktorielle Versuchspläne
Dieses Kapitel beschreibt die Vorgehensweise bei der zweifaktoriellen Varianzanalyse. Analog zur einfaktoriellen Varianzanalyse wird zunächst eine
Quadratsummenzerlegung und Freiheitsgrad-Berechnung durchgeführt, um
anschließend Varianzschätzungen vornehmen zu können. Danach werden
Nullhypothesen definiert, die durch den F -Test überprüft werden können.
Zum Abschluss wird kurz die Verwendung von Interaktionsdiagrammen angerissen.
2.2.1
Terminologie
Wie bereits von der einfaktoriellen Analyse bekannt wird zur Darstellung der
Daten eine Datenmatrix verwendet. Diese besteht nach wie vor aus p Spalten für eine p fach gestufte unabhängige Variable (Faktor A) und zusätzlich
q Zeilen für eine q fach gestufte zweite unabhängige Variable (Faktor B).
Welche der beiden Variablen welchem Faktor zugeordnet wird spielt dabei
keine Rolle.
Methoden der empirischen Softwaretechnik
111
Grundlagen
Allgemeine Darstellung:
1
x111
x112
.
1 ..
x11m
..
.
Faktor A
2
···
x211 · · ·
x212 · · ·
..
.
···
x21m
..
.
x11n
x121
x122
.
2 ..
x12m
..
.
x21n
x221
x222
..
.
x12n
..
.
x22n
..
.
x1j1
x1j2
.
j ..
x1jm
..
.
x2j1
x2j2
..
.
x1jn
..
.
x2jn
..
.
x1q1
x1q2
.
q ..
x1qm
..
.
x2q1
x2q2
..
.
x1qn
x2qn
Faktor B
x22m
..
.
x2jm
..
.
x2qm
..
.
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
i
xi11
xi12
..
.
xi1m
..
.
xi1n
xi21
xi22
..
.
xi2m
..
.
xi2n
..
.
xij1
xij2
..
.
xijm
..
.
xijn
..
.
xiq1
xiq2
..
.
xiqm
..
.
xiqn
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
···
p
xp11
xp12
..
.
xp1m
..
.
xp1n
xp21
xp22
..
.
xp2m
..
.
xp2n
..
.
xpj1
xpj2
..
.
xpjm
..
.
xpjn
..
.
xpq1
xpq2
..
.
xpqm
..
.
xpqn
Zum besseren Verständnis bemühe man noch einmal das Beispiel der
unterschiedlichen Behandlungsmethoden mit unterschiedlichen Medikamenten wie es bei der Beschreibung der einfaktoriellen Varianzanalyse
bereits verwendet worden ist. Man könnte die jeweils vier Personen je
Medikament noch ein zweites mal unterteilen. Als Unterscheidungsmerkmal
würde sich zum Beispiel das Geschlecht anbieten. Es wird also neben der
112
Methoden der empirischen Softwaretechnik
2 Mehrfaktorielle Versuchspläne
unabhängigen Variablen ”Medikament” (A,B,C) eine zweite unabhängige
Variable ”Geschlecht” (männlich, weiblich) eingeführt.
Das Beispiel sieht dann wie folgt aus:
Behandlungsmethoden
A
männlich
7
8
weiblich
6
7
Summen (Ai ):
28
Mittelwerte (Ai ): 7
B
10
11
11
12
44
11
C
11
12
12
13
48
12
Es soll nun überprüft werden, ob die Unterteilung Einfluss auf die
Fehlervarianz hat.
2.2.2
Quadratsummenzerlegung
Das Vorgehen ist hier ähnlich wie bei der einfaktoriellen Varianzanalyse. Die
Berechnung der totalen Quadratsumme ist hierbei sogar identisch. Da die
Werte des Beispiels nicht verändert wurden, kann man die QStot übernehmen.
Es gilt: QStot = 62
Als nächstes wird wie bei der Treatmentquadratsumme wieder von idealisierten Werten je Faktorstufe ausgegangen. Wie bereits gezeigt wurde erweisen sich hier die Mittelwerte als gute Näherung. Der Unterschied zur einfaktoriellen Analyse besteht darin, dass nun die Mittelwerte je Stufe des Faktors B unterschieden werden. Für das Beispiel bedeutet dies, dass zwischen
den Mittelwerten der weiblichen und männlichen Personen je Medikament
unterschieden wird. Die Quadratsumme, die durch die Summe der quadrierten Abweichungen der Mittelwerte vom Gesamtmittelwert G entsteht, wird
als Quadratsumme der Zellen (QSZellen ) bezeichnet.
Konkret bedeutet das:
QSZellen = 2 · (7,5 − 10)2 + 2 · (6,5 − 10)2 + 2 · (10,5 − 10)2 + 2 · (11,5 − 10)2 +
2 · (11,5 − 10)2 + 2 · (12,5 − 10)2 = 59
Die Fehlerquadratsumme berechnet sich aus der Summe aller quadratischen Abweichungen der Messwerte von den jeweiligen Zellenmittelwerten:
QSF ehler = (7 − 7,5)2 + (8 − 7,5)2 + (6 − 6,5)2 + (7 − 6,5)2 + (10 − 10,5)2 +
(11 − 10,5)2 + (11 − 11,5)2 + (12 − 11,5)2 + (11 − 11,5)2 + (12 − 11,5)2 + (12 −
12,5)2 + (13 − 12,5)2 = 3
Diese Schritte haben sich bis jetzt nicht von der Vorgehensweise bei der einMethoden der empirischen Softwaretechnik
113
Grundlagen
faktoriellen Varianzanalyse unterschieden. Es wurde lediglich eine ”feinere”
Untersuchung in Zellen, statt in Spalten vorgenommen.
Die Quadratsumme der Zellen soll im folgenden näher untersucht werden.
Man könnte annehmen, dass sich diese als Summe der Quadratsummen für
den Faktor A (QSA ) und der Quadratsumme für den Faktor B (QSB ) ergibt.
Die QSA is dabei offensichtlich mit mit der bei der einfaktoriellen Varianzanalyse bestimmten Treatmentquadratsumme identisch.
Für das Beispiel gilt: QSA = 56
QSB ergibt sich, indem für jede B-Stufe die quadrierten Abweichungen des
Mittelwertes der B-Stufe vom Gesamtmittelwert G ermittelt und aufsummiert werden.
In dem speziellen Fall: QSB = 6 · (9,83 − 10)2 + 6 · (10,17 − 10)2 ≈ 0,35
Die Summe der beiden Quadratsummen nennt man auch Quadratsumme
der Haupteffekte. Für sie gilt:
QSA + QSB = 56 + 0,35 = 56,35 6= 59 = QSZellen
Offensichtlich ist die Quadratsumme der Zellen also durch einen Faktor beeinflusst, der nichts mit den beiden Haupteffekten A und B zu tun hat.
Aus diesem Grund führt man eine weitere Quadratsumme die sogenannte
Quadratsumme der Interaktion QSA×B ein. Um diese zu Berechnen
verfolge man zunächst folgende Überlegung. Wären die Zellenmittelwerte
nur von den beiden Faktoren A und B abhängig, so müssten für sie folgende
Gleichung gelten:
0
AB ij = Ai + B i − Gi
Der tatsächliche Mittelwert AB ij ist jedoch davon abweichend.
0
In dem Beispiel wäre etwa AB 11 = 7 + 9,83 − 10 = 6,83, der tatsächliche
Zellenmittelwert jedoch AB 11 = 6,5.
Die quadrierte Abweichung dieser beiden Werte wird dann als ”Quadratsumme der Interaktionen” bezeichnet.
In dem konkreten Fall gilt:
QSA×B = 2 · (6,83 − 7,5)2 + 2 · (7,17 − 6,5)2 + 2 · (10,83 − 10,5)2 + 2 · (11,17 −
11,5)2 + 2 · (11,83 − 11,5)2 + 2 · (12,17 − 12,5)2 ≈ 2,65
Wie bei der einfaktoriellen Varianzanalyse gibt es auch bei den Quadratsummen der zweifaktoriellen Varianzanalyse einige Abhängigkeiten:
QStot = QSZellen + QSF ehler
QSZellen = QSA + QSB + QSA×B
Zieht man beide Gleichungen zusammen, so erhält man:
QStot = QSA + QSB + QSA×B + QSF ehler
114
Methoden der empirischen Softwaretechnik
2 Mehrfaktorielle Versuchspläne
2.2.3
Varianzschätzung und Freiheitsgrade
Um die gefundenen Quadratsummen in Varianzen überführen zu können,
ist es notwendig sie durch die jeweiligen Freiheitsgrade zu dividieren.2 Für
die Haupteffekte berechnen sich dabei die Freiheitsgrade analog zur einfaktoriellen Varianzanalyse durch Verminderung der jeweiligen Faktorstufenanzahl
um eins, d.h es sind pro Spalte p−1 bzw. pro Zeile q −1 Werte frei variierbar.
Formell: dfA = p − 1, dfB = q − 1 und dfA×B = (p − 1) · (q − 1)
Für das Beispiel ergibt sich dfA = 2, dfB = 1 und dfA×B = 2.
Daraus ergeben sich folgende Varianzschätzungen:
2
A
σ
bA2 = QS
= 28 = σ
btreat
(einfaktorielle Analyse)
= 56
dfA
2
QSB
= 0,35
= 0,35
dfB
1
QS
A×B
2
= dfA×B
σ
bA×B
= 2,65
≈
2
σ
bB2 =
1,33.
Für die Bestimmung der Freiheitsgrade dfF ehler betrachte man noch einmal
das Verfahren zur Bestimmung von QSF ehler . Hier wurden die quadrierten
Abweichungen vom jeweiligen Zellenmittelwert berechnet. Da die Summe
aller Abweichungen wieder Null ergeben muss, sind insgesamt n − 1 Werte
pro Zelle frei variierbar. Bei insgesamt p · q Zellen sind das p · q · (n − 1)
variierbare Werte.
Konkret: dfF ehler = p · q · (n − 1) = 3 · 2 · (2 − 1) = 6
Für die Varianzschätzung bedeutet dies:
F ehler
= 63 = 0,5
σ
bF2 ehler = QS
dfF ehler
Es fällt auf, dass Fehlervarianz σ
bF2 ehler im Vergleich zur einfaktoriellen Analyse (b
σF2 ehler = 0,67) kleiner geworden ist. Das bedeutet, dass in der Fehlervarianz der einfaktoriellen Varianzanalyse Anteile enthalten waren, die auf
die Unterscheidung des Faktors B im zweifaktoriellen Fall – also auf eine
geschlechtsspezifische Unterscheidung – zurückzuführen sind.
Für die weitere Bestimmung von dftot gilt analog zur einfaktoriellen Varianzanalyse der Bezug dftot = p · q · n − 1 = 3 · 2 · 2 − 1 = 11.
Ferner gilt der bereits bei der totalen Quadratsumme (QStot ) aufgefallene
Zusammenhang:
dftot = dfA + dfB + dfA×B + dfF ehler
2
2
Auf die Berechnung von dfZellen bzw. σ
bZellen
sei an dieser verzichtet, da sie für die
weitere Interpretation nicht relevant sind
Methoden der empirischen Softwaretechnik
115
Grundlagen
2.2.4
Nullhypothesen
Bei der zweifaktoriellen Varianzanalyse gibt es mehrere voneinander unabhängige Nullhypothesen:
1. Die Mittelwertparameter des Faktors A unterscheiden sich nicht
(H0 : µ1 = µ2 = · · · = µp )
2. Die Mittelwertparameter des Faktors B unterscheiden sich nicht
(H0 : µ1 = µ2 = · · · = µp )
3. Die Mittelwertparameter setzen sich aus den Haupteffekten zusammen.
Es besteht keine Interaktion. (H0 : µij = µi + µj = µ)
2.2.5
Signifikanztests
Die drei verschiedenen Nullhypothesen können getestet werden, indem die
entsprechenden Varianzen durch die Fehlervarianz dividiert werden. Hierzu
wird wiederum der von dem Verfahren der einfaktoriellen Varianzanalyse
bekannte F -Test verwendet. Man berechnet für die drei Hypothesen jeweils den entsprechenden F -Wert und vergleicht diesen mit den für ein bestimmtes Signifikanzniveau kritischen F -Werten aus speziellen, dafür vorgesehenen Tabellen.
Es ergibt sich:
FA =
FB =
2
σ
bA
2
σ
bF ehler
2
σ
bB
2
σ
bF ehler
2
σ
bA×B
2
σ
bF ehler
FA×B =
=
28
0,5
=
0,35
0,5
=
= 56
= 0,7
1,33
0,5
= 2,66
Der für das 1%-Niveau kritische F -Wert für den Faktor A ist aufgrund der
gleichen Freiheitsgrade mit dem kritischen F -Wert für die Interaxtion A × B
identisch.
Er lautet: F2,6;99% = 10,9
Da auch hier der empirische F -Wert des Haupteffektes A größer ist als der
kritische F -Wert, kann dessen Nullhypothese verworfen werden. Die drei
Behandlungsformen unterscheiden sich signifikant. Eine Betrachtung des
Haupteffektes B bzw. der Interaktion A × B erfolgt analog und soll an
dieser Stelle nicht näher beschrieben werden.
2.2.6
Varianzaufklärung
Auch bei der zweifaktoriellen Varianzanalyse ist es möglich, die prozentualen
Unterschiedlichkeiten der Quadratsummen der beiden Haupteffekte bzw. der
116
Methoden der empirischen Softwaretechnik
2 Mehrfaktorielle Versuchspläne
Quadratsumme der Interaktion zur totalen Quadratsumme zu ermitteln.
Allgemein gilt:
QSA
Faktor A: QS
· 100%
tot
Faktor B:
QSB
QStot
· 100%
Interaktion A × B :
QSA×B
QStot
· 100%
Auf das Beispiel bezogen ergeben sich folgende Werte:
Faktor A: 90,32%; Faktor B: 0,56%; Interaxtion A × B: 4,29%
2.2.7
Interaktionsdiagramme
Um die Interaktionen besser diskutieren zu können werden vielfach sogenannte Interaktionsdiagramme angefertigt. Sie bestehen aus einem
Koordinatensystem, auf dessen x-Achse der Faktor mit der größeren Stufenzahl liegt. Die y-Achse beschreibt die Werte der abhängigen Variable, also
die Mittelwerte aus der Kombination der beiden Faktorstufen. Die Werte
des zweiten Faktors (der nicht auf der x-Achse aufgetragen ist) sind in das
Koordinatensystem eingetragen und durch Linien innerhalb der Faktorstufe
verbunden. Nicht parallel verlaufende Linienzüge – wie im folgenden Fall –
weisen auf eine Interaktion der beiden Faktoren hin.
Interaktionsdiagramm des beschriebenen Beispiels:
13
12
11
10
9
8
7
6
6
weiblich
×
× •
•
männlich
•
×
-
A
2.3
B
C
Drei- und Mehrfaktorielle Varianzanalyse
Neben der Untersuchung des Effektes zweier unabhängiger Variablen auf eine
abhängige Variable ist auch eine Varianzanalyse mit mehreren unabhängigen Variablen denkbar. Dieses Kapitel soll diese Vorgehensweise anhand
Methoden der empirischen Softwaretechnik
117
Grundlagen
der Beschreibung einer dreifaktoriellen Varianzanalyse kurz behandeln. Für
höherfaktorielle Varianzanalysen verläuft die Berechnung entsprechend analog.
2.3.1
Terminologie
Für die Durchführung der dreifaktoriellen Varianzanalyse gelte folgende Konvention:
• Faktor A hat p Stufen (Laufindex i)
• Faktor B hat q Stufen (Laufindex j)
• Faktor C hat r Stufen (Laufindex k)
Dabei sind p · q · r Stichproben der Größe n von Nöten, so dass insgesamt
p · q · r · n Messwerte untersucht werden.
2.3.2
Quadratsummenzerlegung
Die dreifaktorielle Varianzanalyse zerlegt nun die totale Quadratsumme in
drei Haupteffekte (A, B und C), drei Interaktionseffekte (A×B, B×C, A×C),
eine Interaktion zweiter Ordnung (A × B × C = ”Tripelinteraktion”) und
Fehlereffekte.
Auf die genaue Berechnung der einzelnen Quadratsummen und Freiheitsgrade sei an dieser Stelle verzichtet, da sie völlig analog zur ein- und zweifaktoriellen Varianzanalyse verläuft.
Festzuhalten bleibt jedoch folgender Zusammenhang:
QStot = QSA +QSB +QSC +QSA×B +QSA×C +QSB×C +QSA×B×C +QSF ehler
Entsprechend analog für die Freiheitsgrade:
dftot = dfA + dfB + dfC + dfA×B + dfA×C + dfB×C + dfA×B×C + dfF ehler
2.3.3
Nullhypothesen und Signifikanztest
Da die Quadratsummenzerlegung insgesamt sieben verschiedene Quadratsummen geliefert hat, ergeben sich auch sieben verschiedene Nullhypothesen:
118
Methoden der empirischen Softwaretechnik
3 Versuchspläne mit Messwiederholungen
Faktor A:
Faktor B:
Faktor C:
Interaktion
Interaktion
Interaktion
Interaktion
µ1 = µ2 = · · · = µp
µ1 = µ2 = · · · = µq
µ1 = µ2 = · · · = µr
A × B: µij = µi + µj − µ
A × C: µik = µi + µk − µ
B × C: µjk = µj + µk − µ
A × B: µijk = µij + µik + µjk − µi − µj − µk + µ
Die Überprüfung der sieben Nullhypothesen erfolgt wie üblich durch
F-Tests. Dabei werden die entsprechend zur Berechnung notwendigen
Varianzen durch Division der Quadratsummen durch die jeweiligen Freiheitsgrade bestimmt.
3
Versuchspläne mit Messwiederholungen
Dieses Kapitel beschreibt die Erweiterung der normalen Varianzanalyse - wie
sie bisher vorgestellt wurde - durch Wiederholungen der Messungen.
3.1
Motivation
Manchmal ist es von Interesse nicht nur einen Messwert je Versuchsobjekt
zu untersuchen, sondern mehrere Messwerte zu nehmen. In dem Beispiel
der Behandlung mit Medikamenten wäre es beispielsweise interessant, einen
”Gesundheitswert” vor, während und nach der Behandlung zu messen.
Außerdem haben Versuchspläne mit Messwiederholungen den Vorteil, dass
man durch die Variation der Faktorstufen innerhalb der Versuchsobjekte
die Anzahl an benötigten Versuchsobjekten reduzieren kann, was zu Zeitund/oder Geldersparnis führen kann. Auch die Fehlervarianz kann reduziert
werden, indem die Versuchsobjekte durch geschickte Variation von der Fehlervariation separiert werden.
3.2
Einfaktorielle Varianzanalyse mit Messwiederholungen
Bei der einfaktoriellen Varianzanalyse mit Messwiederholungen werden
allgemein n Versuchsobjekte unter p Faktorstufen ausgewertet:
Methoden der empirischen Softwaretechnik
119
Grundlagen
Versuchsobjekte
1
2
..
.
Faktorstufen
1
2
···
x11 x12 · · ·
x21 x22 · · ·
..
..
.
.
m
..
.
n
Summen:
xm1
..
.
xn1
A1
xm2
..
.
xn2
A2
···
···
···
i
x1i
x2i
..
.
···
···
···
p
x1p
x2p
..
.
Summen
P1
P2
..
.
xmi
..
.
xni
Ai
···
xmp
..
.
xnp
Ap
Pm
..
.
Pn
G
···
···
Hierbei beschreibt Ai die Summer aller Messwerte der Faktorstufe i, Pm die
Summe aller Messwerte des Versuchsobjektes m und G die Gesamtsumme
aller Messwerte.
Die Nullhypothese ist wieder H0 : µ1 = µ2 = · · · = µp und besagt, dass
sich Messwerte des Versuchsobjektes pro Faktorstufe nicht verändern.
Die totale Quadratsumme QStot wird hier in einen Anteil, der nur
auf den Unterschieden zwischen den Versuchsobjekten basiert (QSzw ),
und einen Anteil, welcher Veränderungen innerhalb der Messwerte eines
Versuchsobjektes beschreibt (QSin ), unterteilt.
QStot = QSzw + QSin
Die QSin ist nun weiter unterteilbar in einen Teil, der auf Treatmenteffekte
zurück geht (QStreat ), und einen zweiten Teil, welcher Interaktions- und
Fehlereffekte enthält. Die letzten beiden können zur sogenannten ”Residualquadratsumme” (QSres ) zusammengefasst werden, so dass zusammenfassend gilt:
QSin = QStreat + QSres
Einen Überblick über die Zerlegung der einzelnen Quadratsummen bietet
folgendes Schema:
Totale Quadratsumme (QStot )
Zwischen den
Versuchsobjekten (QSzw )
Innerhalb der
Versuchsobjekte (QSin )
Zwischen den
Faktorstufen (QStreat )
Residual (QSres )
Die wichtigste Fragestellung bei der Untersuchung einer einfaktoriellen Varianzanalyse mit Messwiederholungen ist die, wie die Unterschiede innerhalb
120
Methoden der empirischen Softwaretechnik
3 Versuchspläne mit Messwiederholungen
der Messwerte eines Versuchsobjektes zustande kommen. Insbesondere die
Treatmenteffekte sind im Hinblick darauf interessant.
Die Bestimmung der Freiheitsgrade kann direkt aus obigem Schema
abgeleitet werden. Die insgesamt p · n − 1 vorhandenen Freiheitsgrade, teilen
sich dabei wie folgt auf:
(n − 1) Freiheitsgrade für die QSzw , da für n Versuchsobjekte (n − 1) variierbare Werte vorhanden sind. Für die QSin bleiben somit n · (p − 1) Freiheitsgrade übrig, was der Variation von n Versuchsobjekten bei p−1 Faktorstufen
entspricht. Dabei ist die Treatmentquadratsumme QStreat – wie aus vorherigen Überlegungen zur Varianzanalyse ohne Messwiederholungen bekannt –
mit einem Anteil von p − 1 Freiheitsgraden vertreten. Für die QSres bleiben
nach mathematischer Umformung (n − 1) · (p − 1) Freiheitsgrade.
Die Varianzen berechnen sich dann wie gewohnt als Differenz der Quadratsummen und Freiheitsgrade. Für feste Stufen des Treatmentfaktors kann
ein Signifikanztest erstellt werden, der die Nullhypothese durch folgenden
F-Bruch überprüft:
σ
b2
F = treat
2
σ
bres
3.3
Mehrfaktorielle Varianzanalyse mit
Messwiederholungen
Bei der mehrfaktoriellen Varianzanalyse mit Messwiederholungen (hier:
zweifaktoriell) werden im Vergleich zur einfaktoriellen Version die Stichproben noch nach den Stufen eines zweiten Faktors unterteilt:
a1
a2
..
.
b1
S1
S2
..
.
b2
S1
S2
..
.
···
···
···
bj
S1
S2
..
.
···
···
···
bq
S1
S2
..
.
ai
..
.
Si
..
.
Si
..
.
···
Si
..
.
···
ap
Sp
B1
Sp
B2
···
···
Sp
Bj
···
···
Si
..
.
Sp
Bq
A1
A2
..
.
Ai
..
.
Ap
G
Hierbei beschreiben die Si jeweils Stichproben, die den p Stufen des Faktors
A (”Gruppierungsfaktor”) zugeordnet werden. Diese Stichproben werden
zusätzlich unter den q Stufen des Faktors B (”Messwiederholungsfaktor”)
beobachtet.
Auch bei der Quadratsummenzerlegung im Fall der zweifaktoriellen
Methoden der empirischen Softwaretechnik
121
Grundlagen
Varianzanalyse mit Messwiederholungen wird die totale Quadratsumme
QStot wieder auf zwei Quadratsummen aufgeteilt: Zum einen auf die
Quadratsumme, welche Unterschiede zwischen den einzelnen Versuchsobjekten beschreibt (QSzw ), und zum anderen auf die Quadratsumme, welche
Unterschiede innerhalb eines Versuchsobjektes beinhaltet (QSinV ).
QStot = QSzw + QSinV
Für die QSzw kann im Gegensatz zum einfaktoriellen Fall auch hier eine
weitere Unterteilung vorgenommen werden, denn die totale Quadratsumme
setzt sich aus einem Anteil QSA , welcher auf Unterschiede zwischen den
Stufen des Faktors A beruht, und einem Anteil QSinS , welcher Unterschiede
innerhalb der Stichproben eines Versuchsobjektes beschreibt, zusammen.
QSzw = QSA + QSinS
Für die Unterschiede in den Messwerten eines einzelnen Versuchsobjektes
sind neben der Quadratsumme des Faktors B (QSB ) auch die Interaktion von
A und B (QSA×B ) sowie die spezifische Reaktionsweise des Versuchsobjektes
auf die Stufen von B (QSB×V ) verantwortlich.
QSinV = QSB + QSA×B + QSB×V
Einen Überblick über die Zerlegung der einzelnen Quadratsummen bietet
folgendes Schema:
Totale Quadratsumme (QStot )
Zwischen den
Versuchsobjekten (QSzw )
Faktor A (QSA )
Innerhalb der
Versuchsobjekte (QSin )
Faktor B (QSB )
Innerhalb der
Stichproben (QSinS )
Interaktion A × B
(QSA×B )
Interaktion B × V
(QSB×V )
Für die Signifikanztests werden nun wieder in gewohnter Weise die
Quadratsummen durch ihre Freiheitsgrade dividiert. Unter der Annahme,
dass A und B feste Effekte sind, können folgende Beziehungen getestet werden:
2
σ
bA×B
σ
bA2
σ
bB2
,
,
2
2
2
σ
binS
σ
bB×V
σ
bB×V
122
Methoden der empirischen Softwaretechnik
5 Quellen
4
Zusammenfassung und Fazit
Die ein- bzw. mehrfaktorielle Varianzanalyse ist ein Verfahren, das die
Wirkung einer oder mehrerer unabhängiger Variablen auf eine abhängige
Variable untersucht. Besonders beim Vergleich von großen Datenmengen
kann die Varianzanalyse ihre Vorteile (keine α-Kumulierung und große Teststärke) gegenüber anderen Verfahren wie beispielsweise dem t-Test ausspielen. Doch auch die Varianzanalyse hat Einschränkungen. So kann eine Untersuchung nur für ein abhängige Variable in Intervallskalenqualität gewährleistet werden. Für Messungen auf Ordinal- oder Nominalskalenniveau gibt
es gesonderte Verfahren. Auf eine Verletzung anderer Kriterien (z.B. Normalverteilung der Stichproben) reagiert die Varianzanalyse hingegen weitestgehend robust und liefert dennoch in der Regel brauchbare Ergebnisse. Insbesondere die mehrfaktorielle Varianzanalyse (sowohl im Fall ohne Messwiederholungen als auch im Fall mit Messwiederholungen) eignet sich hervorragend für explorative Untersuchungen (Erkundungsuntersuchungen) im
Bereich der Softwaretechnik. Durch die Möglichkeit Interaktionen zwischen
den Haupteffekten zu untersuchen können so nämlich z.B. mögliche Einflüsse
auf gefundene Defekte in einem eingebetteten System analysiert werden. Man
spricht daher im Bezug auf mehrfaktorielle Versuchspläne auch von ”faktoriellem Design”.
5
Quellen
• Bortz, J.: Statistik. 4. Auflage. Springer, 1993.
• Rasch, B.: Quantitative Methoden, Bd. 2. Springer, 2004.
• Glaser, W.: Varianzanalyse. Fischer, 1978.
• Gediga, G.: Varianzanalysen.
http://www.psycho.uni-osnabrueck.de/ggediga/www/pm98/pages/
anova.htm
• Jacobs, B.: Mehrfaktorielles Design.
http://www.phil.uni-sb.de/ jakobs/seminar/vpl/mehrfak/mehrfak.htm
Methoden der empirischen Softwaretechnik
123
Kritik in der Statistik
Jörg Toborg
Grundlagen
1
Einführung
Das Gebiet der Statistik ist breit gefächert und bietet etliche Ansatzpunkte
für Kritik. Diese Ausarbeitung geht auf ”alltägliche” Manipulationen und
Gefahren ein, die ein zu gutgläubiger Umgang mit Zahlen und Statistiken mit
sich bringen kann. Gerne wird von Lügen gesprochen die eigentlich keine sind,
denn die Kritik beschränkt sich meist auf zielgerichtete Darstellungen von
Fakten, die eher einem Betrug gleich kommen. Es wird nicht versucht Zahlen
sachlich und ehrlich darzustellen, sondern künstliche Vorteile erzeugt, die
mit der Wahrheit nicht übereinstimmen. Einen kleinen Trost direkt vorweg:
Falsche Zahlen sind meist leichter zu erkennen als falsche Worte oder falsche
Bilder und ohne eigene Begünstigung muss sich niemand für dumm verkaufen
lassen, denn auch statistische Lügen haben kurze Beine [1].
2
Vorsicht mit Prozentangaben
Die allseits beliebten Prozentangaben, mit denen man tagtäglich bombadiert
wird, werden häufig überschätzt. Stehen sie doch für Glaubwürdigkeit
und Autorität, Prozente strahlen Gewißheit aus, attestieren einem Rechenfähigkeiten, verleihen Autorität und Überlegenheit. Viele Leute wissen gar
nicht damit umzugehen. Laut einer Umfrage des Emnid-Instituts sind rund
ein Drittel der Deutschen nicht in der Lage die Angabe ”40 Prozent” richtig
zu deuten. Bei einer Umfrage des ”Office of Fair Trading” antworteten auf
die Frage ”Wieviel sind 40 Prozent?” sogar rund die Hälfte aller befragten
Bankkunden mit ”einer von 40” oder ”ein Viertel”. Dieser Wert ist Besorgnis
erregend, wenn man bedenkt wie häufig Prozentangaben heutzutage benutzt
werden und wieviel Beachtung man diesen zukommen lässt.
Aber auch ohne diese Unwissenheit kann man eine Menge Schabernack
mit Prozentangeben treiben. ”Aufklärungsquote von 104 Prozent” meldet
die Jenaer Polizei (geschrieben in der Welt). ”Mehr Mörder als die Jenaer
Polizei fängt niemand: 104,8 Prozent aller Fälle von Mord, Mordversuch
und Tötung klärten die Beamten 1993 auf”. Der Grund dafür lag in der
Rechnung der Polizisten. Diese teilten die in einem Jahr geklärten Fälle
durch die im gleichen Jahr gemeldeten Fälle. Mit solchen Vorgehensweisen
sind Quoten beliebig zu verbessern. Wird in einem Jahr ein Mord begangen
und drei alte aufgeklärt, so gibt es demzufolge eine Aufklärungsquote von
300 Prozent...
Doch auf Fachleute wissen Prozentangeben gelegentlich nicht richig
einzuordnen. Laut [4] unterliegen gerade Ärzte und ihre Patienten häufig der
126
Methoden der empirischen Softwaretechnik
2 Vorsicht mit Prozentangaben
verhängnisvollen Illusion von absoluter Gewissheit. Fehler, aufgrund einer
Fehleinschätzung von Prozentangaben, sind in der Medizin keine Seltenheit.
Viele moderne und vergleichsweise zuverlässige Diagnose- und Therapieverfahren sind weitaus weniger sicher, als sie auf den ersten Blick erscheinen. [5]
geht in seinem Buch auf den HIV-Test (ELISA) ein. Dieses Verfahren erkennt
Kranke und Gesunde mit einer Wahrscheinlichkeit von 99,99 Prozent. Es gibt
also bei einem von 10.000 Gesunden fälschlich einen positiven Befund. Folgt
daraus auch, dass man bei einem positiven HIV-Test mit 99,99-prozentiger
Sicherheit davon ausgehen kann, das Aids-Virus zu haben?
Keinesfalls, denn entscheidend für die Einschätzung eines ”positiven” Befundes4 ist die Verbreitung der
Infektion.
Als Beispiel: Von 10.000 heterosex2 Vorsicht
mit Prozentangaben!
uellen Männern , die keiner Risikogruppe angehören, ist statistisch gesehen
lediglich einer infiziert. Bei 10.000 Tests wird man also zwei HIV-Kranke erKeinesfalls,
entscheidend
für die
Einschätzung
eines
positiven“
mitteln,
dabeidenn
jedoch
einen Mann
fälschlich
positiv
testen
- da jaBefunim Durch”
des ist die Verbreitung der Infektion. Als Beispiel: Von 10.000 heterosexuellen
schnitt mit einer Fehldiagnose zu rechnen ist. Das bedeutet aber: Jeder
Männern , die keiner Risikogruppe angehören, ist statistisch gesehen lediglich
zweite
HIV-Test
beiwird
Nicht-Risikogruppen
ist ein
Fehlalarm
einer positive
infiziert. Bei
10.000 Tests
man also zwei HIV-Kranke
ermitteln,
dabei - die
Wahrscheinlichkeit,
bei einem
positiven
infiziert
sein, bejedoch einen Mann fälschlich
positiv
testenTest
- da tatsächlich
ja im Durchschnitt
mitzu
einer
Fehldiagnose
zu
rechnen
ist.
Das
bedeutet
aber:
Jeder
zweite
positive
HIV-Test
trägt nur 50 Prozent! Selbst für viele Mediziner ist das ein überraschendes
bei Nicht-Risikogruppen
ein Fehlalarm
- diedie
Wahrscheinlichkeit,
bei einembringt,
Ergebnis,
denn auch beiist
allem
Nutzen den
Statistik der Medizin
positiven Test tatsächlich infiziert zu sein, beträgt nur 50 Prozent! Selbst für viebleiben
etliche Unsicherheiten im Umgang mit ihr, die im schlimmsten Fall
le Mediziner ist das ein überraschendes Ergebnis, denn auch bei allem Nutzen
zu den
Lasten
der Patienten
gehen.
die Statistik
der Medizin
bringt, bleiben etliche Unsicherheiten im Umgang
mit ihr, die im schlimmsten Fall zu Lasten der Patienten gehen.
10.000 Männer
1 HIV
1 positiv
0 negativ
9.999 kein HIV
1 positiv
9.998 negativ
Figure 1: Was bedeutet ein positiver HIV-Test wirklich? Von 10.000
Fig.
1: Was bei
bedeutet
einkeine
positiver
HIV-Test
wirklich? Von
10.000 Männern,
Männern,
denen
riskante
Lebensweise
bekannt
ist, werden
bei denen
keine riskantezwei
Lebensweise
ist,und
werden
durchschnittlich
zwei
durchschnittlich
positivbekannt
getestet,
einer
von ihnen wird
positiv getestet, und einer von ihnen wird HIV-infiziert sein.
HIV-infiziert sein.
Immerhin lässt sich bei diesem Testverfahren die Trefferwahrscheinlichkeit
Immerhin
lässt
sichistbei
Testverfahren
die Trefferwahrscheinlichkeit
angeben.
Grund
dafür
diediesem
bekannte
Zahl der insgesamt
Infizierten in Deutschangeben.
Grund
ist die sobekannte
Zahl
insgesamtgar
Infizierten
in
land. Ist diese
Zahldafür
nicht bekannt,
kann, wie im
Fallder
des BSE-Tests,
nichts
darüber gesagt werden wie verlässlich der Test ist. Im Klartext bedeutet dies
das niemand
ob die 387 Softwaretechnik
Rinder, die seit dem Jahre 2000 in Deutschland als 127
Methoden
derweiß,
empirischen
bestätigte BSE-Fälle gesehen werden (Quelle: www.verbraucherministerium.de
Stand 28.10.05), tatsächlich BSE krank waren, oder fälschlicherweise als krank
gestestet wurden. Fakt ist nur, dass im Zeitraum 01.01.2001 - 31.10.2005 in
Deutschland insgesamt 12.472.655 Rinder auf BSE untersucht wurden. Wie so
oft ist hier das entscheidende die Bevölkerung zu beruhigen und als Regierung
Handlungsfähigkeit zu demonstrieren. Fehlende Kenntnis über die Aussagekraft
bzw. Verlässlichkeit eines solchen Testverfahrens sind dabei zweitrangig.
Grundlagen
Deutschland. Ist diese Zahl nicht bekannt, so kann, wie im Fall des BSETests, gar nichts darüber gesagt werden wie verlässlich der Test ist. Ob die
387 Rinder, die seit dem Jahre 2000 in Deutschland als bestätigte BSE-Fälle
gesehen werden (Quelle: www.verbraucherministerium.de Stand 28.10.05),
tatsächlich BSE krank waren, oder fälschlicherweise als krank gestestet
wurden, bleibt Vermutung. Fakt ist nur, dass im Zeitraum 01.01.2001 31.10.2005 in Deutschland insgesamt 12.472.655 Rinder auf BSE untersucht
wurden.
Ein weiteres Beispiel für Irreführung durch entsprechend dargestellte Zahlen
ist das von Ulla Schmidt, amtierende Gesundheitsministerin, geforderte bundesweite Brustkrebs-Screening. Regelmäßige Röntgenchecks, so die Aussage, würden die Brustkrebstodesrate von Frauen über 50 Jahren um fast
ein Drittel reduzieren. Faktisch ist diese Aussage nicht zu bezweifeln, nur
fällt bei genauer Betrachtung der Zahlen auf, dass sich der Nutzen auch anders darstellen lässt. Stünde der Nutzen der Patientinnen im Vordergrund,
so wäre eine informative Aufklärung vorteilhaft. Brustkrebs ist eine relativ seltene Krankheit, an der ohne Früherkennungsuntersuchungen jedes
Jahr etwa 14 von 1000 Frauen in der gefährdeten Altersgruppe sterben.
Mammographie-Screenings können die Zahl der Brustkrebsopfer auf 10 reduzieren. Daher haben effektiv nur 4 von 1000 Frauen, also 0,4 Prozent,
einen Nutzen davon, was weit weniger beeindruckend ist. Die Entscheidung über Sinn und Nutzen der Untersuchung sollte also den Betroffenen
selbst überlassen werden. Was zudem laut [4] gerne verschwiegen wird, dass
durch falsch-positive Mammogramme allein in Deutschland jährlich rund
300.000 Frauen monatelang in Angst und Schrecken versetzt werden und
sich schätzungsweise 100.000 von ihnen, in Folge dessen, kleinen Operationen unterziehen.
Prozentangaben, die ohne Angabe der Bruchrechnung auskommen, durch die
sie zustande gekommen sind, sind vorsichtig zu betrachten und erwecken den
Eindruck als hätte der Urheber etwas zu verbergen. Aussagekräftiger ist in
jedem Fall eine Angabe der kompletten Rechnung.
Prozente täuschen oft auch bei Wachstumsraten. Denn diese werden
gerne mit Wachstumsraten von Wachstumsraten in einen Topf geworfen.
Angenommen eine Firma machte folgende Umsätze: 100 101 102,5. Dann
ergibt sich ein relativ schwaches Umsatzwachstum von zunächst einem
Prozent im ersten Jahr und 1,5/101 = 1,49 Prozent im zweiten Jahr. Werden
die Zahlen dagegen in Wachstumsraten von Wachstumsraten angegeben, so
wächst das Umsatzwachstum um stolze 49 Prozent. Mathematisch eine einwandfreie Rechnung, die dennoch die Realitäten auf den Kopf stellt. Unter
einer Steigerung des Umsatzwachstums von fast 50 Prozent stellt man sich
doch eine dynamischere Entwicklung als die der Beispielzahlen vor.
128
Methoden der empirischen Softwaretechnik
3 Median und Mittelwert
3
Median und Mittelwert
Im Allgemeinen wird der Durchschnitt mit dem arithmetischen Mittel
angegeben. Hat Hörsaal A beispielsweise 50 Sitzplätze und Hörsaal B 150
Sitzplätze, so hat im Durchschnitt jeder 100 Sitzplätze. Dafür wird die
Summe der Sitzplätze geteilt durch die Anzahl der Hörsääle. Leicht zu
rechnen verdichtet es große Datenmengen elegant zu einer Zahl. Der Nachteil
liegt in der Unterschlagung von großen Ungleichheiten und nimmt keinen
Bezug zur Streuung um die Mitte. Besitzt in einem Dorf mit zehn Bauern
einer 40 Kühe und alle anderen haben nichts, so hat im Durchschnitt jeder
vier Kühe. Ein schwacher Trost für die neun die keine Kühe haben. Extreme Werte werden voll berücksichtigt, ein Bezug auf die Gleichverteilung
fehlt. Vergleicht man die mittlere Lufttemperatur zweier Orte, so hat
Plymouth/England übers Jahr gerechnet 13 Grad (Tageswerte), damit fast
das gleiche wie in Minneapolis/USA. Dennoch ist das Klima beider Orte
kaum miteinander zu vergleichen. In Plymouth schwankt die Temperatur
zwischen 8 Grad im Februar und 21 Grad im Juli. Plymouth hat also
eine bemerkenswert kleine Streuung der Temperaturen übers Jahr gesehen,
es gibt weder Frost noch große Hitze. Im Januar sinkt das Thermometer
durchschnittlich auf minus 15 Grad, im Sommer steigt es dafür auf über 30,
zuweilen sogar an die Grad 40. Zwischen den gemittelten Werten übers Jahr
gesehen gibt es dennoch keinen Unterschied. Um einen seriösen Durchschnitt
anzugeben, gehört in aller Regel auch ein Maß für die Abweichung dazu.
Mittelwerte ohne zugehörige Abweichung sind also mit Vorsicht zu geniessen.
Der große Gegenspieler des, für die meisten Zwecke völlig ausrechenden
Mittelwerts, ist der Zentralwert oder Median. Etwas grob gesagt ist damit
die Zahl gemeint, die genauso viele linke wie rechte Nachbarn hat. Sind die
Daten vorsortiert, so wählen wir immer genau das Element in der Mitte. Er
ist einfacher zu finden als das arithmetische Mittel und hat noch weitere
Vorteile. Er kann nur Werte annehmen, die auch tatsächlich vorkommen,
z.B. gibt es keine Durchschnittsfamilien mit 1,7 Kindern oder 3 1/2 Sexualpartner pro Bundesbürger, auch wenn solche Angaben immer wieder gerne
von Statistikern zur Erheiterung des Publikums genutzt werden. Ein zweiter
Vorteil kann sein, das tatsächlich die Hälfte aller Werte über und unter dem
Median liegen, was häufig fälschlicherweise auch dem Mittelwert unterstellt
wird. Beim Mittelwert kann das der Fall sein, muss aber nicht.
Ein weiterer großer Vorteil des Medians ist seine Unanfälligkeit gegenüber
Ausreißern. Meß- oder Eingabefehler fallen weniger stark ins Gewicht
und beeinflussen das Ergebnis entsprechend nur um die Anzahl linker
oder rechter Nachbarn. Pro Eingabe kann sich der Median maximal um
Methoden der empirischen Softwaretechnik
129
Grundlagen
eine Stelle von der tatsächlichen Mitte verschieben. Wird hingegen beim
arithmetischen Mittel ein fehlerhafter Wert gemessen, der womöglich einen
Fehler im Exponenten hat, wird das Ergebnis dadurch viel stärker beeinflusst.
Figure 2: aus [1]
Ist sich der Autor eines Berichts darüber im Klaren wo die Vor- bzw.
Nachteile liegen, so können diese ganz gezielt eingesetzt werden. Die Vorund Nachteile sind abhängig vom Standpunkt des Betrachters, sowie vom
Vorkommen der Ausreißerwerte. Treten kleine Werte häufig auf und große
immer seltener, spricht der Statistiker von ”schief verteilt” (genauer: rechtsschief). Typische Beispiele dafür sind Merkmale wie Einkommen, Vermögen
oder Grundbesitz. Je größer der Wert, desto seltener kommt er vor. Bei
solchen Merkmalen liegt das arithmetische Mittel immer oberhalb des Median, manchmal sogar sehr weit darüber. Die vorteilhafte Verwendung ist
naheliegend, hätte man den Durchschnitt gerne etwas höher, so verwendet
man das arithmetische Mittel, ist man dagegen eher an niedrigen Werten
interessiert, so ist der Median die bessere Darstellungsweise. Normalerweise
wird nicht weiter nachgefragt um welchen Durchschnitt es sich handelt, dabei
wäre das häufig eine sehr interessante Frage. Wie gesagt wird dem Durchschnitt unterstellt, er sei das arithmetische Mittel, dem muss aber nicht so
sein und häufig kann der Median viel aussagekräftiger sein.
Handelt es sich bei dem Auftreten von großen und kleinen Werten dage130
Methoden der empirischen Softwaretechnik
3 Median und Mittelwert
gen um eine links-schiefe Verteilung, also viele große Werte und kleine immer
seltener, so ist der Verwendung der beiden Durchschnitte entsprechend umgedreht.
3.1
Gewichtete Mittelwerte
Eine weitere Unterscheidung die man treffen muss ist zwischen gewöhnlichem artihmetischen Mittel und dem ”gewogenen” oder ”gewichteten”
arithmetischen Mittel. Wird beispielsweise der Durchschnittslohn einer
Firma ermittelt, so gibt dafür zwei Möglichkeiten. Zum einen kann man
die Löhne aller auftretenden Lohnklassen aufaddieren und durch die Anzahl
aller Lohnklassen teilen. Die zweite Möglichkeit ist die Lohnklassen mit der
Anzahl der Mitarbeiter zu multiplizieren, die in der jeweiligen Lohnklasse
arbeiten und die Gesamtsumme durch die Anzahl aller Arbeiter zu teilen.
Angenommen in der Softwareschmiede ”Millisoft” arbeiten 19 Programmierer mit einem Stundenlohn von 20e und ein Geschäftsführer mit einem
Stundenlohn von 50e, so beträgt der Durchschnittsstundenlohn für den
ersten Fall:
20+50
2
= 35e
Für den zweiten ergibt sich jedoch ein Stundenlohn der wesentlich
näher an der Realität liegt:
19×20+1×50
20
= 21,5e
Eigentlich ist die Verwendung der Gewichte intuitiv, Angaben mit Tendenz
zur Manipilation bedienen sich aber auch gerne der unsinnigen Variante.
Noch eine Zahl die für Diskussionsbedarf sorgt, ist die Zahl, mit der man
beim arithmetischen Mittel durch die Merkmalsumme teilt, also der Nenner
des Bruches aus dem sich das arithmetische Mittel ergibt. Ein relativ
bekanntes Beispiel ist die Verkehrssicherheit. Da das Auto unangefochten
Platz eins der unsicheren Verkehrsmittel inne hat, betrachten wir hier die
Sicherheit von Flugzeug und Bahn. Aus Erfahrung wissen die meisten
Menschen das Fliegen allgemein als das sicherste Verkehrsmittel gilt. Aller
Nachrichten abgestürzter Flugzeuge zum Trotz, steht meist noch im gleichen
Artikel das Fliegen nach wie vor das sicherste Verkehrsmittel ist. Im
Durchschnitt sterben bei Flugzeugunfällen weniger Leute als bei Unfällen
mit der Eisenbahn. Nur die wenigsten Leute machen sich Gedanken darüber
wie dieser Durchschnitt berechnet wird und welche Zahl den Nenner des
Bruches stellt, der letztlich unseren Mittelwert ergibt. Der Standard-Nenner
Methoden der empirischen Softwaretechnik
131
Grundlagen
sind die insgesamt zurückgelegten Passagier-Kilometer, damit ergibt sich:
Bahn:
9 Verkehrstote pro 100 Millionen Passagierkilometer
Flugzeug: 3 Verkehrstote pro 100 Millionen Passagierkilometer
So gesehen ist Bahn fahren tatsächlich dreimal so gefährlich wie mit
Flugzeug zu fliegen. Wieso befällt viele Leute dennoch die Angst beim
Besteigen eines Flugzeugs, nicht jedoch beim Besteigen eines Zuges. Ändert
man die Einheit des Nenners auf die Anzahl der Stunden die wir uns in
potenzielle Gefahr begeben, dann sieht die Statistik gleich ganz anders aus.
Ob es für den Passagier interessanter ist zu wissen wie wahrscheinlich es
ist auf den nächsten tausend Kilometern oder in der nächsten Stunde zu
Sterben bleibt dahingestellt, ihre Berechtigung hat diese Überlegung alle
mal.
Anstelle der Passagier-Kilometer stehen nun mit erstaunlichem Ergebnis die
Passagier-Stunden im Nenner. Folgende Durchschnitte ergeben sich:
Bahn:
7 Verkehrstote pro 100 Millionen Passagier-Stunden
Flugzeug: 24 Verkehrstote pro 100 Millionen Passagier-Stunden
Der Vorteil des Fliegens hat sich umgedreht - pro Stunde produziert der
Flugverkehr mehr als dreimal so viel tödliche Unfälle wie die Eisenbahn.
Anzumerken bleibt das trotz allem niemand Angst beim Besteigen seines
Bettes hat, auch wenn die Wahrscheinlichkeit, darin zu sterben, bei fast 99
Prozent liegt [1].
4
Vorsortierte Stichproben
Die Methode der Stichprobe ist weit verbreitet und ihr Nutzen unbestritten.
Es ist ausgeschlossen z.B. vor einer Bundestagswahl alle wahlberechtigten
Bürger nach ihrer Meinung zu fragen um bereits vor der Wahl ein mögliches
Ergebnis zu veröffentlichen. Hochrechnungen können aber nur dann aussagekräftig sein, wenn die befragten oder in der Stichprobe aufgenommenen
Personen auch die Gesamtbevölkerung bzw. die Gruppe aller in Frage kommenden Personen repräsentieren. So dürfte eine Stichprobe zur nächsten
Bundestagswahl, die in einem kleinen Dorf in Oberbayern durchgeführt wird,
kaum repräsentativ für die Gesamtbevölkerung sein. Befragt das Studentenwerk die Studenten in der Mensa nach ihrer Meinung zur Qualität des Essens,
132
Methoden der empirischen Softwaretechnik
4 Vorsortierte Stichproben
so ist auch diese Stichprobe bereits vorsortiert, da alle Stundenten, die sich
entschieden haben zu Hause oder woanders zu essen, einen erheblichen Einfluss auf das Ergebnis einer solchen Umfrage hätten. Eine solche Umfrage
nennen Statistiker verzerrt, was das Gegenteil von repräsentativ ist.
Das Ergebnis der Umfrage ist in hohem Maße davon abhängig wen man befragt. So muss es nicht verwundern, dass laut [1] ein Psychiater geschrieben
hat: ”Die ganze Menschheit ist verrückt”. Auf die Frage wie er denn darauf
käme antwortet dieser: ”Sehen sie sich doch die Leute in meiner Praxis an”.
Um möglichst viele Vorsortierungen auszuschliessen werden die Leute zufällig ausgewählt. Der Begriff Zufall ist breit gefächert. Man kann in der
Mensa zufällig Personen auswählen, dabei ist der Zufall dann aber bereits
eingeschränkt auf die Lokalität Mensa. Eine echte zufällige Auswahl muss
aber über allen in Frage kommenden Personen stattfinden. So verwenden
Meinungsforscher die Möglichkeit die Personen telefonisch auszuwählen, um
so auf repräsentative Stichproben zu kommen.
Ein unterschätztes Beispiel für Vorsortierung sind die Nachrichten aus Radio, Fernsehen und Zeitung, die immer nur eine Stichprobe aller potenziellen
Nachrichten sein können. Die Selektion der Stichprobe unterliegt dabei den
Einflüssen von Vorurteilen und Weltbildern der Redaktionen der jeweiligen
Medien und beeinflusst die Wahrnehmung eines jeden Einzelnen. Diese Vorsortierung sollte man bei der Beurteilung der täglichen Nachrichten sowie
bei der Auswahl der Medien sehr stark berücksichtigen. Der Einfluss von
einigen Verlagen und Redakteuren, der auf die Bevölkerung und damit auch
auf die öffentliche Meinung ausgeübt wird, ist immens. Berichten die Medien
nicht mehr von BSE-Fällen bei Rindern, so ist das Thema vom Tisch, auch
wenn diese nach wie vor auftreten. Natürlich spielt dabei auch das öffentliche
Interesse eine Rolle, so dass die Auswahl der Stichprobe ”leider” auch eine
Reaktion auf die Personen ist, die die Medien konsumieren. Mag das auch auf
der einen Seite, beispielsweise in der Fachpresse, vorteilhaft sein. Der Leser
der ”CT” liest ganz gezielt diese Zeitschrift, um eine Selektion von Informationen zu erhalten, die er in anderen Medien nicht bekäme. Andererseits
kann eine solche Beschränkung in den Nachrichten sowohl dazu führen ”Mord
und Totschlag” täglich auf der Titelseite zu lesen, auch wenn das nicht den
Statistiken entspricht, als auch andere Nachrichten die auf weniger Interesse
stoßen aber nicht minder relevant als andere sind, zu vernachlässigen.
Zumindest zu Verzerrungen muss man aber hinzufügen, dass diese nicht
immer mit Absicht oder Hintergedanken geschehen. Häufig kommen die
Nachrichten auch schon verzerrt in den Redaktionen an. Ursachen dafür
sind beispielsweise im Abschnitt ”Korrelation kontra Kausalität” zu finden.
Ein Grund mehr bei der Auswahl der Nachrichten ganz besondere Sorgfaltspflicht walten zu lassen.
Methoden der empirischen Softwaretechnik
133
Grundlagen
5
Korrelation kontra Kausalität
Einer der häufigsten Fehler, der Menschen im Umgang mit Statistiken
unterläuft, ist der falsche Schluß von Korrelation und Kausalität. Die
Annahme, das wenn zwei Variablen parallel verlaufen, die eine die andere
leitet. Das kann richtig sein, manchmal ist es aber auch falsch. So ist zum
Beispiel das Handelsblatt unter dem Stichwort ”Methusalems machen Kasse”
zu dem Schluß gekommen, dass langes Studieren ein hohes Starteinkommen
fördert. Natürlich ist das Gegenteil der Fall. ”Bummelstudenten” haben
eher bescheidene Aussichten auf eine gute Anstellung; das Startgehalt geht
in aller Regel mit steigender Semesterzahl zurück. Das Handelsblatt, dass
diese Darstellung später korregiert hat, kommt zur positiven Korrelation
von Studiendauer und Gehalt aus folgendem Grund: Sie haben alle Fächer
in einen Topf geworfen. Die Hochschulabsolventen mit den langwierigsten
Fächern, wie Chemie und Medizin, hatten die höchsten Startgehälter.
Die Begründung für die höheren Gehälter liegt jedoch in der Schwere der
Ausbildung und nicht in der Länge des Studiums. Die Länge als solche
trägt überhaupt nichts dazu bei. Ganz im Gegenteil ist ein schnellerer
Abschluss ganz klar positiv zu bewerten, nur das dieser schnelle Abschluss
entsprechend schwieriger ist.
Die kürzeren Studiendauern der Diplom-Betriebswirte (FH) runden aufgrund
eines Überangebots die Liste der Startgehälter nach unten ab. Hält man das
Studienfach als dritte Variable konstant, ist der Zusammenhang zwischen
Studiendauer und Gehalt in allen Fächern negativ.
Bei der Korrelation zwischen Rauchen und frühem Sterben tritt der
gleiche Fehler in abgeschwächter Form auf. Auch wenn es wahrscheinlich
einem guten Zweck dient, so ist die Aussage der Bundeszentrale für gesundheitliche Aufklärung, das ein 30jähriger Raucher mit einem Konsum von ein
bis zwei Päckchen Zigaretten am Tag sechs Jahre früher stirbt als ein Nichtraucher, anzufechten. Das wissenschaftliche Institut der Ortskrankenkassen
behauptet sogar es seien 12 Jahre früher. Nur zu naheliegend ist der Schluss,
dass diese Zahl alleine aufgrund des Tabakkonsums so hoch ist. Jedoch
werden Raucher öfter ermordet als Nichtraucher oder auch häufiger von
Bussen überfahren. Die Gründe dafür sind dem Tabak kaum anzulasten,
sondern vielmehr mit der Raucherpersönlichkeit zu erklären, die anscheinend
bewusst mehr gefährliche Gewohnheiten in Kauf nimmt, so dass Menschen
mit dieser Art von Persönlichkeit wohl auch gefährlicher leben würde, wäre
der Tabak niemals entdeckt worden.
Eine weitere Schreckensmeldung aus den Medien ist die von Jahr zu
134
Methoden der empirischen Softwaretechnik
6 Kurvendiskussion
Jahr steigende Krebsgefahr. Laut [1] ist genau das Gegenteil der Fall. Die
Wahrscheinlichkeit an Krebs zu sterben hat quer durch alle Altersklassen
und für Männer wie für Frauen gleichermaßen in den letzten dreißig Jahren
abgenommen. Der tatsächliche Grund dafür das heutzutage rund 23 Prozent
im Vergleich zu 10 Prozent zu Anfang des Jahrhunderts sterben, liegt in
einer unterschlagenen Hintergrundvariable, dem Lebensalter. Die Tatsache,
das Kaiser Wilhelms Zeitgenossen seltener Krebs bekamen, liegt nicht an
ihrem gesunden Lebenswandel, sondern daran, dass die Menschen damals
nur durchschnittliche 45 Jahre alt geworden sind und an anderen Krankheiten
gestorben sind.
Die Liste der unsinnigen Korrelationen lässt sich beliebig fortsetzen. Da
wäre noch die Anzahl der Klapperstörche, deren Zahl hoch positiv mit den
bundesdeutschen Geburten korreliert, die Zahl der unverheirateten Tanten
eines Menschen korreliert negativ mit dem Kalziumgehalt seines Skeletts,
Heuschnupfen und Weizenpreis (negative Korrelation), Schuhgröße und Lesbarkeit der Handschrift (positive Korrelation), Schulbildung und Einkommen (positive Korrelation) und nicht zu vergessen der Ausländeranteil und
die Kriminalität (positive Korrelation). Die Zahl der falsch verstandenen
bzw. absichtlich mißbrauchten Korrelationen kennt praktisch keine Grenze.
Die Gefahr, die aus manchen dieser falschen Schlussfolgerungen für das allgemeine Gedankengut auftritt, ist nicht zu unterschätzen. Beachtet werden insbesondere jene Aussagen, in denen sich jemand in seiner Angst oder
auch Vorurteilen bestätigt fühlt. Ein verantwortungsbewusster Umgang mit
solchen Aussagen sollte eigentlich selbstverständlich sein.
6
Kurvendiskussion
Die grafische Veranschaulichung von Statistiken ist der Favourit unter den
Darstellungsmethoden. Grafisch aufbereitet lassen sich große Datenmengen
meist auf einen Blick schnell Verstehen und Auswerten. Selbst hunderte
von Zahlenwerten können in kurzer Zeit erfasst und verarbeitet, Ergebnisse
so kompakt dargestellt werden. Gerade die oberflächliche Betrachtung bietet reichlich Raum zur Manipulation und wird in ihren Möglichkeiten noch
verstärkt, dadurch dass das Auge noch lange aufnahmefähig ist, wenn der
Verstand längst abgeschaltet hat. In diesem Abschnitt widme ich mich der
speziellen Darstellung mit Hilfe von Graphen.
Angenommen die Softwareschmiede ”Millisoft” möchte anlässlich ihres
10jährigem Firmenjubiläum ein Resumee herausgeben. Von Betriebserfolg
und Gewinnen kann leider keine Rede sein, der Konkursrichter ist alle zwei
Jahre zu Gast und der Firma geht es alles andere als gut. Dennoch erwartet
Methoden der empirischen Softwaretechnik
135
Die grafische Veranschaulichung von Statistiken ist der Favourit
11unter den Darstellungsmethoden. Grafisch aufbereitet lassen sich große Datenmengen meist
auf einen Blick schnell Verstehen und Auswerten. Selbst hunderte von Zahlenwerten können in kurzer Zeit erfasst und verarbeitet, Ergebnisse so kompakt
6 Kurvendiskussion
dargestellt werden. Gerade die oberflächliche Betrachtung bietet reichlich Raum
zur Manipulation und wird in ihren Möglichkeiten noch verstärkt, dadurch dass
Die grafische Veranschaulichung von Statistiken ist der Favourit unter den Dardas Auge noch lange aufnahmefähig ist, wenn der Verstand längst abgeschaltet
stellungsmethoden. Grafisch aufbereitet lassen sich große Datenmengen meist
Grundlagen
hat. In diesem Abschnitt widme ich mich der speziellen Darstellung mit Hilfe
auf einen Blick schnell Verstehen und Auswerten. Selbst hunderte von Zahvon Graphen.
lenwerten können in kurzer Zeit erfasst und verarbeitet, Ergebnisse so kompakt
Angenommen die Softwareschmiede Millisoft“ möchte anlässlich ihres 10jähdargestellt werden. Gerade die oberflächliche Betrachtung
bietet reichlich Raum
”
rigem Firmenjubiläum
einDarstellung
Resumee herausgeben.
Von Betriebserfolg
der Vorstand
eine
möglichst
von eventuellen
eige- und Gezur Manipulation und wirdvorteilhafte
in ihren Möglichkeiten
nochum
verstärkt,
dadurch dass
winnen
kann
leider
keine
Rede
sein,
der
Konkursrichter
ist
alle
zwei Jahre zu
nen Fehlern
abzulenken.
Das folgendeist,
Diagramm
bildet die
Umsätze
als triste
das Auge
noch lange aufnahmefähig
wenn der Verstand
längst
abgeschaltet
Gast und der Firma geht es alles andere als gut. Dennoch erwartet der Vorstand
hat. Inunverschönt
diesem Abschnitt
ich mich dereher
speziellen
Darstellung
Hilfe zu
Realitäten
ab: widme
kaum Dynamik,
Stagnation,
keinmit
Grund
eine möglichst vorteilhafte Darstellung um von eventuellen eigenen Fehlern abvon
Graphen.
viel Begeisterung. zulenken. Das folgende Diagramm bildet die Umsätze als triste Realitäten unAngenommen die Softwareschmiede Millisoft“ möchte anlässlich ihres 10jäh”
verschönt ab: kaum Dynamik,
eher Stagnation, kein Grund zu viel Begeisterung.
rigem Firmenjubiläum ein Resumee herausgeben. Von Betriebserfolg und Ge110keine Rede sein, der Konkursrichter ist alle zwei Jahre zu
winnen kann leider
Gast und der Firma
100 geht es alles andere als gut. Dennoch erwartet der Vorstand
eine möglichst vorteilhafte Darstellung um von eventuellen eigenen Fehlern ab90
zulenken. Das folgende
Diagramm bildet die Umsätze als triste Realitäten unverschönt ab: kaum
Dynamik,
eher Stagnation, kein Grund zu viel Begeisterung.
80
110
70
100
60
90
50
80
40
70
30
60
20
50
10
40
0
1
30
2
3
4
5
6
7
8
9 10
Um Platz zu sparen und den Inhalt etwas zu komprimieren, wird ein Teil
der senkrechten Achse häufig abgeschnitten, so wie im nachfolgenden Diagramm.
10
Solange an einer unterbrochenen senkrechten Achse deutlich gemacht, dass etUm Platz
zu sparen
und den Inhalt etwas zu komprimieren, wird ein
0
was geschnitten wurde ist das noch vertretbar. Fehlt dieser Hinweis handelt es
Teil der senkrechten
Achse
so wie im nachfolgenden
1 2 3sich4um5Manipulation.
6häufig
7 8 abgeschnitten,
9 10
20
Diagramm. Solange
105 an einer unterbrochenen senkrechten Achse deutlich
Um Platz zu
sparen und den Inhalt etwas zu komprimieren, wird ein Teil
gemacht,
dass etwas
geschnitten
wurde ist so
das
vertretbar.Diagramm.
Fehlt dieser
der senkrechten
Achse
häufig abgeschnitten,
wienoch
im nachfolgenden
104
Hinweis
handelt
es
sich
um
Manipulation.
Solange an einer unterbrochenen senkrechten Achse deutlich gemacht, dass et103
was geschnitten wurde ist das noch vertretbar. Fehlt dieser Hinweis handelt es
102
sich um Manipulation.
105
101
104
100
1
103
2
3
4
5
6
7
8
9
102
101
100
1
2
3
4
5
6
7
8
9
10
Um die Manipulation noch effektiver einzusetzen wird im nächsten Schritt
die senkrechte Achse wieder gestreckt und der Umsatz wächst dynamischer.
136
Methoden der empirischen Softwaretechnik
10
Um die Manipulation noch effektiver einzusetzen wird im nächsten Schritt
die senkrechte Achse wieder gestreckt und der Umsatz wächst dynamischer. Bei
dieser Art der Darstellung wird kaum6noch
jemand auf die Idee kommen den
Kurvendiskussion
Erfolg der Firma anzuzweifeln.
Bei dieser Art der Darstellung wird kaum noch jemand auf die Idee kommen
den Erfolg der Firma anzuzweifeln.
105
104
103
102
101
100
1
2
3
4
5
6
7
8
9
10
Bereits deutlich manipuliert, aber die Möglichkeiten sind noch nicht erschöpft. Ein wenig stört noch der vergleichsweise flache Anstieg zwischen
Sieht
schon sehr der
gut Zwischenjahre,
aus, die Möglichkeiten
sind aber noch
den Jahren 6 und 10. Durch
Weglassen
was bedeutet
das nicht erschöpft.
Ein
wenig
stört
noch
der
vergleichsweise
flache
Anstieg
zwischen
eine Einheit auf der waagerechten Achse sowohl für ein Jahr als auch für drei den Jahren 6
und 10. Durch Weglassen der Zwischenjahre, was bedeutet das eine Einheit auf
Jahre steht, lässt sich der
derwaagerechten
Graph weiter
”optimieren”. Zusätzlich wird die
Achse sowohl für ein Jahr als auch für drei Jahre steht, lässt
Decke des Diagramms sich
etwas
gesenkt,
so
die Umsatzkurve
amdie
oberen
der Graph weiter dass
optimieren
“. Zusätzlich wird
Decke des Diagramms
”
rechten Rand geradezuetwas
das gesenkt,
Diagramm
durchbricht.
Um am
diesen
Effekt
noch
so dass
die Umsatzkurve
oberen
rechten
Rand geradezu das
Diagramm
durchbricht.
Um
diesen
Effekt
noch
zu
unterstreichen
zu unterstreichen bekommt der rechte Rand der Kurve noch einen dicken bekommt der
rechte
der an
Kurve
einenweggelassen.
dicken Pfeil. Ausserdem werden die Zahlen
Pfeil. Ausserdem werden
dieRand
Zahlen
dennoch
Achsen
an den Achsen weggelassen.
Im Alltag ist diese überzogene Art der graphischen Datenkosmetik
glücklicherweise nicht die Norm, sondern operiert vielmehr in der Mitte
zwischen dem letzten Schaubild und dem Ausgangsdiagramm [1] . Selbst
in der Werbung, in der Übertreibungen zum täglichen Geschäft gehören,
kommen solch extrem übertriebene Graphiken nicht allzuoft vor. Der
Schaden hält sich auch deswegen in Grenzen, da normalerweise in Annoncen
und Werbung nicht nach der Wahrheit gesucht wird. Umso unangenehmer
sind solch drastische Darstellungen in redaktionellen Texten, in denen man
sie eigentlich weniger erwartet wie z.B. Berichten über Börsenkurse und
Aktienverläufe.
Methoden der empirischen Softwaretechnik
137
13
Grundlagen
Im Alltag ist diese überzogene Art der graphischen Datenkosmetik glücklicherweise nicht die Norm, sondern operiert vielmehr in der Mitte zwischen dem
letzten Schaubild
Ausgangsdiagramm
[1] . Selbst
Neben den oben gesehenen
Formenund
derdem
graphischen
Datenkosmetik
gibtin der Werbung,
in der Übertreibungen zum täglichen Geschäft gehören, kommen solch extrem
es noch die Möglichkeit des Stauchens oder Dehnens der Achsen. Der Verübertriebene Graphiken nicht allzuoft vor. Der Schaden hält sich auch deswegen
lauf der Beschriftung in
istGrenzen,
mindestens
zweigeteilt.
Das heißt
da normalerweise
in Annoncen
undanstatt
Werbunglinear
nicht nach der Wahroder logarithmisch durchzulaufen,
ändert
die
Achsenbeschriftung
Funk-Darstellungen in
heit gesucht wird. Umso unangenehmer sind solch ihre
drastische
redaktionellen
Texten, in denen
man sie
eigentlich
erwartet wie z.B.
tionsvorschrift. Eine Gerade
mit konstantem
absolutem
Anstieg
proweniger
Periode
Berichten
über
Börsenkurse
und
Aktienverläufe.
flacht durch das Dehnen des zweiten Teils der waagerechten Achse im Wach-
stum scheinbar ab. Umgekehrt nimmt das Wachstum durch einen Dehnung
Neben den oben gesehenen Formen der graphischen Datenkosmetik gibt es
des ersten Teils der waagerechten
Achse des
scheinbar
zu.oder Dehnens der Achsen. Der Verlauf der
noch die Möglichkeit
Stauchens
Beschriftung ist mindestens zweigeteilt. Das heißt anstatt linear oder logarithmisch durchzulaufen, ändert die Achsenbeschriftung ihre Funktionsvorschrift.
7 Experimentmethodik
Eine Gerade mit konstantem absolutem Anstieg pro Periode flacht durch das
Dehnen des zweiten Teils der waagerechten Achse im Wachstum scheinbar ab.
Die Experimentmethodik
gibt nun
Gelegenheit
einigedurch
Punkte
ausDehnung
vorherigen
Umgekehrt
nimmt
das Wachstum
einen
des ersten Teils der
waagerechten
Achse scheinbar anzuwenden
zu.
Kapiteln auf die empirische
Softwaretechnik
bzw. weitere
allgemeine Kritik am Beispiel zu üben. Die Erläuterung der komplizierten
Umstände und Randbedingungen
unter denen die Experimente stattfinden
7 Experimentmethodik
müssen, werden deutlich machen, dass selbst eine unbeabsichtigte MaDie Experimentmethodik gibt mir nun Gelegenheit einige Punkte aus vorherinipulation nur sehr schwer
zu vermeiden ist. Oberstes Ziel ist hierbei
gen Kapiteln auf die empirische Softwaretechnik anzuwenden bzw. weitere allgedie Aussagekraft der meine
Experimente,
die nurzu mit
Störvariablen
Kritik am Beispiel
üben.begrenzten
Die Erläuterung
der komplizierten Umstände
und unter sauberen Bedingungen
zustande
Nicht
immer müssen, werden
und Randbedingungen
unterkommen
denen die kann.
Experimente
stattfinden
machen, die
dass Rede
selbst eine
Manipulation
kann bei Manipulationdeutlich
von Vorsatz
sein,unbeabsichtigte
wenn man bedenkt
wie nur sehr schwer
zu
vermeiden
ist.
Oberstes
Ziel
ist
hierbei
die
Aussagekraft
der Experimente,
komplex Variablen voreinander abhängen oder wie schwer es ist Störfaktoren
138
Methoden der empirischen Softwaretechnik
7 Experimentmethodik
auszuschliessen. Bereits erwartete Ergebnisse können ganz unbewusst
manipulierend wirken und der Vorwurf einer vorsätzlichen Manipulation
sollte daher gut geprüft sein.
Weite Teile zur Versuchsdurchführung und Methodik beziehen sich auf [2].
Sollte hier der Bezug zum Thema ”Kritik in Statistik” nicht erkennbar sein, so
sei darauf hinwiesen, dass auch Ergebnisse aus kontrollierten Experimenten
in der Softwaretechnik mit Hilfe von Statistik dargestellt werden. Die
Kritik der vorherigen Kapiteln kann leicht so verstanden werden, dass stets
Vorsatz und Bevorteilung der Grund für Manipulationen ist. Um dies zu
widerlegen oder zumindest ein paar Ansätze für mehr Verständnis anzuregen
werde ich kurz auf einige Probleme und Überlegungen erläutern, die bei der
Planung und Durchführung kontrollierter Experimente in Erscheinung treten.
Repräsentative Ergebnisse in Experimenten zu bekommen ist meist
nur unter strengen Bedingungen möglich, und auch dann bleiben häufig
berechtigte Zweifel an der Allgemeingültigkeit oder Aussagekraft, bedingt
durch die Umstände, unter denen die Ergebnisse zustande gekommen sind.
Zweifel können das gesamte Experiment in Frage stellen und sollten deswegen
soweit wie möglich durch sorgfältig geplante und durchgeführte Versuchsbedingungen ausgeschlossen werden. Denn auch ohne vorsätzliche Manipulation lässt sich eine Beeinflussung auf die Ergebnisse nur schwer ausschliessen
was sich im folgenden verdeutlichen wird. Als Basis sollte ein gelungener
Experimententwurf dienen, dessen Planung es einiger grundlegender Überlegungen bedarf, denn auch auf das wesentliche beschränkt bleiben immer
noch folgende Punkte:
• welche Gruppen
• in welcher Reihenfolge
• welche Aufgaben erledigen bzw. unter welchen Bedingungen arbeiten
und
• welche abhängigen Variablen dabei beobachtet werden sollen.
7.1
Randbedingungen
Die Fähigkeiten des Experimentators sind maßgeblich für das Ergebnis des
Experiments. Dabei ist taktisch kluges Verhalten und die Fähigkeit richtige
Entscheidungen in Detailaspekten zu treffen weitaus bedeutsamer als
theoretisches Wissen über Experimententwurf, Bedrohungen der Gültigkeit,
Statistik und ähnlichen Themen. Die Ursachen dafür liegen in den überaus
Methoden der empirischen Softwaretechnik
139
Grundlagen
schwierigen Randbedingungen unter denen softwaretechnische Experimente
stattfinden. Die Kosten und der Umfang des Experiments sind ein Aspekt.
Soll das Experiment mit hoch qualifizierten und ökonomisch sehr gefragten
Versuchspersonen durchgeführt werden oder kann ein gleichwertiges Ergebnis auch mit Studenten erreicht werden?
Muss auf hochqualifizierte
Versuchspersonen zurückgegriffen werden, wird die Mitwirkung schnell sehr
teuer, so dass als Ausgleich der Umfang der bearbeiteten Aufgaben nur
klein sein kann. Dem widerspricht, dass die zu untersuchenden Tätigkeiten
meist viel Zeit in Anspruch nehmen und eher langwierig und umfangreich
sind. Auch kann die Verfügbarkeit geeigneter Versuchspersonen ein Problem
darstellen. Die geforderten Kenntnisse sind häufig sehr spezifisch und eine
nachträgliche Vermittlung dieser Kenntnisse ist in vielen Fällen unrealistisch
oder nicht möglich. Je spezieller die Anforderungen desto schwieriger
gestaltet sich die Versorgung mit Versuchspersonen unter Beachtung der
Verwertbarkeit der Ergebnisse.
Die Auswahl der Aufgaben für die Versuchspersonen ist ebenfalls eine
sehr schwierige Aufgabe. Bedenkt man, dass die Aufgaben dem Experimentziel, der Qualifikation der Versuchspersonen und dem umsetzbaren
Arbeitsaufwand genügen müssen und auch von Seiten der Experimentatoren
nur ein realistischer Herstellungs- und Aufbereitungsaufwand gefordert werden kann, so wird dies nachvollziehbar. In vielen Fällen ist sogar unklar, wie
sich die Messung der relevanten Variablen überhaupt gestalten soll oder wo
die Möglichkeit zur gezielten Einflussnahme auf interessante, unabhängige
Variablen überhaupt besteht. Letzlich darf auch die Auswerbarkeit des
Experiments nicht aus den Augen gelassen werden.
Die vierte Randbedingung ist die technische Durchführung. Den Versuchspersonen eine Arbeitsumgebung zu bieten, die auf der einen Seite
geeignet, bestenfalls gewohnt erscheint, und auf der anderen Seite zugleich
eine korrekte Messung der unabhängigen Variablen zulässt, aber auch die
Kontrolle der unabhängigen Variablen erlaubt. Neben der Isolation von
äußeren Einflüssen zählt zu den problematischten Aspekten die technische
Infrastruktur in Form von Hard- und Sofware.
Als Folge der Randbedingungen liegt das Ziel von Experimenten in der
Softwaretechnik daher realistischerweise nicht in der Durchführung eines
perfekten Experiments, sondern vielmehr darin überhaupt ein brauchbares und zugleich relevantes Ergebnis zu erreichen.
Dr. Prechelt [2] hat eine Prioritätenliste für die Auswahl aus denkbaren
Entwurfsalternativen zusammengestellt, die Reihenfolge der wichtigsten
140
Methoden der empirischen Softwaretechnik
7 Experimentmethodik
Eigenschaften billig, praktikabel, sicher und aussagekräftig ergibt folgende
Liste:
1. Die Kosten des Experiments, insbesondere Anzahl und Zeitaufwand der
Versuchspersonen, in einen realsitischen Bereich zu drücken.
2. Die Aufgaben so auszuwählen, dass das Experiment überhaupt praktikabel wird.
3. Die Chancen für ein Scheitern des Experiments zu minimieren. Dabei
insbesondere die Über- und Unterforderung der Versuchspersonen und
die Wahl der Aufgabe in Hinblick auf den aufzeigbaren Effekt der untersuchten Variable zu berücksichtigen.
4. Die Anzahl erhaltener Datenpunkte der abhängigen Variablen zu maximieren.
5. Minimierung zu erwartender Nebeneffekte, die eine Aussage des Experiments beeinträchtigen könnten
6. Maximierung der Zahl anderer eventuell relevanter Beobachtungen
(qualitative oder quantitative), um einen möglichen Nebennutzen des
Experiments zu steigern
Zusammenfassend lassen sich diese Überlegungen auf folgende Aussage
zuspitzen: ”Die Kunst erfolgreicher kontrollierter Experimente in der
Softwaretechnik besteht vor allem darin, einen geeigneten Aufbau zur
Untersuchung der gewünschten Fragestellung so weit herunter zu skalieren,
dass das Experiment praktikabel wird, ohne jedoch dabei die innere und
äußere Gültigkeit zu sehr zu beeinträchtigen oder den zu beoachtenden
Effekt zu verdecken.” ( [2] S.107) Oder kurz gesagt: ”Die Kunst besteht
darin, ein Experiment klein zu machen, ohne es kaputt zu machen.”
Eine methodische Vorgehensweise sollte bei Erfüllung aller Randbedingungen ein gültiges Ergebnis zu einer relevanten Fragestellung erzwingen und
gleichzeitig versuchen die Kosten zu minimieren.
7.2
Versuchspersonen
Der Einsatz von Versuchspersonen bringt weitere Variablen und Randbedingungen mit sich. Da wäre zum einen die Frage der Verfügbarkeit, als
auch der fachlichen Kompetenz der Versuchspersonen. Dabei stellt sich die
Methoden der empirischen Softwaretechnik
141
Grundlagen
nächste Frage nach Beeinträchtigung durch unterschiedliche fachliche Kompetenz. Existiert diese überhaupt und warum könnten dadurch Probleme
auftreten. Und inwiefern ändern sich Randbedingungen bei Experimenten
mit Teamarbeit im Gegenüberstellung zur Einzelarbeit. Wie sorgt man für
ausrechende Motivation?
7.2.1
Kompetenz
Die Frage nach der Kompetenz der Testpersonen ist gleichzeitig einer der
am häufigsten und schärfsten betonten Kritikpunkte. Die Tatsache das die
Versuchspersonen in den meisten Fällen Studenten sind ist Grund dafür,
dass manche Kritiker solche Experimente von vornerein verwerfen und behaupten die Ergebnisse wären nicht auf ”wirkliche” übertragbar. Mag das
auch manchmal der Wirklichkeit entsprechen, so ist diese Reaktion meist
überzogen. Dagegen spricht zum einen, dass der Unterschied zwischen (fortgeschrittenen) Studenten und Profis gar nicht so groß ist, und außerdem ist
er in vielen Fällen ohnehin kaum relevant. Das fortgeschrittene Studenten
”kurze” Zeit später selbst zu den Profis zählen wird ein Grund dafür sein,
hinzu kommt das die mittlere Berufserfahrung der Profis in vielen Bereichen
technologisch fortschrittlicher Softwareentwicklung recht kurz ist. Die Nachfrage war längere Zeit so groß, dass die Hochschulen ihr nicht gerecht wurden
und die Unternehmen zusätzlich viele fachfremde Akademiker wie z.B. Biologen und Chemiker eingestellt haben. Diese fachfremden Qualifikationen
erfordern normalerweise einige Jahre als Profi, um das von vornherein bessere
Qualifikationsniveau eines Informatikers auszugleichen. Zumindest bei einem
Teil der Profis wurde viel Zeit ihrer Berufserfahrung in die Schliessung einer
Lücke investiert, die fortgeschrittene (Informatik-) Studenten eigentlich nicht
mitbringen dürften.
Zahlreiche kontrollierte Experimente haben gezeigt, dass, von Anfängern
mal abgesehen, die Länge der Programmiererfahrung wenig Rückschlüsse
auf die Kompetenz eines Softwareingenieurs zulässt [2]. Die höhere fachliche Kompetenz bringt nicht selten eine sehr hohe Spezialisierung mit sich,
die bei Nichtübereinstimmung des Experiments eher kontraproduktiv ist. In
diesem Fall sind Studenten einem nicht zutreffend spezialisierten Profi sogar
vorzuziehen.
Je nach Experiment steht die Veränderung der Leistung bei Änderung der
unabhängigen Variable im Vordergrund und nicht die absolute Leitung. Von
daher stellt sich die Frage, ob Kompetenzunterschieden zwischen den Versuchspersonen überhaupt soviel Beachtung zukommen sollte. Die Relevanz von Kompetenzunterschieden hängt mit der resultierenden Arbeitsweise
142
Methoden der empirischen Softwaretechnik
7 Experimentmethodik
zusammen. Bei grob gleicher Vorgehensweise, unabhängig von der Kompetenz der Versuchspersonen, ist auch die Relevanz weit geringer. Ermöglicht
eine höhere Kompetenz eine gänzlich andere Vorgehensweise beim Lösen der
Aufgabe, so darf damit gerechnet werden, dass sich auch die Unterschiede
zwischen den Experimentgruppen verändern können. Folgende Faktoren
begünstigen eine grundsätzlich andere Vorgehensweise einer weniger kompetenten Gruppe von Versuchspersonen im Vergleich zu einer kompetenten
Gruppe:
• Die Versuchpersonen sind generell noch ungeübt in der Lösung softwaretechnischer Aufgaben.
• Die Versuchspersonen sind in genau der untersuchten Tätigkeit zu
ungeübt.
• Die gestellte Aufgabe ist sehr kompliziert.
• Die gestellte Aufgabe ist sehr speziell.
• Die gestellte Aufgabe ist sehr umfangreich.
Verweise auf Literatur zu Beispielen für entsprechende Szenarios finden
sich in [2] Kapitel 8.1.
Aus obigen Überlegungen ergeben sich einige zusammengefasste Faustregeln
[2]:
• Experimente mit Anfängern sollte man vermeiden. Eine Verfälschung
der Ergebnisse durch möglicherweise völlig andersartige Arbeitsweise
könnte die Folge sein.
• von Punkt 1 abgesehen sind Experimente mit studentischen Versuchspersonen unproblematisch
• unabhängig von der Kompetenz der Versuchspersonen droht bei
Überforderung ein Scheitern des Experiments. Überforderung muss
sorgfältig vermieden werden.
- Die Überforderungsschwelle kann je nach Aufgabe bei Studenten
eventuell niedriger sein als bei Profis.
- Fehlendes Training der untersuchten Tätigkeit kann bei beiden
Gruppen eine Überforderung zur Folge haben.
Methoden der empirischen Softwaretechnik
143
Grundlagen
7.2.2
Homogenität
Grundsätzlich ist es wünschenswert, dass die Leistungsfähigkeit der Experimentteilnehmer möglichst homogen ist. Es kann sinnvoll sein unter Umständen auf manche Versuchspersonen von vornherein zu verzichten, wenn
deren Qualifikation zu stark von der der übrigen Teinehmer abweicht. Die
Ergebnisse eines kontrollierten Experiments werden um so klarer und aussagekräftiger, je eindeutiger (nicht unbedingt größer) die beobachteten Unterschiede zwischen den Versuchsgruppen ausfallen. Existieren jedoch große Unterschiede innerhalb der Versuchsgruppen, so erschwert es die Ausarbeitung
der Unterschiede zwischen den Gruppen, da diese verwischt werden. Leider lässt sich dieser Effekt kaum vermeiden, die indiduellen Unterschiede
zwischen Leuten aus der Softwarebranche sind erheblich. Die langsamere
Hälfte der Gruppe braucht typischerweise mindestens doppelt so lange wie
die schnellere - Unterschiede einzelner Personen fallen dementsprechend noch
größer aus (Abschnitt 16.3 aus [2] ). Der Unterschied der Mittelwerte von
Versuchs- und Vergleichsgruppe im Experimenteffekt ist mit allenfalls 70%
deutlich geringer.
Mit Hilfe von Vortests kann ein großer Teil der Unterschiede aus den Ergebnissen herausgerechnet und trotz starker Schwankungen scharfe Aussagen
erreicht werden. Dazu muss allerdings die zu erwartende relative Leistung
der Versuchspersonen vor dem eigentlichen Experiment bekannt sein.
7.2.3
Teams
Aufgaben in Experimenten können Gruppenarbeit erfordern, die nicht mit
einer seperaten Beobachtung und Auswertung von Teilnehmern in Einklang
zu bringen ist. Die gegenseitige Beeinflussung der Personen innerhalb eines
Teams machen ein gutes Experiment nochmals schwieriger; erhöhte Variabilität und fragwürdige Gültigkeit sind nur zwei der zusätzlichen Anforderungen. Auch der Aufwand für Bereitstellung und Verteilung der Aufgaben
dürfte abermals höher sein. Die Durchführung eines Experiments mit Teams
anstelle von Einzelpersonen bringt bei gleicher Personenzahl und gleichem
Zeitaufwand eine geringere Anzahl von Datenpunkten. Das ist ein deutlicher
Nachteil, da die gewonnene Schärfe der Aussagen abnimmt. Ein zumindest theoretischer Vorteil ist das Ausmitteln individueller Unterschiede der
einzelnen Versuchspersonen innerhalb eines Teams. Dem steht ein weiterer
möglicher Nachteil gegenüber, dass ein Team aufgrund von Kommunikationsschwierigkeiten oder besonderer Gruppendynamik wesentlich schlechter oder
aufgrund von Synergieeffekten spürbar besser ist als das Mittel seiner Mitglieder einzeln betrachtet. Experimente mit Teams bieten ein, bei mindestens
144
Methoden der empirischen Softwaretechnik
8 Zusammenfassung
gleichen Kosten, höheres Risiko eines unbrauchbaren Ergebnisses. Weitere
Unsicherheiten bringt die Zusammenstellung der Teams, die wiederum eine
Beeinträchtigung der Leistung und schwer kalkulierbare, gruppenabhängige
Lerneffekte mit sich bringt.
7.2.4
Motivation
Im letzten Abschnitt zum Thema Versuchspersonen möchte ich noch ein paar
Worte zu Motivation und Teilnahmeanreizen loswerden. Motivationsunterschiede zwischen den Gruppen oder einzelnen Teilnehmern sind natürlich
Gift für jedes Experiment und zerstören die innere Gültigkeit. Auch eine
gruppenübergreifende extrem hohe oder niedrige Motivation bedroht das Experiment, denn sie kann Ergebnisse an den Rand der Bedeutungslosigkeit
führen. Eine extrem hohe Motivation wird ohne gezielte Mitwirkung der
Experimantatoren wohl kaum auftreten und kann gegebenenfalls von ihnen
ohne Schwierigkeiten gedämpft werden. Eine extrem niedrige Motivation
kann Folge einer unfreiwilligen Teilnahme am Experiment sein, der man mit
Teilnahmeanreizen entgegentreten kann. Finanzielle Anreize können je nach
Höhe und Vergabebedingungen entweder zu einer unnatürlich hohen Motivation oder eine Abzocker-Mentalität fördern (niedrige Motivation).
8
Zusammenfassung
Im Bezug auf die Softwaretechnik ist zumindest deutlich geworden wie schnell
man sich unabsichtlich eine vorsortierte Stichprobe eingefangen hat, einfach weil es sehr schwierig ist für alle Teilnehmer gleiche Bedingungen bereitzustellen bzw. überhaupt gleichwertige Teilnehmer(-gruppen) zu bekommen. Auch der Schluss einer falschen Kausalität von Korrelationen kann,
wegen schlecht zu erkennenden Abhängigkeiten, leicht unterlaufen. Die abhängigen Variablen sind dabei viel schwieriger zu erfassen und messen als
bei anderen statistischen Erhebungen, die beispielsweise von vornherein auf
metrischen Einheiten oder Skalen aufbauen.
Einige Themen die weiteren Anlass zur Kritik bieten wie beispielsweise der
synthetische Superlativ sind nochmal ein Stückchen weiter vom eigentlichen
Thema ”Methoden der empirischen Softwaretechnik” entfernt und bedürften
einiger Erklärung im Zusammenhang mit Statistik. Dennoch ist hoffentlich
ein Bogen von allgemeiner Kritik in Statistik zu speziellen Problemen in
der Experimentmethodik der Softwaretechnik erkennbar. Die Demonstration
und Aufdeckung von Manipulation an Fakten gibt dem Leser im besten Fall
etwas mehr Vorsicht im Umgang mit Zahlen und Diagrammen auf den Weg.
Wissen, das man auch alltäglich und nicht nur ”am Computer” verwenden
Methoden der empirischen Softwaretechnik
145
Grundlagen
kann. Aber auch von aktiver Seite bei der Ermittlung und Darstellung ermittelter Ergebnisse die Sachlichkeit nicht zu vernachlässigen und für möglichst
”saubere” Versuchsbedingungen - schon im eigenen Interesse - zu sorgen. Die
Inhalte der Abschnitte jenseits der Softwaretechnik lassen sich weitestgehend
auch auf die Experimentmethodik, statistische Zahlen und Ergebnisse im
Reiche des Computers übertragen. Insbesondere Veröffentlichungen aus dem
Bereich der empirischen Informatik bringen häufig Statistiken und Experimentergebnisse mit sich. Eine Aufdeckung solcher Manipulationen - bestenfalls mit Hilfe der vorangegangenen Beispiele - bleibt nun Sache des Lesers
und hoffentlich - aufgrund verantwortungsvoller, wissenschaftlicher Arbeit reine Utopie.
References
[1] Walter Krämer, So lügt man mit Statistik, Piper 2003 3. Auflage
[2] Lutz Prechelt, Kontrollierte Experimente in der Softwaretechnik,
Springer 2001
[3] Die Zeit, Cornelia Stolze, Die fremde Welt der Zahlen, 33-2002
[4] Gerd Gigerenzer, Einmaleins der Skepsis, Berlin Verlag 2002
146
Methoden der empirischen Softwaretechnik
Experimente: Allgemein
The 28:1 Grant/Sackman legend
René Püttmann
Keywords: Grant, Sackman, Prechelt, work time, interpersonal variation, debug
time, programmer-performance,
Abstract
In the year 1967 Grant and Sackman published a paper on the
topic of interpersonal variation. Their experiments led them to the
conclusion that the interpersonal variation in a group of programmers
solving the same task is 28:1, this means that the slowest programmer
takes 28 times longer than the fastest programmer.
This report takes a look at Lutz Prechelt’s paper ”The 28:1
Grant/Sackman legend is misleading, or: How large is interpersonal
variation really?”, which contradicts the results of Grant and Sackman. For the big picture we also take a look at related works of Grant
and Sackman.
Experimente: Allgemein
1
The paper(s) of Grant and Sackman
In 1967 E. Eugene Grant and Harold Sackman published ”Exploratory Experimental Studies Comparing Online and Offline Programming Performance”
a milestone in programmer-performance comparison. This paper provides
the basis for a ratio of 28:1 being the worst case interpersonal performance
difference.
Early in the year 1967 Grant and Sackman had published another paper on the same topic, called ”An Exploratory Investigation of Programmer
Performance Under On-Line and Off-Line Conditions”, which is actually a
relatively unknown, long-version of the other paper.
1.1
The experiment of Grant and Sackman
With their experiment, which was conducted one year before the release of the
two papers, Grant and Sackman intended to compare the program debugging
performance under two conditions, one being online programming, the other
offline programming.
In offline programming, also called closed shop access, programs are run,
one at a time, in a so called closed shop, a rather large computer installation,
where the programs are run by shop personnel. The programmer is usually
not present at the time the programs are run. The typical turnaround time,
the time between submission of the program and return to the programmer,
for these installations was 24 to 48 hours.
Online programming, also called direct access, is comparable to nowadays
programming habits, e.g. the programmer debugs a program using an interactive environment on a workstation. The advantages of online programming
towards offline programming should be obvious.
Twelve subjects participated in the experiment of Grant and Sackman.
Their qualification varied to some degree as can be observed in figure 2,
though all were professional programmers.
The programmers were split into two groups of 6 subjects each. Both
groups were assigned two tasks, each group had to solve one task by online
programming and the other one by offline programming, as shown in figure
1.
The two tasks or program problem statements were especially designed
for the experiment. One task was to write a program to solve algebraic
equations with a single dependent variable, the solutions were called Algebra
programs.
The other program should calculate the only path through a 20 by 20 cell
maze. These programs were referred to as Maze programs.
150
Methoden der empirischen Softwaretechnik
1 The paper(s) of Grant and Sackman
Figure 1: ”latin square experiment [2]” setup
The debugging time started as soon as the compiler didn’t detect any
serious format errors within the program coded by the subject. It ended
when the program was able to process a standard set of test inputs, without
generating errors. Not only the programmer Man Hours but also the CPU
time were collected for comparison of online and offline debugging.
Man Hours are the actual hours spent debugging, including the
turnaround time in the offline cases. The offline cases were simulated by
letting the subjects take a two hour break between start and end of each debugging step. The experimental staff took care of a most exact hour recording, discrepancies between the time observed by the experimental staff and
the reported time were resolved by interviewing.
1.2
Their interpretation of the data
In their earlier paper Grant and Sackman clearly state that the characteristics of the acquired data ”pose three serious problems for statistical analysis”.
All these problems relate to the treatment of the data with statistical methods. Grant and Sackman interpret the data of the rows labeled ”Criterion
Measures for Debugging Performance” as follows, the Debug Man Hours are
always smaller in the online cases, for the Algebra problem it’s a 50% gain
and for the Maze problem it took the subjects only a third of the time, that
they needed in the offline case. When comparing the CPU time these ratios are turned around, the online cases took approx. 30% more CPU time
than the offline cases. But as Grant and Sackman point out the statistical
significances of these ratios is of lesser importance.
According to Grant and Sackman, one can say, when taking the other
datasets into account, that the two groups ”were more or less evenly matched
on programming skill for the two experimental problems”, when taking program size and program running time into account.
Grant and Sackman concluded that the data can be used for statistiMethoden der empirischen Softwaretechnik
151
Experimente: Allgemein
Figure 2: experimental data matrix [2]
152
Methoden der empirischen Softwaretechnik
1 The paper(s) of Grant and Sackman
cal methods, though there are some restrictions. The Latin-Square design
used for this experiment, requires to analyse the variance. This analysis requires three basic conditions: normal distributions, homogeneous variances
and linear relationships in the effects of the experiment. Due to the positively skewed distributions of the four ”Criterion Measures for Debugging
Performance” the first condition can not be satisfied. Due to the large differences between the standard deviations for Algebra and Maze performance the
second condition also poses a problem. Only the third condition is satisfied
without any limitations.
To get a more homogeneous variance and therewith satisfy the second
condition, a square-root transformation was applied upon the data, according
to Grant and Sackman a common course of action, when dealing with extreme
data dispersions.
Figure 3: Comparative results of three analysis of variance [2]
Grant and Sackman applied three types of analysis of variance (see figure
3) to the Latin-Square experimental design (see figure 1) for the two criterion
measures Debug Man-Hours and CPU Time. The entries in figure 3 show
the level of statistical significance for each of the six analysis of variance for
CPU Time as well as Debug Man-Hours. A detailed look at variance analysis
can be found in the section Mathematical fundamentals.
Now that the data is prepared for analysis, Grant and Sackman took a
closer look at the Average Debug Man-Hours (see figure 1). One can observe, that the Offline Debug Man-Hours increase with growing turnaround
time, while the Online Debug Man-Hours are constant. This is what one
would have assumed, as the turnaround time is only related to the Offline
Experiment.
Grant and Sackman used different statistical methods to get a global
view of the significance of the data. Some of these will be explained in the
chapter Mathematical fundamentals. The final chapter of Grant and SackMethoden der empirischen Softwaretechnik
153
Experimente: Allgemein
Figure 4: Debug Man-Hours estimated as a function of turnaround time
from the experimental data [2]
man’s paper, called Interpretation, focuses on three major objectives: online
vs. offline programming performance,the analysis of individual differences in
programming proficiency and the implications of the methodology and findings
for future research. We will have a closer look at the first objective.
The online programming resulted in a significantly better performance
than the offline programming, when regarding the needed Debug Man-Hours.
But Grant and Sackman also point out that due to ”the exploratory nature
of this study” and the need of further research every result has to be second
guessed. The experiment only simulated the offline environment via an online environment therewith it may be possible that, had it been vice versa,
the result would have been different. Furthermore ”the use of new or different programming languages” might cause the results to differ. They also
point out another problem, there is no widely accepted classification scheme
for programmers, therewith the comparison of the datasets turns out to be
rather difficult. They also point out that the difference between offline and
online programming decreases with decreasing turnaround time, leading to
a tie when setting turnaround time to zero. This leads to the assumption
that the timespan of the turnaround time cannot be efficiently used by the
programmer, but they also make clear that further research is necessary in
order to affirm this assumption. Another problematic element, according
154
Methoden der empirischen Softwaretechnik
1 The paper(s) of Grant and Sackman
to Grant and Sackman, was the choice of the tasks the programmers had to
solve. They thought the Maze and Algebra to be quite different as they afford
different skills. In the experimental data matrix one can observe that there
is no correlation between the programmer’s experience and the results of the
programming performance measurements. Grant and Sackman assume that
with greater experience the programmers also get more specialized, therewith their advantage in solving the two rather easy tasks is very slim. The
offline condition resulted in approximately 30% less CPU time usage, Grant
and Sackman name two reasons for this. On the one hand one may assume
that the online programmers are willing to use a trial-and-error approach
in solving the tasks, therewith reducing their own time and effort in solving
the problem by the cost of more CPU time usage. On the other hand the
simulation of the offline environment had it’s limits, normally the programmer gets the complete dumps of core memory, but in the experiment only
limited dumps of selected areas of core memory could be gathered, therewith
reducing CPU time significantly.
Methoden der empirischen Softwaretechnik
155
Experimente: Allgemein
2
Overview of this report
This report will give a detailed analysis of the paper The 28:1 Grant/Sackman
legend is misleading, or: How large is interpersonal variation really? by
Lutz Prechelt. Therefor the original paper An Exploratory Investigation of
Programmer Performance Under On-Line and Off-line Conditions by Grant
and Sackman was presented in the first section.
Section 3 focuses on the mathematical fundamentals that were, in part,
already mentioned in section 1. All of the statistical methods presented in
[1] will be discussed.
The paper of Lutz Prechelt will be looked at in section 4. We will also
give a more diverse look on the topic of interpersonal variation by drawing
connections to the original Grant/Sackman paper.
The last section points out several statistical tests and summarizes the
main topics.
2.1
Motivation
For more than 30 years the Grant/Sackman theory, derived from their paper
[2] published in 1966/7, was unquestioned. Lutz Prechelt’s paper [1] combined the results of a vast number of experiments to negate the 28:1 theory.
In this report we will give a critical view of Lutz Prechelt’s line of argument.
But more important, it will be shown that the 28:1 theory does not hold true.
3
Interpretation of experimental datasets
In this section a wide, but still detailed, view upon the mathematical fundamentals needed for the interpretation of experimental data or experimental
datasets will be given. Furthermore the difficulties of data interpretation
based on one experiment and also on a whole set of different experiments
will be outlined.
3.1
Interpretation of interpersonal work time differences
When attempting to interpret interpersonal work time differences one has
to keep some general points in mind, which could have affected the results
of the experiments. Five question show the main difficulties that come with
comparing results of different experiments:
• Were time limits enforced in any of the experiments?
156
Methoden der empirischen Softwaretechnik
3 Interpretation of experimental datasets
• Did the subjects interact during the experiment? (e.g. if several subjects worked in one room social pressure could have influenced the work
time differences)
• Did special circumstances in a particular experiment lead to very long
or very short work times, which cannot be taken into consideration
when comparing the whole set of experiments? (Obviously this would
have to be addressed in the interpretation of the data)
• Was work time an importance performance variable in the experiment?
(If not the data could might not be very reliable)
• Is there any information about the resolution and accuracy of the time
measurement? Did the subjects record the work time themselves ?
One can easily imagine that the interpretation of the work time differences
of a set of experiments can turn out to be rather difficult. This leads us right
back to the topic of the paper: Is 28:1 a legend?
One of the major problems with the interpretation of data of a set of
experiments is the inhomogeneity of the data. One way to get a more comparable dataset is comparing maximum/minimum ratios.
Comparing maximum/minimum ratios is a very easy method to reduce
the impact of outliers. This, of course, can be done in different ways, the
most common approaches are worst versus best quarter and worst versus best
half. In the experiment of Grant and Sackman the worst quarter would be
the slowest quarter and the best quarter would be the fastest quarter.
Of course comparing the best and worst quarter, or the best and worst
half in that aspect, the interpersonal work time difference - ratio is reduced.
In the paper of Grant and Sackman the worst quarter to best quarter ratio
for the algebra debug hours is 5.9 to 1 and the worst half to best half ratio
3.8 to 1, bear in mind that the original worst subject to best subject ratio
was 28 to 1. The maze debug hours result in a worst to best quarter ratio of
7.5 to 1 and a worst to best half ratio of 5.125 to 1, while the worst to best
subject ratio was 26 to 1.
By now it should be obvious, that it is relatively easy to willingly or
unwillingly interpret experimental results in such a way that they do not
lead to a correct conclusion.
Methoden der empirischen Softwaretechnik
157
Experimente: Allgemein
4
The paper of Lutz Prechelt
In Lutz Prechelt’s paper we get a different view upon the experiments of
Grant and Sackman. In his paper he shows that the propagated 28 to 1 ratio
is not applicable when considering work time differences.
4.1
28:1 is it a legend?
According to Lutz Prechelt 28:1 is a legend, he gives three reasons ”it is
wrong”, ”comparing the best with the worst is inappropriate” and ”one should
use more data [than just 12 subjects] to make such a claim”. In this aspect
two very important points should be considered, Grant and Sackman’s ratio
of 28 to 1 yields from ”the union of the groups debug Maze online and debug
Maze offline”, which obviously is problematic due to the different approaches
of the two groups to solve the problem. Furthermore three of the 12 subjects
of the experiment programmed in an assembly language, therewith taking
longer time to solve the tasks. The working time of two of those subjects
was the longest of all 12 participants. When we just take these two points
into consideration and look at the remaining 9 participants and at separate
groups, the ratio drops to 9.5 to 1.
This leads us to the question ”how should work time differences or variability be measured?” One option is to compare the medians of the partitions.
First we should have a look at the notation chosen by Lutz Prechelt. SFx
= q100−x/2 /qx/2 with qx being the x% quantile of the distribution. Now we
have to define quantile qx , given a set of n sorted numbers qx is the value of
the number at position round(x ∗ (n + 1)), if n is odd and the value of the
number at position (round(x ∗ (n + 1))+round(x ∗ (n)))/2 if n is even.
When applying the quantile method to the experiment data of the
Grant/Sackman experiment we get the following results (see figure 5).
When we compare these to table 1 of [1], we realize that the numbers do
not compute. One explanation could be that, due to the bad quality of the
original paper [2], different values were taken from figure 3 [2].
In figure 6 different quantiles (10%/90%; 25%/75%; 50%) along with their
range are presented. A good indication for the quality of the measurements is
the distance between the fat dot (50%) and the M, if they are close together
the experimental data can be suspected to be of a higher quality than when
they are far apart, but notice that this is only a indication.
One may notice that in most cases none(lines 1, 2, 5) or only one(lines 3,
4, 6, 7, 8) individual took much longer than the rest. We can conclude that
the high values of SF0 result from these individuals. By now it should be
obvious that comparing the worst with the best individual is not sufficient
158
Methoden der empirischen Softwaretechnik
4 The paper of Lutz Prechelt
Value
Coding Algebra
Coding Maze
Debugging Algebra
Debugging Maze
From [2]
15.8
25
28,33
26
SF0 of all values
15.8
25
28,33
26
SF25 of all values
8
11.5
6.5
10.25
SF50 of all values
4.73
6
2.5
4.1
SF0 offline
12.57
12.5
8.5
5.77
SF25 offline
7.79
8.11
4.67
4.04
SF50 offline
5
4.6
1.34
2.92
SF0 online
10.09
12.5
14.16
12.5
SF25 online
5.34
8
7.47
5.33
SF50 online
3.16
8
4.38
1.75
Figure 5: Measures of variability
Methoden der empirischen Softwaretechnik
159
Experimente: Allgemein
Figure 6: Work times of the individual subjects in the groups of the
Grant/Sackman experiment in minutes. The box plot indicates the
quantiles at 10%/90% (whiskers), 25%/75% (box) and 50% (fat dot), the
mean (M) and the standard error of the mean (dashed line) [1]
160
Methoden der empirischen Softwaretechnik
4 The paper of Lutz Prechelt
to get a clear picture and therewith we may already put the 28:1 ratio into
doubt.
4.2
Size of interpersonal work time difference
For further analysis, Lutz Prechelt compared the data of 61 different experiments. Those experiments were partly taken from reports, as well as directly
conducted by the research group of Lutz Prechelt. When comparing the data
we have to keep in mind that the experiments were conducted by different
researchers therewith the data might be influenced by things like: social pressure, time limits, work time might not have been the main point of interest,
resolution of the time measurement might be unknown, though in most cases
it was either one or five minutes.
Now the method introduced in the previous subsection is used to evaluate
the data. Though the tables taken from [1] include also other aspects, we
will focus our attention on the debug and program/coding data.
Figure 7: Only groups of 5 or more subjects were taken into account. The
groups are distributed among the tasks as follows: understand(28 groups),
test/debug(10 groups), review(22 groups, most being rather small),
program(23 groups), maintain(54 groups)[1]
Even in a worst-case-scenario we would have 50 individuals in the
”test/debug”-section and 115 individuals in the ”program”-section, therewith
the base of individuals of the analysis is four to 10 times as large as in the
Grant and Sackman experiment. From the figure 7 we can actually take
Methoden der empirischen Softwaretechnik
161
Experimente: Allgemein
concrete numbers, the mean of the ”test/debug”-section is around 11 to 12,
therewith we got approximately 110 to 120 individuals in this section, the
program section is even bigger with approximately 200 individuals. This
puts us to a 10:1 ratio for the ”test/debug”-section and a 17:1 ratio for the
”program”-section compared to the Grant/Sackman experiment.
Figure 8 shows that besides the Grant/Sackman experiment also other
experiments yield results with a ratio similar to the famous 28 to 1. But
in general the ratios are much smaller, even with this most times unsuitable
evaluation method. We can see that the SF5 0 of the SF0 evaluations gives
a range of approx. 3 to 12 for test/debug and a range of approx. 4 to 20 for
program/coding.
Figure 8: Each point represents SF0 (slowest/fastest individual quotient)
of a group. The scale is logarithmic. [1]
When we take the SF2 5 of the groups into account we notice that the
margin of the results is rather narrow, especially when leaving aside the most
extreme outliers. The range of the test/debug experiments, when evaluating
the results with the SF5 0-method, are within the range of 2 to 4.5 and the
program/coding experiments are within a range of 2.25 to 6.5.
Of course the differences are reduced even more when we compare the
SF5 0 of the different groups, this can be seen in figure 10 [1]. We can see
that the difference between the slowest and the fastest half of each group of
the ”test/debug”-case is around 2, while the difference for the ”program”-case
is in a range of 2 to 5.
162
Methoden der empirischen Softwaretechnik
4 The paper of Lutz Prechelt
Figure 9: Each point represents SF2 5(slowest/fastest quarter quotient) of
a group. Only groups with 9 or more individuals were taken into account.
One point of test/debug is at 11.4 and two points of program/coding are at
10.9 and 12.[1]
Figure 10: The points represent the SF5 0(the quotients of the medians of
the slower and the faster half) of the different groups. [1]
Methoden der empirischen Softwaretechnik
163
Experimente: Allgemein
Now after evaluating more than 600 subjects from more than 100 experimental groups Lutz Prechelt presents us the results shown above. At
this point we should take another look at the data from the Grant/Sackman
experiment and especially at figure 2. One might be surprised that the differences are extremely small considering that we have the data of 12 subjects
on the one hand and the data of approx. 200(110-120 in the ”test/debug”groups) on the other, when considering the individuals of the ”program”groups. While we got a range of roughly 1.2 to 3.7 for the SF5 0 of the
”test/debug”-groups in the Prechelt experiment we got a SF5 0 of the Grant
and Sackman experiment that ranges from 2.5 to 4.1 and the same ranges
for the ”program/coding”-groups are approx. 1.7 to 7.3 for the Prechelt experiment and 4.73 to 6 for the Grant and Sackman experiment. Even if we
consider the SF5 0 of the Prechelt data the ranges don’t change significantly,
1.7 to 2.6 in the ”test/debug”-groups and 1.8 to 5 in the ”program/coding”groups.
We may conclude that the 28 to 1 ratio is misleading and not useful when
considering work time distributions, still the Grant and Sackman experiment
does yield similar results when applying the same statistical operations. The
work time difference for debugging can be assumed around 1.7 to 3 while the
work time difference for programming can be assumed to be around 1.8 to 5.
4.3
Shape of work time distribution
When talking about interpersonal variation we also have to consider distributions and especially how we can characterize the interpersonal variation
sufficiently by distribution functions.
First we should take a look at the standard deviation function. When
given a set x1 , ..., xn of values. We define the arithmetic mean(M ) of this
set as:P
x̄ = n1 ni=1 xi , and we define the standard deviation as
q P
σ = n1 ni=1 (xi − x̄)2
In figure 11 we see the comparison of the actual value of SF2 5 with the
normal distribution of SF2 5. It is obvious that the actual values are nearly
always below the normal distribution values. One may conclude that the
normal distribution function does not characterize the interpersonal work
time variation sufficiently.
When examining actual distributions of large enough groups, one will
notice that using a density estimator function, Prechelt uses Gaussian kernels, can provide useful results. The Gaussian kernel used is 2(max(X) −
min(X))/log2 (|X|) for a work time value X, while max(X) and min(X) are
164
Methoden der empirischen Softwaretechnik
4 The paper of Lutz Prechelt
Figure 11: Comparison of the actual and a theoretical value of SF2 5.
Note that the axis are logarithmic. [1]
the boundaries set by the standard deviation. Despite the seemingly good
results one may not draw any conclusions from the modified data , because
- according to Prechelt - ”samples of the given size sometimes look quite
weird”, this is even the case with some ”normal distribution”-samples.
Still one may conclude that positive skewness is a typical work time data
phenomena. This is quite logical as an individual might take endlessly long
to perform a task but not endlessly short.
To get a rather accurate estimate of the actual shape of work time distribution, Prechelt uses another approach by leveling the different sets of data.
This is done by dividing the values of the data sets by the average value of
the experiment group, resulting in a mean of one for each group.(see figure
12)
Besides the skewness, which, according to Prechelt, tends to range from
1 to 2, one might also notice that the work time variability of ”test/debug”
and ”programming”, though larger than those of the other shown tasks, are
still relatively small, with a means SF5 0 of 2.4 for ”test/debug” and ”programming”.
Methoden der empirischen Softwaretechnik
165
Experimente: Allgemein
Figure 12: Virtual groups created by leveling the mean of each group to 1.
[1]
4.4
Effect sizes
After this rather theoretical approach we should turn our attention to the
practical use of work time data analysis. Besides the rather obvious goal
of contradicting or proving the 28 to 1 ratio, we also would like to find out
something about ”How to compare two sets of data”, so that we can decide
whether one approach of solving a task is better than another, when taking
things like costs into consideration.
First we define effect size, Prechelt presents us two different definitions
E1 and E2 . Given two sets of data A and B and assuming hat on average A
is faster than B, we can use the following formulas:
mean(A)
−1
E1 = mean(B)
E2 =
mean(B)−mean(A)
σ(mean(A∪B))
Now we should have a look at the effect size of the different tasks (see
figure 13). Notice that the effect sizes exceed 0.5 and a high degree even
exceeds 1.0 for both test/debug and program/coding.
Obviously the question is ”How come the effect sizes are so large?”, this
can be explained by the high impact small groups have on this analysis, if we
subtract the standard error of the effect size we get a SF5 0 in the boundaries
of 0 to 0.5 which is much closer to the prediction made by Prechelt.
166
Methoden der empirischen Softwaretechnik
5 Summary
Figure 13: Effect size of the work time of different tasks. [1]
5
Summary
We gave a detailed look into the paper of Grant and Sackman [2] as well as
a look upon the paper of Lutz Prechelt [1] along with his criticism of the
Grant and Sackman paper [2]. Along the way different statistical methods
were presented and explained.
5.1
Conclusion
Surely the 28 to 1 ratio does not hold stand against a critical analysis. And I
would also agree that the 2 to 1 ratio presented by Prechelt is a much better
ratio to use for individual work time differences.
But when discussing [2] one still must take into account two most important points, never in the whole paper do Grant and Sackman argue that the
28 to 1 ratio is a legit ratio to use for the analysis of work time differences
and they also explicitly point out that their data and also their conclusions
should be used with care and need further reviewing. By using the appropriate methods we could show that similar numbers could be taken from the
12-individuals-experiment of [2], as were concluded by Prechelt from the 600individuals-data-set of [1], namely a ratio of roughly 2 to 1 for the individual
work time difference for the task test/debug.
One should also bear in mind, that 2 to 1 still is a ratio conducted by
Methoden der empirischen Softwaretechnik
167
Experimente: Allgemein
relatively simple statistical methods, more complex methods might lead to
a different ratio. A perfect method surely doesn’t exist; one can find good
reasons for the use of quantiles, still one might find as good reasons to use a
different method.
6
Literatur
1. Lutz Prechelt - The 28:1 Grant/Sackman legend is misleading, or: How
large is interpersonal variation really ?
2. Grant and Sackman - An Exploratory Investigation of Programmer
Performance Under On-Line and Off-Line Conditions
3. Grant and Sackman - Exploratory Experimental Studies Comparing
Online and Offline Programming Performance
4. Harold Sackman and J.B. Munson - Investigation of Computer Operating Time and System Capacity for Man-Machine Digital Systems
5. Harold Sackman - Managing the Economics of Computer Programming
6. Lutz Prechelt - An empirical study of working speed differences between
software engineers for various kinds of task
168
Methoden der empirischen Softwaretechnik
Die Annahme der statistischen
Unabhängigkeit bei
Multiversionsprogrammierung
Christian Mattar
Keywords: N-version Programming, Dependability, Reliability
Abstract
In diesem Paper wird zunächst eine Übersicht über Multiversionsprogrammierung und den zugehörigen Prozessen dargestellt.
Die einzelnen Untereinheiten “N-Version Programming Process”, “NVersion Software” und “N-Version Executive” , aus denen die Multiverionsprogrammierung aufgebaut ist, werden betrachtet. Weiterhin
wird ein Experiment von Knight & Leveson dargestellt, in dem die hintergründigen statistischen Annahmen in Frage gestellt wurden. Dabei
wurden 27 Programme nach derselben Spezifikation erstellt, und jeweils einer Millionen Testfälle ausgesetzt. Ausfälle der Programme wurden dann auf Korrelation geprüft und eine Wahrscheinlichkeitsanalyse
durchgeführt. Auf einige Fehler wurde dabei genauer eingegangen.
Das Experiment verursachte teils sehr negative Kritiken, die Autoren
widerlegten diese jedoch in einer weiteren Veröffentlichung. Als Endergebnis wurde festgehalten, dass Multiversionsprogrammierung die
Verlässlichkeit nicht so stark verbessert, wie vorher angenommen.
Experimente: Allgemein
1
Einleitung
Die Verlässlichkeit von Software wird in der zunehmenden Automatisierung
ein immer wichtigerer Faktor.
Seit vielen Jahren schon besteht der
Trend, Systeme, die früher komplett manuell gesteuert wurden, nun zur
Verbesserung der Effizienz zumindest teilweise durch Computer steuern zu
lassen. Gleichzeitig jedoch nimmt die Komplexität dieser System zu, so
dass es nahezu unmöglich ist, Fehlerfreiheit zu garantieren. Formale Beweistechniken existieren zwar, sind aber ein dermaßen aufwändiger Prozess,
das diese nur für kleine Projekte praktikabel sind. Um dieses Problem dennoch in den Griff zu bekommen, hat man sich schon in den 70er Jahren
mit dem Ansatz von “Multiversionsprogrammierung” oder auch “N-version
programming” beschäftigt. Ähnlich wie auch bei Hardware, bei der Teile
mehrfach redundant ausgelegt werden können, um ein Versagen des Systems bei Fehlverhalten nur eines Teils zu verhindern, soll auch die Software
mehrfach implementiert sein, damit im Fehlerfall einer einzelnen Variante
dennoch ein fehlerfreier Output einer der übrigen Varianten erfolgt.
Jedoch unterscheiden sich derartige Softwarefehler von der Art her stark von
Hardwarefehlern: Da sogar komplexere Hardwaresysteme noch formal verifizierbar sind, treten dort Fehler i.d.R. nur durch Verschleiss oder fehlerhafte
Wartung auf. Es können also identische Systeme mehrfach eingesetzt werden, da es unwahrscheinlich ist, dass alle gleichzeitig ausfallen. Bei Software
hingegen treten Fehler durch mehrdeutige Spezifizierung oder fehlerhafte Implementierung auf – beides Probleme, die sich durch mehrfaches Einsetzen
identischer Software nicht lösen lassen.
Ein Beispiel für eine derartige sinnlose Redundanz ist der misslungene
Start der Ariane-5 Rakete im Juli 1996: Ein Teil der Flug-Kontrollen der
Rakete war vom Vorgänger Ariane-4 übernommen worden. Einige der FlugParameter waren in der neuen Variante jedoch größer als in der alten, so
dass ein Überlauf zu Stande kam. Dieser Fehler wurde ordnungsgemäß vom
Computer entdeckt, was dessen Abschalten zur Folge hatte. Ein redundanter Computer existierte zwar, aber sowohl Hardware als auch Software waren
komplett identisch, so dass dieser auf denselben Fehler traf und sich ebenfalls
abschaltete. Die Flug-Kontrolle konnte somit nicht aufrechterhalten werden
und die Rakete brach bei 4000 Meter Höhe auseinander, was die Selbstzerstörung einleitete.
Software-Redundanz macht also nur Sinn, wenn in den tatsächlichen Defektquellen von Software – den Implementierungen und den dahinführenden
Denkansätzen – Redundanz vorliegt. Für n-fache Redundanz werden also
wahrscheinlich n verschiedene Entwicklungs-Teams benötigt, die unabhängig
voneinander arbeiten. Doch selbst dann ist fragwürdig, ob die erheblichen
170
Methoden der empirischen Softwaretechnik
2 Methodik der Multiversionsprogrammierung
Mehrkosten, die durch ein solches Verfahren entstehen, gerechtfertigt sind.
Schließlich ist davon auszugehen, dass die meisten Fehler gerade in den algorithmisch schwierigsten Teilen des Programms auftreten, und sich deshalb
trotz Implementationsunterschiede gerade an bestimmten Stellen häufen.
Neben einer eingehenderen Beschreibung der Multiversions-Programmierung
soll deswegen auch ein Versuch dargestellt werden, in dem empirisch der
Nutzen dieses Ansatzes getestet wurde. Es soll bereits an dieser Stelle vorweggenommen werden, dass die Effektivität dieser Entwicklungsart durchaus
umstritten ist.
2
Methodik der Multiversionsprogrammierung
Konkret beschreibt Multiversionsprogrammierung einen Prozess, bei dem
aus einer einzigen Spezifikation von mehreren unabhängigen Entwicklerteams
jeweils eine eigene Implentierung produziert wird. Dabei ist insbesondere darauf zu achten, dass die Unabhängigkeit auch tatsächlich gegeben ist: Professioneller Kontakt zwischen den Teams sollte auf jeden Fall vermieden werden.
Für die Spezifikation sollte am besten eine formelle Spezifikationssprache benutzt werden. Dies hat den Vorteil, dass einerseits Mehrdeutigkeiten und
Ungenauigkeiten vermieden werden, andererseits aber keinerlei Implementationsdetails vorgegeben werden, da das Verwenden möglichst verschiedener
Programmiersprachen, Compiler und Algorithmen für jede einzelne Version
des Programms erwünscht ist. Sollte eine umgangssprachliche Beschreibung
erfolgen, sollte bei der Erstellung dementsprechend gründlich auf die gleichen Gesichtspunkte geachtet werden. Im fertigen System sollen dann alle
produzierten Versionen gleichzeitig laufen, und erkannt werden, welches bei
abweichenden Ergebnissen das korrekte ist.
Um überhaupt ein Multiversionssystem zu unterstützen, muss jedes Programm die Fähigkeit besitzen, zusammen mit anderen Programmen gleichzeitig ausgeführt zu werden und einen Vektor mit Vergleichs-Daten zu
erzeugen (comparison vector, c-Vektor), der an spezifischen Stellen im Programmablauf ausgegeben wird (cross-check points, cc-Points).
Das Verfahren an sich wurde insbesondere von Prof. Algirdas Avizienis der
UCLA untersucht, und im Laufe der Forschungen wurden im hier betrachteten Modell drei grobe Untereinheiten identifiziert (siehe auch Fig. 1):
• Dem Prozess, in dessen Lauf die anfängliche Spezifikation entwickelt
sowie die Unabhängigkeit der Entwicklerteams garantiert sein soll (Nversion Programming Process, NVP)
Methoden der empirischen Softwaretechnik
171
Experimente: Allgemein
NVP
Execution Environment (EE)
NVS 1
Hilfsfunktionen
NVS 2
...
EntscheidungsAlgorithmus
NVS N
Figure 1: Ablauf eines Schrittes in der NVX
• Dem Produkt, also den einzelnen Implementationen mit den benötigten
Fähigkeiten zur Ausgabe des c-Vektors an den cc-Points (N-version
Software, NVS)
• Die Umgebung, in der die Implementationen ablaufen sollen, und die
die Einrichtungen zum Vergleichen und Auswerten der c-Vektoren und
darauf basierend Entscheidungs-Algorithmen zur Verfügung stellt (NVersion Executive, NVX).
2.1
NVP
Der N-Version Process soll es ermöglichen, N ≥ 2 funktional identische
Programme basierend auf derselben Spezifikation unabhängig zu erzeugen.
Dabei sollen so weit wie möglich verschiedene Programmiersprachen, Umgebungen, Werkzeuge und Algorithmen verwendet werden. Es wird angenommen, dass dadurch in mehr als einem Programm gleichzeitig auftretende
Fehler vermieden werden. Selbst wenn mehrere der Programme fehlerhaft
arbeiten, soll so verhindert werden, dass alle diese Programme dieselbe Ausgabe liefern. Dies würde dem Entscheidungsalgorithmus die Arbeit erschweren.
172
Methoden der empirischen Softwaretechnik
2 Methodik der Multiversionsprogrammierung
Weiterhin müssen die einzelnen Programmierteams voneinander isoliert arbeiten. Es existiert ein “Communications & Documentations Protocol”,
das genau den Informationsfluss der einzelnen Teams steuert und beim
Auftreten von gemeinsamen Fehlern ermöglicht, die Ursache im Falle eines
Kommunikations-Lecks nachzuvollziehen. Innerhalb der Teams sollten natürlich weiterhin bewährte Software-Entwicklungsprozesse eingesetzt werden,
um maximale Qualität zu erzielen. Um den gesamten Prozess durchsetzen zu
können, ist ein Koordinations-Team nötig, welches die Spezifikationen bereitstellt, die Protokolle definiert, den Entwicklungsprozess erklärt und auf
eventuelle Anfragen oder Unklarheiten reagiert. Auch diese Abläufe müssen
formal dokumentiert werden, um bei Auftreten von Fehlern Transparenz zu
ermöglichen.
2.2
NVS
Die Spezifikation der herzustellenden Software ist die Ausgangssituation
der Erzeugung von N-Version Software. Sie muss vollständig und eindeutig sein, und dennoch eine möglichst breite Menge von verschiedenen
Implementationen zulassen. Fehler darin werden sich auf alle der produzierten Versionen auswirken, und somit dem gesuchten Ziel genau entgegenwirken. Zur Sicherheit ist es möglich, mehrere verschiedene Spezifikationen eines einzigen Benutzer-Anforderungs-Dokumentes in formellen
Spezifikations-Sprachen anzufertigen, und diese automatisch auf Äquivalenzt
prüfen zu lassen. Treten Unterschiede auf, sind an denjenigen Stellen vermutlich Unklarheiten aufgetreten.
Es kann explizit festgelegt werden, inwiefern sich die Entwicklungs der einzelnen Varianten unterscheiden müssen. Beispiele wären Erfahrung und Ortslage der Entwickler, Programmiersprachen und -methoden, Entwicklungsumgebungen, Testverfahren oder auch bestimmte Algorithmen und Datenstrukturen. Weiterhin muss für den Ablauf innerhalb einer NVX geregelt
werden, welche Funktionen implementiert werden, und was für Eingaben sie
erlauben. Insbesondere muss natürlich definiert sein, an welchen Stellen des
Programmablaufs cross-check points zu absolvieren sind.
2.3
NVX
Die N-Version Executive soll es ermöglichen, die einzelnen Implementationen zu einer Multiversions-Spezifikation auszuführen, die dabei entstehenden Ergebnisse zu vergleichen, und schließlich über einen Algorithmus eine
Entscheidung über die Wahl des korrekten Ergebnisses zu treffen. Die
NVX ist allgemein gehalten, soll also für unterschiedliche Spezifikationen
Methoden der empirischen Softwaretechnik
173
Experimente: Allgemein
nutzbar sein. Sie sollte simpel, schnell und verlässlich sein. Eine SoftwareImplementation ist möglich, eine Hardware-Variante ist aber zur Sicherheit
vorzuziehen.
Für den Fall N = 2, falls also im Falle eines Fehlers absolut nicht feststellbar ist, welche Version richtig arbeitet, kann zumindest ein sicheres Herunterfahren des Systems oder ein Revertieren auf einen bekannten korrekten
Status eingeleitet werden.
2.4
Recovery Block Approach
Ein etwas anderes Verfahren, dass ebenfalls die Verlässlichkeit erhöhen soll,
ist der Recovery Block Approach. Auch dafür werden mehrere Versionen
eines Programms konstruiert. Anstatt jedoch alle Varianten gleichzeitig
laufen zu lassen, um dann über das korrekte Ergebnis abzustimmen, wird
während der Laufzeit eine Art Abnahme-Test durchgeführt: Die erste Variante wird durchlaufen und das Ergebnis auf Konsistenz überprüft. Werden
keine Fehler festgestellt, werden die Ausgabe-Daten für die nächsten Schritte
im System verwendet. Tritt im Abnahme-Test jedoch ein Fehler auf, so
wird mittels eines Caches das System auf den Punkt vor Aufruf der Variante
zurückgesetzt, und eine weitere Variante gestartet. Dieser Ablauf kann theoretisch mehrmals stattfinden.
Auf weitere Details dieser Methode soll hier nicht weiter eingegangen werden.
Es ist jedoch offensichtlich, dass von ähnlichen statistischen Annahmen wie
bei Multiversions-Programmierung ausgegangen wird, und somit die Ergebnisse, die im Folgenden vorgestellt werden, auch für den Recovery Block
Approach relevant sind.
3
Experiment
Um die der Multiversionsprogrammierung zu Grunde liegenden Annahmen
zu untersuchen, wurde ein Experiment durchgeührt, welches Implementationen einer einzigen Spezifikation verschiedener Entwickler gegeneinander
testet. So wurde versucht festzustellen, ob eine in Kapitel 2 beschriebene
Methodik auch zu tatsächlicher Unabhängigkeit der Fehlerquellen führt.
Fortgeschrittenen Studenten der University of Virginia (UVA) und der University of California at Irvine (UCI) wurde aufgetragen, basierend auf derselben Spezifikation ein Programm zu schreiben. Um so realitätsnahe wie
möglich zu arbeiten, wurde als Test-Produkt ein Raketen-Abwehr-Programm
gewählt – ein derartiges Programm wurde tatsächlich einmal von einer Luftfahrtgesellschaft entwickelt und ist auf Grund seiner sicherheits-kritischen
174
Methoden der empirischen Softwaretechnik
3 Experiment
Eigenschaft ein sinnvoller Kandidat für fehlertolerante Programmierung.
Dieselbe Problemstellung wurde bereits in anderen Experimenten als Ausgangsbasis für Untersuchungen benutzt, unter anderem bei der NASA. Dies
hatte den Vorteil, dass viele wärend des Experimentes auftauchenden Probleme, wie zum Beispiel in der Spezifikation, schon dort untersucht und behoben wurden. Ausserdem existierte bereits eine ausgiebigst getestete und
untersuchte Implementation des Programmes, die als fehlerfrei angenommen
wurde, und somit zum Feststellen von Fehlern in anderen Implementationen
genutzt werden konnte.
3.1
Voraussetzung
Als Eingabe erhält das Programm Daten aus einer Radar-Anlage. Während
des Programmablaufs werden dann ein “Conditions Met Vector” aus 15
boolschen Elementen(CMV), eine “Preliminary Unlocking Matrix” aus 15x15
boolschen Elementen(PUM), ein “Final Unlocking Vector” aus 15 boolschen
Elementen(FUV), und schließlich ein boolsches Endergebnis, ob ein Abfangprotokoll eingeleitet werden soll oder nicht, generiert.
Für das Funktionieren des Programmes ist dabei nur das Endergebnis von Bedeutung; für die in diesem Experiment betrachteten Zusammenhänge aber
sind auch die Zwischenergebnisse wichtig, um daran eventuelle Fehler des
Programms erkennen zu können, die sich auf Grund anderer Eingaben jedoch nicht auf die simulierten Fälle auswirken. Die Berechnungen laufen
folgendermaßen ab:
Die Eingabe-Daten bestehen aus bis zu 100 verschiedenen 2-dimensionalen
Punkten, die auf 15 “Launch Interceptor Conditions” (LICs) geprüft werden müssen. Dort soll zum Beispiel geprüft werden, ob sich eine Menge an
Radar-Reflektionen alle innerhalb eines Kreises eines bestimmten, als Parameter übergebenen Radius befinden. Ist eine der Bedingungen erfüllt, so
wird das ihr zugehörige Element des CMV auf “Wahr” gesetzt, ansonsten auf
“Falsch”. Basierend auf dem CMV wird mit Hilfe der “Logical Connector
Matrix” (LCM) dann die PUM berechnet. Die LCM enthält Boolsche Funktionen, die Paare der LICs durch ein AND oder OR verknüpfen kann. Dabei
werden nicht alle möglichen Paarkombinationen verwendet. Schließlich wird
dann jede Zeile der PUM untersucht: Sind alle Elemente der Zeile entweder
“Wahr” oder nicht ausgefüllt, so wird das zugehörige Element des FUV auf
“Wahr” gesetzt. Schließlich wird das Endergebnis genau dann auf “Wahr”
gesetzt, wenn alle Elemente des FUV “Wahr” sind.
Die Studenten wurden auf die Programmiersprache Pascal festgelegt, die beiden Universitäten benutzten jedoch unterschiedliche Compiler und Rechnersysteme. Ansonsten wurden die Teilnehmer vom Sinn der Aufgabe inMethoden der empirischen Softwaretechnik
175
Experimente: Allgemein
formiert und dementsprechend gebeten, bezüglich des Experimentes keinen
Kontakt untereinander zu haben. Es wurde ihnen jedoch freigestellt, jede
beliebige unabhängige Wissensquelle zu nutzen, auch wenn dabei zweifellos
Überschneidungen auftreten würden – dies schien realistisch im Vergleich
zu kommerziellen Projekten. Im Falle von Fragen wurde E-Mail benutzt,
um eine gut dokumentierte und bewusste Informationsübermittlung zu ermöglichen. Probleme in der Spezifikation wurden dabei an alle Programmierer weitergeleitet.
Da bei einigen der Berechnungen auch Fließkommazahlen benutzt wurden,
musste aus praktischen Gründen der Computer-Arithmetik bei allen Vergleichen eine eingeschränkte Präzision benutzt werden. Dies sollte verhindern,
dass in Randfällen die Programme unterschiedliche Ergebnisse lieferten, obwohl an sich korrekt gearbeitet wurde. Zu diesem Zweck wurde eine Funktion
zur Verfügung gestellt. Den Entwicklerteams wurden 15 Datensätze zu eigenen Testzwecken zu Verfügung gestellt, und bei der Fertigstellung des Programms ein Abnahme-Test bestehend aus 200 für jedes Team einzeln zufällig
generierten Datensätzen durchgeführt.
Die Programme wurden dann jeweils den gleichen einer Millionen Testfällen ausgesetzt. Diese waren zwar zufällig generiert, beschrieben aber eher
ungewöhnlichere Fälle, die im echten Betrieb nicht in kurzer Zeit in so großen
Mengen auftreten. Dementsprechend sollten sich auch viele Randfälle darin
befinden. Die Anzahl Testfälle sollte in etwa einer 20-jährigen Nutzungsdauer
entsprechen.
Die von den einzelnen Versionen produzierten Ausgaben wurden dann mit
denen des von der NASA implementierten Programmes verglichen, um die
tatsächliche Anzahl fehlerhafter Ausgaben festzustellen.
3.2
Ergebnisse
Die Ausfallrate ist in Tabelle 1 dargestellt. Neben sechs Implementationen,
die fehlerfrei arbeiteten, arbeiteten weitere 17 Implementationen in 99,9 %
der Testfälle korrekt. Aus Tabelle 2 ist ersichtlich, wie häufig es vorkam,
dass mehr als eine Version bei der gleichen Eingabe eine fehlerhafte Ausgabe
geliefert hat.
Man könnte vermuten, dass die Gruppen der jeweils gleichen Universität stärkere Fehlerkorrelation besitzen, als die aus unterschiedlichen
Universitäten. Studenten der gleichen Universität haben einen ähnlicheren
Wissenshintergrund und neigen somit möglicherweise zu ähnlichen Entwicklungsmethoden, und auch ähnlichen Fehlern. Erstaunlicherweise war dies
nicht der Fall. Tabelle 3 zeigt die Korrelation von Ausfällen bezüglich der
Versionen der verschiedenen Universitäten.
176
Methoden der empirischen Softwaretechnik
3 Experiment
Version Anzahl Ausfälle P[Erfolg]
1
2 0,999998
2
0 1,000000
3
2297 0,997703
4
0 1,000000
0 1,000000
5
6
1149 0,998851
71 0,999929
7
8
323 0,999677
53 0,999947
9
10
0 1,000000
554 0,999446
11
12
427 0,999573
13
4 0,999996
1368 0,998632
14
Version Anzahl Ausfälle P[Erfolg]
15
0 1,000000
16
62 0,999938
17
269 0,999731
18
115 0,999885
19
264 0,999736
20
936 0,999064
21
92 0,999908
22
9656 0,990344
23
80 0,999920
24
260 0,999740
25
97 0,999903
26
883 0,999117
27
0 1,000000
Table 1: Ausfälle pro Version
Basierend auf diesen Daten und der Annahme, dass Fehler in den einzelnen
Implementationen komplett unabhängig voneinander auftreten, wurde dann
eine Wahrscheinlichkeitsberechnung angestellt.
Sei pi die Wahrscheinlichkeit, dass Programm i bei der Ausführung einer der
1.000.000 Tests versagt. Die Wahrscheinlichkeit, dass von 27 Varianten alle
bei einem bestimmten Input fehlerfrei arbeiten errechnet sich dann durch
P0 = (1 − p1 ) · (1 − p1 ) · · · (1 − p27 )
Weiterhin berechnet sich die Wahrscheinlichkeit, dass von 27 Varianten genau
eine versagt durch
P1 =
P0 p1
1−p1
+
P0 p2
1−p2
+ ... +
P0 p27
1−p27
Damit ist die Wahrschlichkeit, dass mehr als eine Variante versagt, genau
Pmore = 1 − P0 − P1
Über eine Binomialverteilung lässt sich daraus die Wahrscheinlichkeit berechnen, dass bei n-vielen Testfällen K davon von mindestens 2 Implementationen
fehlerhaft berechnet werden:
P (K = x) = nx (Pmore )x (1 − Pmore )n−x
Da dies eine sehr aufwändige Berechnung ist und n genügend groß ist, kann
approximativ eine Normalverteilung benutzt werden.
Methoden der empirischen Softwaretechnik
177
Experimente: Allgemein
Anzahl Implementationen mit
Ausfall bei gleichem Input
Häufigkeit Wahrscheinlichkeit
2
553
0,00055100
3
343
0,00034300
4
242
0,00024200
73
0,0007300
5
6
32
0,0003200
12
0,0001200
7
8
2
0,0000200
Table 2: Gleichzeitige Ausfälle verschiedener Implementationen
ζ=
K−n·Pmore
(n·Pmore (1−Pmore ))1/2
Vergleichen wir nun also die experimentell gewonnenen Daten mit der Theorie. Im Experiment wurden 27 Versionen mit einer Million Fälle getestet und
in 1255 Fällen haben mehr als ein Programm gleichzeitig ein falsches Ergebnis
ausgegeben. Wenn wir von Unabhängigkeit im statistischen Sinne ausgehen,
kann obige Formel benutzt werden, um die Wahrscheinlichkeit für das Eintreten dieses Ereignisses zu berechnen. Für n = 1000000, K = 1255 ergibt die
obige Gleichung also ζ = 100 51. Schon bei 2 33 deckt die Normalverteilung
jedoch 99% ab, dass heisst ab diesem Punkt bleiben nur noch Ereignisse mit
Wahrscheinlichkeiten < 1%. Damit ist das Eintreten des Ergebnisses des Experiments dermaßen unwahrscheinlich, dass die Unabhängigkeits-Hypothese
zumindest in diesem Fall mit weit über 99,9% Wahrscheinlichkeit verworfen
werden kann.
3.3
Analyse der Fehlerquellen
Bei der Untersuchung der gewonnen Daten muss sorgfältig zwischen “Programmfehler” und “Programmausfall” unterschieden werden. Programmfehler sind spezifische Stellen im Code, an denen eine zum Erlangen des
Ergebnisses inkorrekte Operation durchgeführt wird. Programmausfall bedeutet, dass das Programm entweder nicht korrekt beendet wird oder nach
der Beendigung ein falsches Ergebnis ausgegeben wird. Ein einzelner Programmfehler kann also durchaus zu mehreren verschiedenen Programmausfällen führen. Insgesamt wurden in allen Programmen zusammen 45 Fehler
festgestellt (siehe Tabelle 4). Jeder einzelne der Fehler wurde untersucht,
behoben, und es wurde gemessen, wieviele Ausfälle er verursachte. Dies ist
in Tabelle 5 dargestellt, wobei die Zahl vor dem Punkt die Nummer des
Programms, die Zahl hinter dem Punkt die Nummer des Fehlers angibt. In
178
Methoden der empirischen Softwaretechnik
3 Experiment
10
11
12
13
14
15
16
17
UCI
18
versions 19
20
21
22
23
24
25
26
27
1
0
0
0
0
0
0
0
2
0
0
0
0
0
0
0
0
0
0
2
3
0
0
0 58
0
1
0
0
0 28
0
0
0
0
0 95
0
2
0
1
0 325
0
0
0 52
0 72
0
0
0 94
0 115
0
0
UVA versions
4 5 6 7
8 9
0 0 0 0
0 0
0 0 2 1 58 0
0 0 0 71
1 0
0 0 0 0
0 0
0 0 3 71 26 0
0 0 0 0
0 0
0 0 1 0
0 0
0 0 0 1 29 0
0 0 1 0
0 0
0 0 0 0
1 0
0 0 3 2 323 0
0 0 0 0
0 0
0 0 15 0 36 2
0 0 0 0 71 0
0 0 0 0
0 0
0 0 0 1 94 0
0 0 5 0 110 0
0 0 0 0
0 0
Table 3: Fehlerkorrelationen zwischen Entwicklern von UVA und UCI
einigen Fällen waren auf Grund von unterschiedlichen Compilern, Maschinen
und Speicherzuständen ursprüngliche Ausfälle nun nicht mehr aufgetreten,
konnten aber durch zusätzliche Analyse spezifischen Fehlern zugeordnet werden. In anderen Fällen war das nicht möglich, diese wurden für die weitere
Untersuchung ignoriert.
Viele Fehler waren nur auf eine einzige Version beschränkt, einige andere
traten jedoch in mehreren Versionen auf. Um die tatsächliche Korrelation zu
messen, wurde bei jedem Fehlerpaar aus verschiedenen Programmen mittels
eines statistischen χ2 -Tests die Null-Hypothese überprüft, dass die Fehler
unabhängige Ausfälle verursachen. Im Allgemeinen verwirft man Hypothesen ab einer Fehlerwahrscheinlichkeit von 99,5%. Dies geschah bei 93 aller
945 getesteten Korrelationshypothesen. Bei weiteren 67 Paaren trat zwar
Korrelation auf, doch nicht genügend, um die entsprechenden Hypothesen
zu verwerfen. Bei einer angenommen Wahrscheinlichkeit von 0,5%, dass die
Hypothese grundlos verworfen wird, würden immer noch 93 der Paare korrelieren. Im Folgenden wird dementsprechend von korrelierenden und von
nicht-korrelierenden Ausfällen gesprochen. Einige der verursachenden Fehler
Methoden der empirischen Softwaretechnik
179
Experimente: Allgemein
Version Fehler
1
1
2
0
3
4
4
0
0
5
6
3
1
7
8
2
2
9
Version Fehler
10
0
11
1
12
2
13
1
14
2
15
0
16
2
17
2
18
1
Version Fehler
19
1
20
2
21
2
22
3
23
2
24
1
25
3
26
7
27
0
Table 4: Fehler pro Version
sollen hier etwas genauer erläutert werden.
Ein typischer nicht-korrelierender Ausfall enstand durch das Auslassen eines
Rückgabewertes bei ganz bestimmten Pfaden durch eine Funktion. Obwohl
dies durchaus zur Compile-Zeit feststellbar ist, wurde von keinem Compiler
auf diesen Fehler hin geprüft. Dies führte zu unberechenbarem Verhalten,
da somit einfach ein nicht-initialisierter Wert zurückgegeben wurde. Dieser
Fehler führte dennoch zu nur 607 Ausfällen.
Andere nicht-korrelierende Ausfälle wurden durch die Angabe des falschen
Indexes in einem Array verursacht. Obwohl das Programm massiv auf Arrays operiert, führte dieser Fehler zu nur 1297 Ausfällen bei einer Million
Testfällen.
An verschiedenen Stellen traten Probleme durch den Vergleich von
Fließkomma-Zahlen mit eingeschränkter Präzision auf. Zum Beispiel wurde
geprüft, ob eine Zahl negativ ist, indem mit 0 verglichen wurde. Zahlen,
die jedoch von der negativen Seite sehr nahe an der 0 heranlagen, wurden
in der Vergleichsfunktion als 0 behandelt, und so wurde ein falsches Ergebnis zurückgegeben. Dieser Fehler wurde nicht nur von den unerfahreneren
Programmierern begangen, sondern auch von einem im wissenschaftlichen
Bereich erfahrenen Entwickler.
Fließkommazahlen bieten allgemein ein schwieriges Problem: Selbst mit
eingeschränkter Präzision können natürlich Rundungsfehler auftreten, so
dass mehrere korrekt-arbeitende Versionen dennoch unterschiedliche Ergebnisse ausgeben. Es wurde festgestellt, dass derartige Fehler unberechenbar sind, und eine Abschätzung von Wahrscheinlichkeiten unmöglich ist.
Insbesondere können auf diese Weise, wenn der Entscheidungsalgorithmus
scheitert, auch Fehler auftreten, die bei einer normalen, einzelnen Implementierung nicht auftreten.
180
Methoden der empirischen Softwaretechnik
3 Experiment
Fehler Verursachte Ausfälle
1.1
2
3.1
700
1061
3.2
3.3
537
1437
3.4
6.1
607
511
6.2
6.3
32
71
7.1
8.1
225
8.2
98
9.1
47
6
9.2
11.1
554
356
12.1
71
12.2
13.1
4
14.1
1297
71
14.2
16.1
28
34
16.2
17.1
201
17.2
76
Fehler Verursachte Ausfälle
18.1
8
19.1
264
20.1
323
20.2
697
21.1
85
21.2
7
22.1
6551
22.2
1735
22.3
1735
23.1
72
23.2
8
24.1
260
25.1
14
25.2
80
25.3
3
26.1
140
26.2
9
26.3
1
26.4
6
26.5
4
26.6
368
26.7
243
Table 5: Ausfälle pro Fehler
Die korrelierenden Ausfälle waren im Allgemeinen deutlich verworrener als
die nicht-korrelierenden. Zum Beispiel wurden zum Vergleich von Winkeln
nur die entsprechenden Cosinus-Werte verglichen. Bei Verwendung echter
reeler Zahlen wäre dies eine gültige Vergleichs-Möglichkeit gewesen, im Rahmen der begrenzten Präzision der verwendeten Maschinen und der zusätzlich eingeschränkten Präzision für dieses Experiment traten aber Abweichungen zum NASA-Programm auf. Dies ist darauf zurückzuführen, dass
die Sinus- und Cosinus-Funktionen an den Minima und Maxima einen sehr
geringen Differenzenquotienten aufweisen, und so beim Vergleich deutlich
verschiedener Winkel innerhalb dieser Grenzwerte ähnliche Funktionswerte
auftreten. Dieser Fehler wurde in 4 der 27 Versionen gemacht, und die Anzahl der Ausfälle lag zwischen 71 und 206. Insgesamt fiel jedoch nur in 8
Fällen mehr als ein Programm gleichzeitig aus.
Methoden der empirischen Softwaretechnik
181
Experimente: Allgemein
Im zweiten Beispiel handelte es sich um einen Fehler bei der Annahme, wie
ein Winkel von drei Punkten aufgespannt werden kann. Normerweise kann
man genau einen der Punkte als Winkelpunkt betrachten, jedoch nicht in
den Fällen der Winkelgrößen 180 Grad oder 360 Grad: Bei beiden Winkeln
entsteht zwar als Ergebnis eine gerade Linie, die Winkelpunkte sind jedoch
verschieden. Auch hier waren die Auswirkungen sehr unterschiedlich. Eine
Version fiel 231 Mal auf Grund dieses Fehlers aus, eine andere nur 37 Mal.
Beim Ausfall der zweiten Version fiel die erste Version jedoch immer mit aus.
Um etwas systematischer an die Untersuchung zu Gründen für Fehler heranzutreten, wurde versucht, diese zu klassifizieren: Fehler wurden als ”logisch
verwandt” bezeichnet, wenn sie nach Meinung der Autoren auf demselben
logischen Trugschluss basieren, oder zumindest ähnlich sind und sich funktionsmäßig im gleichen Teil der Anwendung befinden. Dies sind natürlich
subjektive Kriterien, die stark vom Verständnis der Anwendung und dem
der Intention der Programmierer abhängig sind.
Eine erste Annahme legt nahe, dass korrelierende Ausfälle durch logisch verwandte Fehler verursacht werden, da bestimmte Teile des Programms komplexer bzw. fehleranfälliger sind, als andere. Einige der Programm-Ausfälle,
z.B. bei bestimmten Winkelberechnungen, bestätigten diese Hypothese. Es
gab jedoch auch einige Ausfälle, die stark korrelierten, aber nicht durch logisch verwandte Fehler entstanden, es musste also noch weitere Ursachen
geben.
Zur weiteren Überlegung wann und warum korrelierende Ausfälle entstehen,
wurde das folgende Model betrachtet: Ein Programm implementiert eine
Funktion, die die Eingabe I auf die Ausgabe O abbildet.
P : I 7→ O
I besteht dabei aus einer Menge von Eingabemöglichkeiten
I = i1 , i2 , ..., in
und O aus einer Menge von Ausgabemöglichkeiten
O = o1 , o2 , ..., on
P ist zerlegbar in eine Menge partieller Funktionen, die jeweils einen
möglichen Pfad durch das Programm darstellen:
P = P1 , P2 , ..., Pm
so dass für jedes Pj , 1 ≤ j ≤ m gilt:
182
Methoden der empirischen Softwaretechnik
3 Experiment
Pj : I[Pj ]− > O[Pj ],
wobei I[Pj ] der Definitionsbereich und O[Pj ] der Wertebereich von Pj
darstellt. Offensichtlich gilt:
I = I[P1 ] ∪ I[P2 ] ∪ ...O[Pm ]
und
O = O[P1 ] ∪ O[P2 ] ∪ ...O[Pm ]
Konkret entsteht ein Fehler also dadurch, wenn eine der partiellen Funktionen Pi fehlerhaft ist, sie also falsch aufgerufen wird oder fehlerhafte Berechnungen anstellt. Bei der Multiversions-Programmierung können dann zwei
Fälle auftreten: Entweder haben die Programme jeweils Fehler in Pfaden
mit disjunktem Definitionsbereich, das heisst, sie fallen nicht gleichzeitig aus.
Im anderen Fall haben die Programme Fehler in Pfaden, deren Definitionsbereiche sich zumindest teilweise überlappen. Dann können die partiellen
Funktionen entweder niemals, manchmal oder immer das gleiche fehlerhafte
Ergebnis ausgeben. In diesem Modell wird klar, dass Fehler nicht unbedingt logisch verwandt sein müssen, um korreliernde Ausfälle zu verursachen.
Aus diesem Grund wurde eine zweite Hypothese aufgestellt, die besagt, dass
Fehler, die korrelierende Ausfälle verursachen, verwandt bzgl. des EingabeBereichs sind. Zwei Fehler werden also auf Grund bestimmter Eingaben
ausgelöst, abgesehen davon, ob die Fehler in den partiellen Funktionen logisch verwandt sind. Bestimmte Eingaben wären also inherent schwieriger zu
verarbeiten, als andere, so dass sich dort an verschiedensten Bearbeitungsschritten Fehler bilden. Aus dieser Hypothese wurde gefolgert, dass korreliernde Ausfälle also auch mit komplett verschiedenen Algorithmen auftreten
können.
3.4
Schlussfolgerung
Die Authoren der Untersuchung schlossen aus den Ergebnissen, das zumindest für das betrachtete Programm die Theorie der Unabhängigkeit zwischen
Fehlern verschiedener Implementationen nicht haltbar ist. Dies bedeutet
nicht, dass die Verlässlichkeit des Systems nicht prinzipiell gesteigert wird,
die Verbesserung ist nur nicht so hoch, wie der Begriff “Unabhängigkeit” im
theoretischen Sinne versprechen würde.
Es sind allerdings weitere Untersuchungen nötig, um eine allgemeinere
Schlussfolgerung ziehen zu können. Insbesondere eine tiefgründige Untersuchung in der Art der am häufigsten auftretenden Fehler wäre dabei hilfreich, da dann gezielt Methodiken zu deren Vermeidung entwickelt werden
Methoden der empirischen Softwaretechnik
183
Experimente: Allgemein
können.
Die Art Fehler, die nur in einzelnen Versionen vorkommen, werden möglicherweise eher vom Compiler oder bei Testläufen festgestellt. Mehrfach auftretende Fehler dagegen könnten eher auf die Art oder das Verständnis des zu
lösenden Problems zurückzuführen sein, so dass diese nicht leicht durch formale Methoden zu erfassen sind. Einige Teile des Programms sind inherent
schwieriger zu lösen als andere, so dass sich gerade in diesen Teilen eher
Fehler häufen. Nach dem Experiment wurde ein Fragebogen ausgegeben, um
festzustellen, welche Teile des Problems die Programmierer am schwierigsten
fanden bzw. in welchen Teilen sich die meisten Fehler befinden würden. Die
Ergebnisse dieser Befragung deckten sich nicht mit den tatsächlichen Ergebnissen, die Entwickler konnten also die schwierigen und komplizierten Teile
nicht korrekt einschätzen. Es ist also kein leicht zu lösendes Problem, fehleranfälliges Stellen auch nur zu identifizieren, um sie durch weniger anfällige
Programm-Konstrukte ersetzen zu können.
3.5
Reaktionen
Unter Befürwortern der Multiversions-Programmierung gab es teilweise
heftige Reaktionen auf das durchgeführte Experiment, insbesondere von Professor Algirdas Avizienis der University of California Los Angeles (UCLA)
und einigen seiner ehemaligen Studenten. Die für das Experiment verantwortlichen John C. Knight und Nancy G. Leveson haben aus diesem Grund
eine öffentliche Antwort verfasst, in der sie der Kritik widersprechen. Dort
wird insbesondere darauf eingegangen, dass der Großteil der Kritiken nur
Dinge wiederholen, die an anderer Stelle als Hypothese geäußert werden, jedoch nirgendwo empirisch nachgewiesen wurden.
Auch andere Äußerungen scheinen ihrer Meinung nach keinerlei Halt zu
haben. Auf die Kritik, dass die einzelnen Entwicklerteams der Varianten
keine Methoden des Software Engineerings anwandten erwiderten sie, dass
alle Teilnehmer des Experiments sehr wohl mit Software Engineering vertraut
waren und die durchschnittliche Anzahl Fehler innerhalb der Programme
sogar geringer war, als die bei vergleichbaren Studien. Insbesondere vergleichen sie ihre Ergebnisse mit denen anderer Projekte (s. Tabelle 6).
Es ist ersichtlich, dass das von ihnen durchgeführte Experiment von allen
vergleichbaren Versuchen die meisten Fälle betrachtete und dennoch am
wenigsten Ausfälle zeigte. Damit ist jede diesbezügliche Kritik widerlegt.
Insbesondere wurde bei der Untersuchung an der UCLA nicht der tatsächliche Ausfall des Systems getestet, sondern nur auf die einzelnen Fehler im
Programmcode untersucht. Auch wenn also berichtet wurde, dass die Anzahl gleicher Fehler sehr gering war, ist damit nicht erwiesen, dass die Anzahl
184
Methoden der empirischen Softwaretechnik
3 Experiment
Kni/Lev
27
Chen
7
Kelly
18
NASA
20
Anzahl Versionen
Durchschn. Anzahl
Fehler pro Version
1.6
unbek. unbek. unbek.
Simulierte Testfälle
1,000,000
32
100
921,000
Durchschn. AusfallRate pro Version
.0007
unbek.
.27
.006
Durchschn. AusfallRate bei 3 Versionen
.00004
.10
.20
.0002
Statistisch unabh.
nicht
nicht
Verhalten
nein
getestet getestet
nein
UCLA/H
6
1.8
1000
unbek.
unbek.
nicht
getestet
Table 6: Vergleich verschiedener Unabhängigkeits-Experimente
Ausfälle ebenso gering ist. Zu dieser Größe wurden bei diesem Experiment
keine Aussagen gemacht.
Weiterhin wurde häufig kritisiert, dass die die Abnahme-Prozedur nicht rigoros genug war, da nur 200 Tests durchgeführt wurden. Dieser Test ist jedoch
nur als Nebeneffekt des Experimentes aufgetreten, um sicherzustellen, dass
jede Version für den experimentellen Durchlauf geeignet ist. Die eigentlichen
Test-Prozeduren wurden von den jeweiligen Entwicklern selbst durchgeführt
und waren, wie in der obigen Tabelle auch deutlich zu entnehmen ist, durchaus gründlich genug.
Ausserdem wurde bemängelt, dass kein festes Kommunikationsprotokoll
definiert war, so dass dadurch die Unabhängigkeit eingeschränkt wurde.
Knight und Leveson erwiderten, dass im Paper beschrieben wird, dass jede
Kommunikation nur auf bestimmte Weise über E-Mail stattfinden darf, und
desweiteren auch die Gruppen der verschiedenen Universitäten über 3000
Meilen voneinander entfernt waren.
Als weiteren wichtigen Punkt wird die Größe des Programs kritisiert: bei
einem so kleinen Programm gäbe es einfach nicht genügend Möglichkeiten,
Diversifikation zu ermöglichen. Darauf wurde geantwortet, dass dies zwar
ein gültiger Kritikpunkt sei, allerdings jede andere vom Aufwand machbare
Studie die gleiche Problematik bieten würde. Insbesondere sei auf Grund des
großen Aufwands dieses Verfahrens eine Anwendung bei industriell großen
Projekten ( mehr als 500000 Zeilen Programm-Code) gar nicht möglich.
In der Praxis würden daher wahrscheinlich nur kleine, besonders kritische
Programmteile isoliert und so nur auf kaum größere Module MultiversionsProgrammierung angewandt. Desweiteren würden bei größeren Programmen
mehrere Checkpoints nötig sein, bei denen über Korrektheit entschieden wird.
Methoden der empirischen Softwaretechnik
185
Experimente: Allgemein
Alleine die Reihenfolge, in der diese Checkpoints abgefragt werden, und die
Geschwindigkeit, in der diese erreicht werden müssen, legt eine gewisse Programmstruktur fest und behindert damit die Unabhängigkeit.
3.6
Diskussion
Auch wenn es zuerst erstaunlich erscheint, dass es sogar vorkam, dass 8
Programme gleichzeitig versagten, sollte man doch einige dafür relevanterscheinende Faktoren beachten: Die geschriebenen Programme bestanden
aus zwischen 327 und 1004 Zeilen von Code. Bei einer so geringen
Programmgröße scheint es nicht unwahrscheinlich, dass selbst bei unabhängiger Fehlerentstehung bei 27 Varianten Fehler in denselben Komponenten auftreten. Dies müsste natürlich durch ein ähnliches Experiment mit
aufwändigeren Programmen untersucht werden. Andererseits hat die Vorarbeit durch die NASA und die relativ geringe Größe des hier genutzten
Problems den Vorteil, dass die Spezifikation bereits sehr gut ausgearbeitet
war. Da gerade eine fehlerfreie Spezifikation eine große Bedeutung für die
Unabhängigkeit der Fehler besitzt, war dies eine sehr gute Ausgangsbasis,
die höchstens durch eine Spezifikation in einer formalen Sprache übertroffen
werden könnte.
Es ist allerdings von der Methodik des Experimentes her fragwürdig,
ob eine Einschränkung auf die gleiche Programmiersprache im Sinne der
Multiversions-Programmierung ist. Implementationen in anderen Sprachen
wie z.B. C oder VHDL hätten durchaus ganz andere Programm-Strukturen
aufweisen können, als die in Pascal geschriebenen. Der Fehler, bei dem Funktionsvariablen nicht korrekt initialisiert wurde, wäre zum Beispiel bei einer
anderen imperativen Programmiersprache mit weiterentwickeltem Compiler
abgefangen worden und in einer funktionalen Sprache wohl gar nicht möglich
gewesen.
Die Hypothese, dass Ausfälle nicht nur durch logische verwandte Fehler, sondern an übergeordneter Stelle durch die Natur bestimmter Eingabedaten
verursacht werden, ist, falls sie in anderen Experimenten nicht widerlegt wird,
für die Multiversionsprogrammierung vernichtend. Dies würde zwangsläufig bedeuten, dass man das Problem der Software-Verlässlichkeit mit komplett neuen Methoden als den jetzigen angehen müsste. Jedoch scheint
die Hypothese in der hiesigen Formulierung etwas zu simplistisch. Sie behauptet nur, dass es Unterschiede in der Schwierigkeit der Berechnungen von
Eingabedaten gibt, nicht jedoch, welche es sind und wie sie zu erkennen sind.
Wenn dies überhaupt möglich ist, wäre eine quantitativere Abschätzung wünschenswert.
186
Methoden der empirischen Softwaretechnik
4 Zusammenfassung
4
Zusammenfassung
Offensichtlich ist eine weitere genaue empirische Analyse des Themas
“Multiversions-Programmierung” von Nöten – die hier betrachteten Kritiken
von Avizienis liefern nicht einen einzigen wissenschaftlichen Gegenbeweis
betreffend der Schlussfolgerung von Knight & Leveson und es wird keine
Studie beschrieben, die die von den Kritikern beschriebenen Mängel behebt
und ein anderes Ergebnis liefert. Im Gegentil: Das allgemeine Ergebnis,
dass die Fehler-Unabhängigkeit selbst bei unabhängiger Entwicklung nicht
derartig gegeben ist, wie die Intuition vielleicht vermuten lassen würde, ist
in einigen anderen Experimenten bestätigt worden. Das heisst nicht, dass
ein derartiger Systemaufbau keine höhere Verlässlichkeit bringt, bestimmte
Ausfälle korrelieren aber in verschiedenen Versionen derartig stark, dass das
gesuchte Maß möglicherweise nicht erreicht werden kann.
Ein Aspekt, der allerdings betrachtenswert ist, sind die Ergebnisse der Multiversions-Programmierung beim Einsatz reeler Systeme. Schließlich wird
ein Entwicklungsansatz betrachtet, der tatsächlich in sicherheitskritischen
Systemen verwendet wird. Vermutlich werden bei solchen Systemen jedes
Mal, wenn die Ergebnisse der N Implementationen voneinander abweichen,
die entsprechenden Umstände genauestens protokolliert, so dass dadurch,
zumindest entwicklungsfirmen-intern, sehr viel mehr statistisches Material
zur Verfügung steht, als es in Studien entwickelt werden kann. Insbesondere
ist interessant, in welchen Fällen ein N-Versions-System kritisch versagt
hat – hierbei muss natürlich auch betrachtet werden, ob tatsächlich eine
unabhängige Entwicklung stattgefunden hat. Ein Fall wie die in der
Einleitung beschriebene Ariane-5 Rakete liefert für eine solche Untersuchung
keine nützlichen Informationen.
Die verursachten Kosten spielen natürlich auch eine große Rolle: Ein
einzelnes qualitativ hochwertiges Programm für sicherheits-relevante Anwendung zu schreiben ist bereits teuer. Der hier vorgestellte Ansatz verlangt
jedoch mindestens ein zweites Programmierteam (häufiger wahrscheinlich
auch noch ein drittes), sowie ein zusätzliches Koordinations-Team, um die
zu beachtenden Protokolle festzusetzen. Es werden trotz der bereits redundanten Versionen ja dennoch gute Entwicklungsmethodiken vorausgesetzt,
wie man sie auch von einem kritischen Einzel-Programm gewohnt ist.
Zumindest regte dieser Versuch aber zusätzlich an, sich genauer mit
üblichen Fehlerquellen in der Software-Konstruktion zu beschäftigen.
Bei der Hardware-Entwicklung zum Beispiel sind viele Problem- und
Störungsquellen wohlbekannt, und es existieren Design-Methoden, um die
Wahrscheinlichkeit eines daraus entstehenden Ausfalls zu minimieren. In der
Software-Entwicklung existieren natürlich auch “Best-Practices”-Methoden,
Methoden der empirischen Softwaretechnik
187
Experimente: Allgemein
diese sind aber deutlich informeller und quantitativ schwierig zu messen.
5
Quellen
Knight, J. C. and Leveson, N. G. 1986. An experimental evaluation of the
assumption of independence in multiversion programming. IEEE Trans.
Softw. Eng. 12, 1 (Jan. 1986), 96-109.
A. Avizienis, ”The Methodology of N-Version Programming,” Chapter 2 of
Software Fault Tolerance, M. R. Lyu (ed.), Wiley, 23-46, 1995.
Brilliant, S. S., Knight, J. C., and Leveson, N. G. 1990. Analysis of Faults
in an N-Version Software Experiment. IEEE Trans. Softw. Eng. 16, 2 (Feb.
1990), 238-247.
Knight, J. C. and Leveson, N. G. 1990. A reply to the criticisms of the
Knight & Leveson experiment. SIGSOFT Softw. Eng. Notes 15, 1 (Jan.
1990), 24-35.
Kalinsky, David.
Design Patterns for High Availability.
//www.embedded.com/story/OEG20020729S0030
http:
Brilliant, S. S., Knight, J. C., and Leveson, N. G. 1989. The Consistent
Comparison Problem in N-Version Software. IEEE Trans. Softw. Eng. 15,
11 (Nov. 1989), 1481-1485.
188
Methoden der empirischen Softwaretechnik
Untersuchungen zur Fehleranalyse
Christoph Briem
Keywords: Fehleranalyse, Fehlerverteilung, Fehleranfälligkeit
Abstract
Diese Arbeit beschäftigt sich mit Studien zur Fehleranalyse, die
Aussagen über die Fehleranfälligkeit bestimmter Kategorien von Softwaremodulen liefern sollen. Mit Hilfe dieser Aussagen könnte man sich
beim Testen und Korrigieren des Codes auf solche Module konzentrieren, die besonders fehleranfällig sind. Dazu werden zunächst Thesen
aufgestellt, die durch empirische Daten untermauert oder widerlegt
werden. Die Vorgehensweisen zur Datensammlung und die Schlussfolgerungen aus der Datenanalyse der einzelnen Studien werden hier
erörtert und miteinander verglichen.
Experimente: Allgemein
1
Einführung
Um heutige komplexe Softwareprodukte relativ fehlerfrei ausliefern zu können, werden umfangreiche Tests und Reviews des Produkts durchgeführt.
Welche Module eines Softwaresystems dabei wie kosten- und zeitintensiv
getestet und überprüft werden, wird der Erfahrung der Entwickler überlassen. Zuverlässige, wissenschaftlich begründetet Voraussagen, welche Module besonders fehleranfällig sind und damit außergewöhnlich intensiv getestet
werden sollten, können bisher nicht getroffen werden. Diese wären umso
wertvoller, da in den betrachteten Studien auch gezeigt wurde, dass ein
Großteil der Fehler in relativ wenigen Modulen(bzw. Dateien) gebündelt
ist (siehe Kapitel 5.1). Welcher Kategorie diese relativ wenigen, fehleranfälligen Module jedoch angehören(z.B. besonders große, komplexe oder neu
geschriebene Module), ist zunächst nicht bekannt.
Es existieren jedoch einige plausible Hypothesen, die mit empirischen Daten
überprüft werden können. Diese Arbeit versucht, die Ergebnisse von sechs
Studien zu diesem Thema zu vergleichen. Alle versuchen anhand empirischer
Daten, einige Hypothesen zur Fehlerverteilung zu bestätigen oder zu widerlegen. Diese Hypothesen ähneln sich zwar sehr, sind aber auch teilweise
verschieden oder anders formuliert. Dieser Umstand erschwert die Vergleichbarkeit(siehe nächstes Kapitel).
Es werden auch einige interessante Ergebnisse einzelner Studien aufgezeigt,
die in anderen Studien in der Form nicht untersucht wurden und somit nicht
vergleichbar bzw. überprüfbar sind.
2
Vergleichbarkeit der Studien
In den einzelnen betrachtete Studien wurden die unterschiedlichsten Softwaresysteme in ihrer Entwicklung untersucht. Unter anderem unterscheiden
sie sich in den verwendeten Programmiersprachen, der eingesetzten Hardware
und den Branchen, für die die Systeme entwickelt wurden (z.B. Telekommunikation, Raumfahrt). Gemeinsam sind allen Systemen die hohe Komplexität
(mehrere zehntausend bis mehrere hunderttausend Zeilen Code), die sie erst
für Fehleranalysen interessant machen.
Alle Studien setzen verschiedene Methoden zur Datenerhebung und -analyse
ein, weswegen sich die Ergebnisse einzelner Studien zum Teil beträchtlich
unterscheiden. Trotzdem wird hier versucht, die Ergebnisse zu vereinen
und somit Rückschlüsse auf die Allgemeingültigkeit zu erhalten. Wo dieser
Versuch fehlschlägt(z.B. weil eine Hypothese einer Studie in allen anderen
nicht untersucht wurde), werden interessante Ergebnisse später kurz einzeln
190
Methoden der empirischen Softwaretechnik
3 Untersuchte Softwaresysteme und ihre Entwicklungsstadien
vorgestellt. Es ist klar, dass diese Erkenntnisse nicht unbedingt allgemeingültig sind, weil sie von anderen Studien nicht bestätigt wurden.
3
Untersuchte Softwaresysteme und ihre
Entwicklungsstadien
Folgende Softwaresysteme wurden in den sechs betrachteten Studien untersucht:
NASA [1] Das Tool zur Unterstützung der Planung einer Satellitenmission
der NASA wurde hauptsächlich in FORTRAN geschrieben. Fehler wurden in ein Formular eingetragen und dann analysiert.
Ericsson Telecom [4] Telekommmunikationssystem der Ericsson Telecom AB.
Die Studie enthält keine Angaben zur verwendeten Programmiersprache und Hardware.
Ericsson Norway [7] Verteiltes Telekommunikationssystem von Ericsson Norwegen. 64% der Software ist in Erlang, 26% in C und der Rest in anderen Programmiersprachen (u.a. Java, Perl..) geschrieben. Erlang ist
eine funktionale Sprache zur Programmierung nebenläufiger, verteilter
und fehlertoleranter Echtzeit-Systeme. Fehler in diesem System werden
in einer ”Trouble Report- Datenbank” festgehalten, die über ein WebInterface angebunden ist. Diese Datenbank wurde dann automatisch
ausgewertet.
AT&T [2] Software zur Inventurverwaltung bei AT&T, die zu größten Teilen
in Java entwickelt wurde.
Siemens [5] Software zur Kontrolle der PC-Nutzung der Siemens AG. Ältere Teile des Systems sind in Assembler geschrieben, neuere in einer
Hochsprache1 .
Pighin&Marzona [6] Diese Studie betrachtet gleich zwei Softwareprodukte.
Das erste ist eine Managementanwendung, die zweite ist eine Anwendung für den medizinischen Bereich. Beide wurden in C geschrieben
und laufen auf einem UNIX Betriebssystem. Wer diese Anwendungen
entwickelt hat, steht nicht in der Studie.
Jedes Softwareprodukt durchläuft während seines Bestehens verschiedene
Phasen. Jede Studie teilt diese Phasen unterschiedlich ein. Um diese Studien
1
Welche Hochsprache genau verwendet wurde, wird in der Studie nicht angegeben
Methoden der empirischen Softwaretechnik
191
Experimente: Allgemein
nun vergleichen zu können, werden die Phasen folgendermaßen festgelegt und
alle Angaben der verschiedenen Studien an dieses Schema angepasst, das der
Arbeit von Ostrand und Weyuker [2](AT&T) entnommen ist:
Early-Pre-Release Die früheste Phase, bestehend aus Entwicklung und Modultests.
Late-Pre-Release Die Phase unmittelbar vor Freigabe der Sofware. In dieser
Phase werden die entwickelten Module zu einem System verbunden
(integration), das dann intensiv getestet wird (system testing).
Post-Release Zeitraum nach der ersten (Beta-)Veröffentlichung des Softwareprodukts. Er kann noch in Beta-, kontrollierte und allgemeine Veröffentlichung unterteilt werden.
Es ist bekannt, dass in späten Phasen des Softwarelebenszyklus die Kosten
zur Fehlerbeseitigung extrem steigen. Bei IBM z.B. geht man davon aus, dass
”die Kosten zur Fehlerbeseitigung von einer Entwicklungsphase zur nächsten (Anforderung, Spezifikation, Entwurf, Codierung, usw.) um jeweils
eine Zehnerpotenz steigen.”(siehe [8]) Nach den intensiven Tests im LatePre-Release sind allerdings wenige schwere Fehler im Post-Release- Stadium
einer Software zu erwarten. Die Studien belegen diese Annahme auch.
Neben diesen Phasen einer Softwareversion werden in einigen Studien
auch die Fehlerhäufigkeiten in mehreren Versionen (sog. releases) einer Software miteinander verglichen.
4
Zur Verfügung stehende Daten
Alle Studien setzen empirische Daten zur Fehleranalyse ein. Unabhängig
von der Art der Datensammlung (Auswertung von manuell erstellten Fehlerberichten oder automatische Analyse von Logfiles) konnten bei allen Studien
folgende Fragen durch Auswertung der Daten beantwortet werden:
• Wann trat der Fehler im Lebenszyklus der Software auf? (z.B. EarlyPre-Release)
• Wie groß war das Modul, das den Fehler enthielt?
Zeilen(lines of code, LOC))
(z.B. 100-200
• Wurde das Modul für dieses Softwareprojekt neu entwickelt oder ist ein
schon vorhandenes Modul modifiziert wiederverwendet worden?
192
Methoden der empirischen Softwaretechnik
5 Vergleichbare Thesen und Datenanalysen zur Fehlerverteilung
Daneben wurden von einigen Studien noch andere Daten erfasst, z.B. die
Schwere des Fehlers in einer Skala von eins bis fünf, die benötigte Zeit, um
den Fehler zu beheben, die Art des Fehlers (z.B. Fehler im Design). Da
diese zusätzlichen Daten in den Studien sehr verschieden sind, wird hier auf
einen Vergleich verzichtet. Auf Ergebnisse einzelner Studien wird in Kapitel
6 eingegangen.
5
Vergleichbare Thesen und Datenanalysen zur
Fehlerverteilung
Dieses Kapitel stellt die verschiedenen Hypothesen über die Fehlerverteilung
in einem Softwaresystem vor, die von erfahrenen Entwicklern als plausibel
angesehen werden und zeigt, ob die Studien mit den gesammelten Daten
diese Hypothesen bestätigen oder widerlegen können. Dieses Kapitel behandelt nur Hypothesen, die von mindestens zwei Studien vergleichbar aufgestellt
worden sind. Diese Vorgehensweise erhöht die Chance der Verallgemeinbarkeit und schließt Ergebnisse, die nur für spezielle Softwaresysteme gelten,
weitgehend aus.
Hypothesen und Ergebnisse, die sich nur in einer Studie wiederfinden, werden
im nächsten Kapitel behandelt.
5.1
Pareto- Prinzip der Fehlerverteilung
Zwei Studien(Ericsson Telecom und AT&T) untersuchten, ob die Verteilung
der Fehler dem Pareto- Prinzip folgt: Ein Großteil der Fehler befindet sich nur
in relativ wenigen Modulen, z.B. 80% der Fehler in 20% der Module, weshalb
dieses Prinzip auch 80/20- Regel genannt wird. Man sollte dieses Prinzip
aber nicht an diesen zwei Zahlen festmachen. So folgt die Fehlerverteilung in
der Ericsson Telecom- Studie dem Pareto- Prinzip: 60% der Fehler wurden in
20% der Module gefunden (siehe Abbildung 1), bei AT&T wurde das Prinzip
von einer Veröffentlichung zur nächsten immer deutlicher: Im ersten release
enthielten 10% der Module 68% der Fehler, ab release 10 enthielten 10% der
Module alle gefundenen Fehler. Auch in der Siemens- Studie ist das ParetoPrinzip erkennbar, obwohl es dort nicht so ausgeprägt ist und auch nicht
explizit vom Pareto- Prinzip gesprochen wird: 45% der Fehler befanden sich
in nur 10% des Codes. Über alle Studien betrachtet kann man also relativ
sicher von einer 60/20- Regel bei der Fehlerverteilung ausgehen.
Wenn sich also die meisten Fehler auf wenige Module beschränken, wäre es
sehr nützlich, Regeln zu haben, die diese wenigen, sehr fehleranfälligen Module identifizieren, so dass sie intensiver getestet werden könnnen. Ob gewisse
Methoden der empirischen Softwaretechnik
193
Experimente: Allgemein
Figure 1: Paretoverteilung beim Ericcson Telecom- Projekt Quelle: [4]
Regeln bzw. Hypothesen durch empirische Daten untermauert werden können, wird im Folgenden erörtert.
5.2
Große vs. kleine Module
Eine weitverbreitete Ansicht ist, dass große Module, d.h. mit vielen tausend
Zeilen Code, deutlich fehleranfälliger sind als kleine. Aus diesem Grund
werden Programmierer seit Jahrzenten angehalten, Module möglichst verhältnismäßig klein zu halten. Auch Objektorientierung und Modularisierung
arbeiten darauf hin.
Um diese Hypothese zu untersuchen, werden die Module nach ihrer Größe
in Klassen eingeteilt (z.B. 0-100 LOC, 100- 200 LOC,...) und dann die absoluten Fehler und die Fehler pro 1000 Zeilen (kilo lines of code, KLOC) für
jede Klasse bestimmt. In diesen Daten versucht man eine Tendenz zu erkennen.
Die Annahme lässt sich nach der Datenauswertung erstaunlicherweise nicht
mehr halten. Die Anzahl der Fehler pro 1000 Zeilen Code steigt nicht mit der
Größe der Module. Bei manchen Studien2 fällt diese sogar. Es lässt sich nur
mutmaßen, wieso dieser Effekt auftritt. Einige Studien haben gezeigt, dass
viele Fehler im Interface-Teil eines Moduls, egal ob groß oder klein, auftreten
und da der restliche Teil des Moduls fehlerfreier ist, sinkt die Fehleranzahl
pro 1000 Zeilen Code mit der Größe des Moduls. Außerdem werden große
2
194
NASA, AT&T
Methoden der empirischen Softwaretechnik
5 Vergleichbare Thesen und Datenanalysen zur Fehlerverteilung
Figure 2: Punktwolken der Modulgröße(in LOC) gegen die Fehlerrate(in
Fehler/LOC) Quelle: [4]
Module mehr getestet, überwacht und überprüft. Weiterhin sind Fehler in
kleinen Modulen leichter zu finden, wobei die großen Module eventuell noch
Hunderte von Fehlern enthalten, die unter Umständen niemals auftreten, da
Teile des Moduls Spezialfälle behandeln sollen, die in der Praxis (während der
Tests und nach der Veröffentlichung) niemals aufgetreten sind. Man sollte
allerdings nicht in Versuchung kommen und aus diesen Ergebnissen schließen,
dass ein Softwaresystem weniger Fehler enthält, wenn es aus besonders großen
Modulen besteht. 30 große Module lassen sich mit hohem Test- und ReviewAufwand sicher noch relativ fehlerfrei halten, während das bei 300 großen
Modulen sicher unmöglich ist.
Wie wichtig standardisierte und anerkannte Analysetechniken auf dem
Gebiet der Fehleranalyse sind, zeigt die Tatsache, dass die Ericsson TelecomStudie in dieser Frage überhaupt keinen Trend hinsichtlich der Fehlerhäufigkeit in Modulen unterschiedlicher Größe sieht und die anscheinend starken
Ergebnisse bei dem NASA- System aufgrund ”unangemessener Analysen” zustande gekommen seien. Sie unterstreichen das mit einem Diagramm, in dem
sie die Codelänge eines Moduls gegen die Fehlerrate auftrugen (siehe Abbildung 2). Tatsächlich lässt sich in diesem Fall kein Trend erkennen.
Methoden der empirischen Softwaretechnik
195
Experimente: Allgemein
Studie
Große Module enthalten mehr Fehler
NASA
widerlegt
Ericsson Telecom
nicht widerlegt (keine Tendenz)
Ericsson Norway
nicht widerlegt (keine Tendenz)
AT&T
widerlegt
Siemens
widerlegt
Table 1: Ergebnisse einzelner Studien zur ersten Hypothese
5.3
Wiederverwendete vs. neuentwickelte Module
Die Wiederverwendung von Modulen aus früheren Softwareprojekten soll Entwicklungszeit und -kosten sparen und gleichzeitig die Anzahl der Fehler der
Software klein halten, da die alten Module schon länger getestet und im
Einsatz sind und somit nahezu fehlerfrei sein sollten. Fast alle Studien3 ,
die diese Frage untersuchten (u.a. AT&T, NASA, Ericsson Norway), kamen zu dem Schluss, dass ältere Module weniger Fehler enthalten als neu
geschriebene. Auf der anderen Seite zeigte sich bei dem NASA- Projekt, dass
das Beseitigen der Fehler in Modulen, die aus anderen Projekten stammten,
viel mehr Aufwand benötigte als bei Modulen, die für das betrachtete Projekt neu geschrieben wurden. Vor allem Fehler, die aus missverstandener
oder ungenügender Anforderungsspezifikation entstanden waren, ließen sich
später nur mit großem Aufwand beheben. Dieses Ergebnis unterstreicht die
Wichtigkeit einer korrekten und vollständigen Spezifikation eines Softwareprojekts.(siehe auch Kapitel 6.3) Ein weiterer Grund, warum ältere Module
schwerer zu warten sind, könnte sein, dass Entwickler der alten Module nicht
mehr zur Verfügung stehen oder der verantwortliche Programmierer Probleme hat, seinen eigenen Code zu verstehen und den Fehler entsprechend
zu beseitigen. Deswegen wurde sogar die Frage gestellt, ob es sich lohnt,
alte Module wiederzuverwenden oder ob die Kosten zur Beseitigung der
Fehler in diesen Modulen die Kosten für die Neuentwicklung übersteigen.
Diese Frage muss sicherlich differenzierter betrachtet werden: Standardmodule (z.B. Bibliotheken), die so gut wie gar nicht verändert werden müssen,
müssen sicherlich nicht immer neu geschrieben werden. Andere Module, von
denen ein Großteil des Codes umgeschrieben werden muss und die eventuell
schon unübersichtlich programmiert worden sind, sollten angesichts dieses
Ergebnisses der Studie sicherlich neu geschrieben werden.
3
Nur Pighin und Marzona konnten keinen Unterschied zwischen alten und neuen Modulen feststellen.
196
Methoden der empirischen Softwaretechnik
5 Vergleichbare Thesen und Datenanalysen zur Fehlerverteilung
Studie
Neuentwickelte Module enthalten
mehr Fehler als wiederverwendete
NASA
bestätigt
Ericsson Norway
bestätigt
AT&T
bestätigt
Pighin&Marzona
nicht bestätigt
Table 2: Ergebnisse einzelner Studien zur zweiten Hypothese
5.4
Komplexe vs. einfache Module
Bevor man untersucht, ob komplexe Module potentiell mehr Fehler enthalten
als vergleichsweise einfache, muss man zunächst ein vernünftiges Komplexitätsmaß finden. Einige Studien benutzen hier die McCabe- Metrik4 , die als
Anzahl der Entscheidungen in einem Programm (z.B. if) + 1 definiert ist.
Dieses simple Komplexitätsmaß wird von den Autoren der Ericsson TelecomStudie angezweifelt. Sie verwenden stattdessen das Produkt aus der McCabeund der sog. SigFF- Metrik, die als die Anzahl von Signalen definiert ist,
die von dem Modul verändert oder neu erstellt werden. Die Komplexität
nach der SigFF- Metrik lässt sich sogar schon zur Entwurfszeit bestimmen,
während man mit der Bestimmung nach McCabe bis zur vollständigen Implementierung warten muss. Dafür gestaltet sich die Berechnung nach SigFF
etwas komplizierter.
Fast alle Studien, die nur die McCabe- Metrik benutzten, konnten keinen
Zusammenhang zwischen der Komplexität und der Fehleranfälligkeit eines
Moduls feststellen. Obwohl die durchschnittliche Komplexität bei großen
Modulen stark anstieg, stieg, wie schon vorher beobachtet, die Zahl der Fehler
pro 1000 Zeilen nicht an. Nur Pighin und Marzona konnten bei ihren Projekten beobachten, dass Module, die sie als besonders fehleranfällig betrachteten
(sog. faulty files 5 ), eine etwas höhere (im Bereich von 10-15%) zyklomatische Komplexität hatten. Auch die Ericsson Telecom- Studie konnte mit einer
anderen Metrik (McCabe * SigFF) einen leichten Zusammenhang herstellen,
d.h. Module mit hoher Komplexität laut Metrik enthielten auch viele Fehler
(siehe Diagramm 3). Eine Standardmetrik hat sich anscheinend in der Fehleranalyse noch nicht durchgesetzt. Die McCabe- Metrik scheint nur bedingt
geeignet.
4
Die McCabe- Metrik wird auch zyklomatische Komplexität genannt
Als faulty files werden Module bezeichnet, deren Fehleranzahl größer ist als ein Drittel
der durchschnittlichen Fehleranzahl
5
Methoden der empirischen Softwaretechnik
197
Experimente: Allgemein
Figure 3: Kumulierter Anteil aller Fehler gegen den Anteil der Module,
nach Größe geordnet. Quelle: [4]
Studie
Komplexe Module enthalten verwendete Metrik
mehr Fehler als einfachere
NASA
nicht bestätigt
McCabe
Ericsson Telecom
schwach bestätigt
McCabe * SigFF
Ericsson Telecom
nicht bestätigt
McCabe
Pighin&Marzona
schwach bestätigt
McCabe
Siemens
nicht bestätigt
McCabe
Table 3: Ergebnisse einzelner Studien zur dritten Hypothese
198
Methoden der empirischen Softwaretechnik
5 Vergleichbare Thesen und Datenanalysen zur Fehlerverteilung
5.5
Frühe vs. späte Produktstadien
Je näher der Auslieferungszeitpunkt eines Produkt rückt, desto weniger
Fehler sollte es enthalten. Die meisten Fehler müssten schon während der
Entwicklung und den einzelnen Testphasen beseitigt worden sein. Spätestens
wenn das Produkt den Betastatus verlässt, sollte es frei von schwerwiegenden
Fehlern sein.
Diese Annahme lässt sich durch Studien belegen. Bei dem AT&T- Produkt
z.B. enthielten vor der ersten Veröffentlichung in der ”Early-Pre-Release”Phase noch 36% aller Dateien Fehler, in der ”Late-Pre-Release”- Phase waren
es noch 18%; nach der ersten Veröffentlichung war das Produkt fehlerfrei. Bei
Ericsson Telecom enthielt die Software vor Veröffentlichung noch 1598 Fehler,
nachher wurden noch 71 weitere Fehler entdeckt. Das sind 20 mal weniger
als vor der Veröffentlichung.
Eine weitere häufig geäußerte Annahme ist, dass Produkte, die schon in
höheren Programmversionen vorliegen, d.h. die schon seit vielen releases
verbessert, gepflegt und weiterentwickelt werden, ausgereifter sind und aus
diesem Grund weniger Fehler enthalten. So galt Windows 1.0 als nahezu
unbenutzbar, während Windows 3.1 schon in vielen produktiven Systemen
eingesetzt worden ist. Offensichtlich wurden ”Kinderkrankheiten” früher Versionen in späteren beseitigt.
Das zeigt sich auch bei der AT&T- Software. Vor allem in der ”Early-PreRelease”- Phase treten weniger Fehler auf. Vor der fünften Veröffentlichung
enthielt das Produkt in dieser Phase noch in 12% der Dateien Fehler. Vor
dem dreizehnten Release waren es nur noch 3%, obwohl sich die Gesamtzahl
sowohl der Files als auch der Codezeilen mehr als verdoppelt hat. An der
Software scheinen also nur noch Erweiterungen vollzogen worden zu sein,
deren Implementierung nicht so fehleranfällig war wie noch in früheren Versionen.
5.6
Nachhaltigkeit von Fehlern in bestimmten Modulen
Es gibt sehr unterschiedliche Meinungen zu der Frage, ob Module, in denen
schon vor der Veröffentlichung viele Fehler gefunden worden sind, auch später
besonders viele Fehler enthalten. Argument für diese Annahme könnte sein,
dass Module mit vielen entdeckten Fehlern deutlich komplexer sind als andere
und somit auch weitere schwerwiegende Fehler enthalten. Dagegen spricht
die Vermutung, dass Module, in denen viele Fehler gefunden wurden, auch
sehr intensiv getestet worden sind und somit nicht mehr so viele enthalten.
Die Ericsson Telecom- Studie bestätigt die letztere Vermutung. Dort traten
vor einer Veröffentlichung 77% der Fehler in Modulen auf, die nach der VeröfMethoden der empirischen Softwaretechnik
199
Experimente: Allgemein
fentlichung keine Fehler mehr enthielten. Auch die Wissenschaftler bei AT&T
kommen zu einem ähnlichen Ergebnis. Dort betrug der Prozentsatz der ”latepre-relase”- Fehler in Modulen, die nach der Veröffentlichung fehlerfrei waren,
je nach Programmversion 72 bis 94%. Auf der anderen Seite ist die Anzahl
der Fehler nach der Softwareveröffentlichung so gering, dass verlässliche Aussagen im Grunde nicht getroffen werden können.
Eine weitere interessante Frage könnte sein, ob Module, in denen schon in
früheren Softwareversionen viele Fehler entdeckt wurden, auch in späteren
Veröffentlichungen besonders fehlerhaft waren. Die zwei Studien6 , die diese
Frage behandeln, kommen zu dem Schluss, dass dies wirklich der Fall zu
sein scheint: ”once faulty, ever faulty” (Pighin&Marzona [6], Seite 6). Bei
AT&T z.B. wurde dazu für jede Version eine Hitliste der 20 fehlerhaftesten
Module aufgestellt und miteinander verglichen. Von einer Veröffentlichung
zur nächsten blieben 17 bis 54% der Top 20- Module in dieser Hitliste. Also
scheint es sich durchaus zu lohnen, sich beim Testen der neuen Version auf
Fehlerergebnisse der vorherigen Versionen zu stützen.
6
Nicht vergleichbare Ergebnisse einzelner Studien
6.1
AT&T
In dieser Arbeit wurde nicht nur untersucht, wo und wieviele Fehler auftraten, sondern auch wie schwer die Fehler in einer Skala von 1 (kritisch) bis
5 (kosmetisch) waren. Systemkritische Fehler der höchsten Kategorie traten
nur in 1,6% der Fälle auf, 14,5% wurden in die Kategorie 2 eingestuft. Der
Hauptanteil (81%) wurde als mittelschwerer Fehler angesehen. Der Rest entfiel auf die zwei untersten Kategorien.
Es ist sicherlich schwer, aus diesen Erkenntnissen Methoden zur Fehlerbeseitigung oder gar -verhütung zu entwickeln. Anscheinend werden sehr schwere
Fehler schon beseitgt, bevor sie überhaupt in das System eingespielt werden
und dort als zu beseitigende Fehler erfasst werden, da der Programmierer so
lange Fehler in einem Modul beseitigt, bis es lauffähig ist. Und da die Kategorie 1 nur solche Fehler umfasst, die die Lauffähigkeit des Systems komplett
behindern, muss nicht lange getestet werden, um zu bemerken, dass sich ein
Fehler im System befindet. Dagegen sind mittelschwere Fehler, die nicht
sofort augenfällig werden, erst nach intensivem Testen zu finden und schleichen sich auch schneller und häufiger in ein System ein, da es nach ersten
Testläufen zunächst zu funktionieren scheint. Also entspricht dieses Ergebnis
den Erwartungen, kann aber wohl zu keinen Methoden zur Fehlerbeseitigung
6
200
AT&T und Pighin & Marzona
Methoden der empirischen Softwaretechnik
6 Nicht vergleichbare Ergebnisse einzelner Studien
entwickelt werden.
6.2
Siemens
In dieser Studie konnte auch die Auswirkung der Verwendung verschiedener
Programmiersprachen auf die Fehlerraten beobachtet werden. Drei verschiedene Sprachen wurden zur Entwicklung des betrachteten Systems eingesetzt:
• Assembler
• Columbus-Assembler (eine Assembler-Sprache, die um Kontrollmakros
wie if, then, else, end erweitert wurde)
• eine nicht näher spezifizierte Hochsprache
Die Fehlerraten(Fehler pro Codezeilen) waren bei Assembler ungefär genauso
hoch wie bei der Hochsprache. Dabei muss man allerdings beachten, dass
eine bestimmte Aufgabe in der Hochsprache in weniger Zeilen programmiert
werden kann als in Assembler. In diesem Fall war diese Verhältnis ungefähr
2 zu 1 zugunsten der Hochsprache, so dass man sagen kann, dass Module,
die in der Hochsprache geschrieben wurden, ungefähr halb so viele Fehler
enthielten wie vergleichbare Module in Assembler. Interessant sind nun
die Auswirkungen des Einsatzes von Columbus-Assembler auf die Fehlerrate. Hier scheint die Verwendung von einfachen Kontrollstrukturen den Entwicklern zu helfen, Fehler zu vermeiden: Die Fehlerrate sinkt im Vergleich
zum einfachen Assembler-Code. Abbildung 4 verdeutlicht dies: Unabhängig
davon, wie viele Zeilen Code in dem Softwareprojekt geändert wurden, blieb
die Fehlerrate der Module, die in Columbus-Assembler geschrieben wurden,
unter der für den einfachen Assembler-Code.
6.3
6.3.1
NASA
Verschiedene Fehlertypen
Beim NASA- Projekt wurde auch die Art des Fehlers erfasst und ausgewertet.
12% der entdeckten Fehler waren dabei Schreibfehler (z.B. falsch geschriebene
Bezeichner). Ebenso erwähnenswert ist die Tatsache, dass allein 6% der
Fehler auf das falsche Korrigieren vorheriger Fehler zurückzuführen waren.
Anscheinend wurde bei der Fehlerkorrektur nicht genug Sorgfalt an den Tag
gelegt oder andere Gründe, die schon in Kapitel 5.3 angesprochen wurden (z.B. fehlende Kenntnis der Programmarbeitsweise), führten zu diesem
Ergebnis.
Methoden der empirischen Softwaretechnik
201
Experimente: Allgemein
Figure 4: Anzahl der veränderten Codezeilen(DLOC) gegen die Fehlerrate
im Siemens-Projekt Quelle: [5]
Nimmt man nun diese beiden Fehlertypen aus der Betrachtung heraus, wurden folgenden Fehlerklassen gewählt:
• Anforderungen falsch oder missverstanden
• Funktionale Spezifikation falsch oder missverstanden
• Designfehler, der mehrere Komponenten betrifft
• Design- oder Implementierungsfehler, der nur eine Komponente betrifft
• Externe Umgebung falsch beachtet
• Fehler, der die falsche Benutzung der Programmiersprache bzw. des
Compilers betrifft
Wie man nun in Abbildung 5 sehen kann, machen Fehler in den Anforderungen und vor allem in der formalen Spezifikation den Großteil der
Fehler aus. Wenn man die Schreibfehler aus der Betrachtung herausnimmt,
sind 63% der Gesamtfehlerzahl solche Fehler. Auch hier wird wieder
deutlich, wie wichtig eine korrekte und vollständige formale Spezifikation
eines Softwareprodukts ausmacht. Wer in dieser frühen Phase der Softwareentwicklung spart, handelt sich mit hoher Wahrscheinlichkeit später
besonders hohen Aufwand und damit Kosten zur Fehlerbeseitigung ein.
Dieser Umstand kann das komplette Entwicklungsprojekt unter Umständen
202
Methoden der empirischen Softwaretechnik
6 Nicht vergleichbare Ergebnisse einzelner Studien
Figure 5: Aufschlüsselung der Fehlerursachen im NASA- Projekt
Quelle: [1]
sogar komplett scheitern lassen.
6.3.2
Aufwand zur Fehlerbeseitigung
Außerdem wurde noch der Aufwand zur Fehlerbeseitigung in der Studie
untersucht. Wie in Kapitel 5.3 schon angedeutet, ist der Aufwand bei
wiederverwendeten Modulen größer: Wie Abbildung 6 zeigt, ging ein
Großteil der Berichte über Fehler, deren Beseitigung zwischen einem und
drei Tage dauern, auf Kosten von wiederverwendeten Modulen (15 zu 3%).
Berichte über Fehler, deren Beseitigung sogar mehr als drei Tage dauert,
verteilen sich ungefähr gleich auf wiederverwendete und neue Module (12
zu 15%). Die möglichen Schlussfolgerungen zur Wiederverwendung von
Modulen wurden schon in Kapitel 5.3 diskutiert.
6.3.3
Einteilung der Fehler in abstrakte Klassen
Die Autoren der NASA- Studie teilten alle Module in verschiedene abstrakte
Klassen ein:
Methoden der empirischen Softwaretechnik
203
Experimente: Allgemein
Figure 6: Fehlerbeseitigungsaufwand Quelle: [1]
• Initialisierung
• Kontrollstruktur
• Interface
• Daten
• Berechnung
Nun untersuchten sie, in welchen Modulklassen die meisten Fehler auftraten.
Dabei unterschieden sie zwischen neuentwickelten und modifizierten7 Modulen und teilten auch die Fehler nochmal folgendermaßen auf:
Eingabefehler Diese Fehler resultieren aus einer vorhanden falschen ausführbaren Anweisung. Ein solcher Fehler wäre z.B. A = B * C, wobei
das ’*’ ein ’+’ hätte sein müssen. Der Operator existiert also, ist aber
falsch.
Auslassungsfehler Diese Fehler ergeben sich, wenn ein Element überhaupt
nicht vorhanden ist, obwohl es für den korrekten Programmablauf
vorhanden sein müsste. Ein Beispiel für einen solchen Fehler wäre
die Anweisung A = B, obwohl es richtigerweise A = B + C hätte heißen
müssen. Ein weiteres Beispiel ist das Auslassen vergessener Parameter
bei einem Funktionsaufruf.
7
204
”Modifiziert” ist in diesem Fall gleichbedeutend mit ”wiederverwendet”.
Methoden der empirischen Softwaretechnik
6 Nicht vergleichbare Ergebnisse einzelner Studien
Eingabefehler Auslassungsfehler
Summe
neu
mod.
neu
mod.
neu mod. Summe
Initialisierung
2
9
5
9
7
18
25(11%)
Kontrollstr.
12
2
16
6
25
8
36(16%)
Interface
23
31
27
6
50
37
87(39%)
Daten
10
17
1
3
11
20
31(14%)
Berechnung
16
21
3
3
19
24
43(19%)
28%
36%
23%
12%
115 107
222
64%
35%
Table 4: Fehlerverteilung in einzelnen Modulklassen Quelle: [1]
Wie man nun Tabelle 4 entnehmen kann, scheinen Interfaces besonders
fehleranfällig zu sein, unabhängig davon, ob es sich um neugeschriebene
oder wiederverwendete Module handelt. Kontrollstrukturen sind in neueren
Modulen eher fehlerhaft. Das könnte nach Meinung der Autoren daran
liegen, dass in die alten Module schon mehr Test- und Debug- Zeit investiert
wurde. Andererseits enthalten wiederverwendete Module überdurchschnittlich viele Fehler in der Inititialisierung und in den Datenstrukturen. Ein
Grund dafür könnte sein, dass diese Module für ihren neuen Zweck noch
nicht richtig angepasst worden sind. Anpassungen an neue Aufgaben sind
meist in den Datenstrukturen und weniger in den Kontrollstrukturen nötig.
Außerdem müssen in wiederverwendeten Modulen eher Anweisungen verändert als hinzugefügt werden, was die geringere Anzahl an Auslassungsfehlern
erklären könnte.
Aus diesen Erkenntnissen könnte man nun Regeln für das Testen und Debugging von Modulen aufstellen. Leider fehlen hier die Bestätigungen durch
andere Studien.
6.4
6.4.1
Ericsson Telecom
Anteil der fehlerhaften Module am Gesamtsystem
Wie nun schon ausführlich behandelt, enthalten relativ wenige Module einen
sehr hohen Anteil an Fehlern (siehe Kapitel 5.1). Eine Erklärung dafür
könnte sein, dass diese wenigen Module besonders groß sind und somit zwar
die Anzahl der Module mit vielen Fehlern klein ist, nicht aber die Anzahl der
Codezeilen. Dagegen spricht die Tatsache, dass die Fehlerrate in größeren
Modulen nicht unbedingt ansteigt(siehe Kapitel 5.2). Trotzdem könnten ja
Module so groß sein, dass sich die hohe Anzahl der Fehler doch auf sehr viel
Methoden der empirischen Softwaretechnik
205
Experimente: Allgemein
Codezeilen verteilt.
Deswegen haben die Autoren der Ericsson Telecom- Studie untersucht, wie
groß der Anteil der fehlerhaften Module an der Gesamtgröße des Systems
ist: Sie betrachteten dabei zwei releases des gleichen Softwareprodukts.
Beim ersten release machten die fehlerhaften Module nur 12% der Größe des
Gesamtsystems aus. Beim zweiten release befanden sich 60% der Fehler in
Modulen, die nur 6% des Gesamtsystems ausmachten. Weiterhin machten
Module, die 78% der Gesamtfehler enthielten, nur 10% des Gesamtprodukts
aus. Damit ist gezeigt, dass der Großteil der Fehler sich in relativ wenigen
Programmzeilen befindet.
6.4.2
Stabilität der Fehlerraten im Softwarezyklus
Da der Studie Daten für zwei aufeinanderfolgende releases zur Verfügung
standen, konnten die Fehlerraten der einzelnen Entwicklungs- und Betriebsphasen miteinander verglichen werden. Dabei wurden die Phasen folgendermaßen aufgeteilt:
• Funktionstest (FT)
• Systemtest (ST)
• Systemintegration (SI)
• Programmbetrieb (OP)
FT ST
SI
OP
Release 1 3,49 2,60 0,07 0,20
Release 2 4,15 1,82 0,53 0,20
Table 5: Fehlerraten in den vier Test- und Betriebsphasen Quelle: [4]
Wie man der Tabelle 5 entnehmen kann, sind die Fehlerraten bei beiden
releases relativ vergleichbar. Nur die Systemintegration fällt etwas aus dem
Rahmen. Trotzdem kann man wohl sagen, dass der Entwicklungsprozess
bezüglich der Fehlerrate stabil ist.
206
Methoden der empirischen Softwaretechnik
6 Nicht vergleichbare Ergebnisse einzelner Studien
6.5
Pighin&Marzona
Diese Studie benutzt zwei Klassen von Dateien8 , die auf diese Weise von
anderen Studien nicht definiert wurden. Somit sind auch die Ergebnisse, die
sich aus dieser Definition ergeben, nicht mit anderen vergleichbar.
Heavy Files(HF) Für die Bestimmung der heavy files werden die Dateien
nach enthaltener Fehlerzahl absteigend geordnet. Alle Dateien, die in
dieser Rangfolge hinzugenommen werden müssen, damit die Hälfte der
Gesamtfehlerzahl in dem Softwareprodukt erreicht wird, werden zu der
Menge der heavy files gezählt.
Faulty Files(FF) Wie schon in Kapitel 5.4 erwähnt, sind dies jene Dateien,
deren Fehleranzahl größer ist als ein Drittel der durchschnittlichen
Fehleranzahl im gesamten Softwareprodukt.
Mit diesen zwei Definitionen kann man nun die Fehlerberichte gezielt
auswerten und kann die in Tabelle 6 dargestellten Ergebnisse errechnen.
Anteil
Anteil
Anteil
Anteil
Anteil
Anteil
heavy files
heavy files
heavy files
faulty files
faulty files
faulty files
Softwareprodukt
1
2
am Gesamtprodukt
12,5% 18,8%
an der Menge der Files mit mind. 1 Fehler 19,0% 22,0%
an der Menge der faulty files
31,5% 65,8%
am Gesamtprodukt
07,9% 15,1%
an der Menge der Files mit mind. 1 Fehler 12,0% 17,7%
an der Menge der heavy files
20,0% 52,9%
Table 6: Beziehung zwischen faulty files und heavy files Quelle: [6]
Diese Tabelle zeigt, dass es einen gewissen Zusammenhang zwischen den
beiden Definitionen zu geben scheint: Der Anteil der heavy files an der Menge
der faulty files ist bedeutend höher als der am Gesamtprodukt. Daraus könnte man schließen, dass faulty files tendenziell dazu neigen, zu heavy files des
Softwareprodukts zu werden.
So interessant diese Ergebnisse auch sein mögen, sind sie weiterhin mit Vorsicht zu betrachten, da noch keine andere Studie bekannt ist, die die gleichen
Klassendefinitionen verwendet und diese speziellen Ergebnisse auf anderen
Softwaresystemen bestätigt, so dass sie verallgemeinert werden könnten.
8
”Datei” ist in diesem Zusammenhang gleichbedeutend mit ”Modul”.
Methoden der empirischen Softwaretechnik
207
Experimente: Allgemein
6.6
Ericsson Norway
Wie auch bei der AT&T- Studie (siehe Kapitel 6.1) wurde auch hier die
Schwere des Fehlers erfasst. Leider sind die Skalen nicht vergleichbar, bei der
AT&T- Studie ging sie von 1(kritisch) bis 5(kosmetisch), hier geht sie von
A(schwer) bis C(leicht). Außerdem wird noch zwischen wiederverwendeten
und neuentwickelten Modulen unterschieden. Die Ergebnisse kann man in
Tabelle 7 ablesen.
Schwere
A
B
C
Summe
Wiederverwendet Neuentwickelt Gesamtprozent
160
167
31%
226
261
55%
49
98
14%
435
626
100%
Table 7: Schwere der einzelnen Fehler beim Ericsson Norway- Projekt
Quelle: [7]
Wie man erkennen kann, werden auch hier die meisten Fehler als ”mittelschwer” eingestuft. Der Erwartungswert für Fehler der Schwere A in den
wiederverwendeten Modulen beträgt 134,85, der für die neuentwickelten 190.
Daraus kann man erkennen, dass mehr schwere Fehler bei wiederverwendeten Modulen gemeldet wurden als erwartet. Bei neuentwickelten Modulen
verhält es sich genau andersherum. Als Ergebnis kann man festhalten, dass
wiederverwendete Module dazu tendieren, mehr schwere Fehler zu enthalten
als neuentwickelte.
Gründe für dieses Phänomen sind schwer zu ermitteln. Intuitiv würde man
sagen, dass wiederverwendete Module schon besser getestet sind und sich nur
noch eher mittelschwere Fehler einschleichen. Da dieses Ergebnis noch nicht
durch andere Studien bestätigt wurden, kann es sein, dass es projektspezifisch
ist und nicht verallgemeinert werden kann.
7
Fazit
Obwohl auf dem Gebiet der empirischen Fehleranalyse schon lange geforscht
wird (die älteste Studie ist jetzt schon mehr als 21 Jahre alt9 ), sind auch die
neueren Studien in ihren Ergebnissen nicht sehr überzeugend. Das ist besonders bei der Ericcson Norway- Studie zu sehen: Fünf der zehn aufgestellten
Thesen werden nach der Datenanalyse als ”nicht zurückgewiesen” betrachtet,
9
208
Die NASA-Studie [1] stammt aus dem Jahre 1984.
Methoden der empirischen Softwaretechnik
7 Fazit
d.h. bei der Hälfte der Hypothesen konnte keine eindeutige Aussage über ihre
Richtigkeit erzielt werden. Es existieren einfach zu wenige Studien auf diesem
Gebiet und es haben sich noch keine einheitlichen Richtlinien und Metriken
zur Durchführung und Analyse der Studien herauskristallisiert. Das und die
Tatsache, dass interessante Hypothesen von jedem Autor leicht umformuliert
bzw. geändert werden, machen die einzelnen wissenschaftlichen Arbeiten
schwer vergleichbar.
Es gibt zwar teilweise interessante Ergebnisse in den einzelnen Studien(siehe
Kapitel 6). Dort wurden aber teilweise so unterschiedliche Fehlerklassen
und Analysemethoden eingesetzt, dass eine Verallgemeinerung auf alle Softwaresysteme schwer möglich ist. Dazu müssten andere Studien diese
speziellen Analysen auch einsetzen und bestätigen bzw. widerlegen.
Nun stellt sich die Frage, wieso so wenige Studien auf dem Gebiet der Fehleranalyse existieren. Das erste und vielleicht größte Problem ist sicherlich,
verlässliche Fehlerdaten über ein großes Softwareprojekt zu erhalten. Das
Schreiben von ausführlichen Fehlerberichten ist zeit- und somit kostenintensiv. Automatische Datenerhebung mit Hilfe von Logfiles oder Content
Management- Systemen setzt voraus, dass die benutzten Tools diese Auswertung auch unterstützen, z.B. dass sie zwischen Fehlern und anderen Änderungen des Quellcodes (z.B. Implementierungen neuer Funktionen) unterscheiden können. Ein besonders wichtiger Faktor, der Testaufwand für ein
Modul, wird von keiner der hier betrachteten Studien untersucht. Solche
Daten standen einfach nicht zur Verfügung. Erschwerend kommt hinzu, dass
anscheinend wenige Firmen Interesse daran haben, Fehlerdaten ihrer Softwareprojekte mit Wissenschaftlern zu teilen.
Zweitens müssen die erhobenen Daten analysiert und bestenfalls verlässliche
Modelle für die Voraussage von fehlerträchtigen Modulen gefunden werden.
Dies scheint bisher nur teilweise gelungen. Selbst wenn solche Modelle entwickelt worden sind, müssen sie in der Praxis angewendet werden. Dies ist
definitiv noch nicht eingetreten.
Zu den verlässlichen Aussagen, die von allen Studien bestätigt wurden, gehört
die Pareto- Verteilung der Fehler in einem Softwareprojekt. Wie man nun
aber diese besonders fehlerbehafteten Module im konkreten Fall vorhersagen
kann und ob dies überhaupt möglich ist, bleibt weiter relativ offen. Einzig die
Nachhaltigkeit von fehlerhaften Modulen aufeinanderfolgender Softwareversionen kann als anerkannte und halbwegs verlässliche Voraussage angesehen
werden. Alle anderen Hypothesen konnten entweder nicht bestätigt, aber
auch nicht widerlegt werden oder es gab in verschiedenen Studien unterschiedliche Ergebnisse.
In Zukunft müssten sich also konkrete Analysetechniken und Metriken durchsetzen und anhand dieser normierten Methoden einheitliche Hypothesen in
Methoden der empirischen Softwaretechnik
209
Experimente: Allgemein
möglichst vielen, unterschiedlichen Softwareumgebungen (evtl. noch mit verschiedenen Programmiersprachen) empirisch ausgewertet werden. Dann könnte man vielleicht endlich verlässliche Aussagen treffen, wo sich die meisten
Fehler mit hoher Wahrscheinlichkeit befinden.
References
[1] V.R. Basili and B.T. Perricone. Software Errors and Complexity:
An Empirical Investigation. Communications of the ACM, Vol
27, No 1, Jan 1984, pp. 42-52
[2] T.J. Ostrand and E.J. Weyuker. The Distribution of Faults in
a Large Industrial Software System. In Proceedings of the 2002
ACM SIGSOFT international Symposium on Software Testing
and Analysis (Roma, Italy, July 22 - 24, 2002). ISSTA ’02. ACM
Press, New York, NY, pp 55-64.
[3] Elaine Weyuker, R. Bell and T. Ostrand. Challenges in Predicting the Location of Faults in Large Software Systems.
IEEE/Proc. Workshop on Predictive Software Models (PSM04)
September, 2004.
[4] N.E. Fenton and N. Ohlsson. Quantitative Analysis of Faults and
Failures in a Complex Software System. IEEE Trans. on Software
Engineering, Vol 26, No 7, Jul 2000, pp. 653-661.
[5] K.-H. Möller and D.J. Paulish. An Empirical Investigation of
Software Fault Distribution. Proceedings of IEEE First International Software Metrics Symposium, Baltimore, Md., May 21-22,
1993, pp. 82-90
[6] M. Pighin and A. Marzona. An Empirical Analysis of Fault Persistence Through Software Releases. Proceedings of the 2003 International Symposium on Empirical Software Engineering. p.
206
[7] P. Mohagheghi, R. Conradi, O.M. Killi, H. Schwarz. An Empirical Study of Software Reuse vs. Defect-Density and Stability.
Proc. of the International Conference on Software Engineering
(ICSE’04), Edinburgh, Scotland, UK, 23-28 May 2004, pp.282292.
210
Methoden der empirischen Softwaretechnik
References
[8] P. Steffens. Geschäftserfolg in der Software-Branche hängt
von Menschen und Methoden ab. http://www.innovationsreport.de/html/berichte/informationstechnologie/bericht14924.html. Besucht am 02. Januar 2006
Methoden der empirischen Softwaretechnik
211
Documentation and Source Code
Reading
An analysis of different source code readers
Anbalagan Sonaimuthu
Keywords: Documentation, Source Code reading, Object-oriented technology,
experimentation,Object Oriented Reading Techniques (OORTs), Perspectivebased Reading
Abstract
With the increase in the popularity of software, the need for quality also increases. This is the driving force for the software engineering researchers to investigate technologies that could aid in improving
quality. Software inspections have become or are becoming an important part of the quality assurance effort for software products in
many cases. Inspections are a process whereby software artifacts are
examined by a group of inspectors to ensure that they meet some set
of quality constraints. Inspection is also used to uncover defects in
the artifact. In this paper I have tried to study different inspection
or reading techniques available. Basically I will concentrate on the
following reading technologies that are commonly used.
1. Inspections
2. Scenario Based Reading
3. Perspective Based Reading (PBR)
4. Object Oriented Reading Techniques
5. Defect Based Reading
6. Use-case Based Reading
7. Scope Based Reading
Experimente: Allgemein
The overall goal of this work is to provide an overview of different reader, classify them, throw some light on different experiment
conducted in this field and finally draw some general conclusion from
them.
1
Introduction
With the increase in the popularity of software, the need for quality also increases. This is the driving force for the software engineering researchers to
investigate technologies that can aid in improving quality. Software inspections have become or are becoming an important part of the quality assurance
effort for software products in many cases. Inspections are a process whereby
software artifacts are examined by a group of inspectors to ensure that they
meet some set of quality constraints. Inspection is also used to uncover defects in the artifact. It is spread into various industrial settings shows the
perceived usefulness of this technology. Earlier, inspection work focused on
improving the quality of the code using inspections, now researchers have expanded inspections, so apart from code, they also cover requirement, design,
test plans and user interfaces.
Before inspections there was the idea of a walkthrough. The walkthrough
could range from simple peer review on one extreme and a formal inspection
of the type we are discussing here on the other extreme. Walkthrough are less
formal and are applied differently in each of the settings, hence the problems
with using walkthroughs is that the number of data collected is usually very
small. The efficiency of defect detection is also quite variable due to this.
Each project environment and product is different in some way or in
other words we can say that they are unique. The application of techniques
and methods on different projects should be expected to vary due to this.
Software development organization differs in many dimensions, for example,
the application domain can vary from entertainment software to educational
software to military support software, or it can be the level of risk inherent in
the project, in some cases, the failure may mean only a little inconvenience,
while with other mission critical applications, it could mean loss of life or
very heavy monitory loss. Though there are some standard methods and
practices for performing inspections, in many cases these methods may need
some variation in some way or the other depending on the application.
214
Methoden der empirischen Softwaretechnik
3 Families of Reading Techniques
2
Reading Scenarios
Software development basically has to generate systems that takes care and
satisfies the user’s needs.There are various documents associated with the
software development like requirement analysis, code and testing plans etc.
During the developmental life cycle these document often require continual
review and modification. In order to verify and validate the software artifacts,
reading is a key activity. In order to remove defects during development,
methods like inspections [8] are considered very effective, inspections rely on
effective reading techniques for success.
As soon as the documents are written we can perform reading, this can be
performed on all documents associated with the software process. Methods
like inspections walk-throughs, reviews etc assume that the given document
can be read effectively, but techniques for reading particular document, such
as test-plans or requirement documents do not exist. In some cases where
the techniques exist, they are seldom taught or practiced.
Reading can be performed on all documents associated with the software
process and can be applied as soon as the documents are written. Most efforts have been associated with methods that simply assume that the given
document can be read effectively (e.g., inspections, walk-throughs, reviews),
but techniques for reading particular documents, such as requirements documents or test plans are still under research.
3
3.1
Families of Reading Techniques
Inspections
There are a wide range of fields which use inspection, this concept is not
unique to software engineering. Depending on the setting, the goal of these
inspection defers. The general goal is to ensure that the artifact is of the
expected quality to be used by the customers of that document. For example
a marketing person have their requirement analysis inspected for feasibility
before passing them along to the prototype development team of an organization. Similarly, software development teams get their software artifacts
inspected before passing along to the next phase of the life cycle.
The concept of inspection was introduced by Fagan [8], since then many
variation has emerged. The main idea behind inspection as defined by Fagan
was that, after completion of a software artifact like requirement document,
design or code, it is submitted for inspection. An inspection consists of multiple steps. Firs of all an inspection team is selected by the inspection leader.
This team is given responsibility of inspecting the document is distributed
Methoden der empirischen Softwaretechnik
215
Experimente: Allgemein
among these team members. The author of the document provides a contextual information of the document to the team members. The team member
then spends individual time on the document by reading it and get familiar
with it. The inspection leader calls for a second meeting once all of the inspector become familiar with the document. In this meeting the document
is read through and defects are detected by the inspectors, these defects are
collected in a form of list and it is returned to the author. The author finally
either fixes these defects or convinces the inspector about why this is not a
defect.
Many minor changes where suggested and implemented on inspection
since the initial definition by Fagan. Structural change of the meeting, number of meeting participants, elimination of the meetings etc. where some of
the changes that were suggested to the basic inspection process. The overall
goal still remained the same, which is to critically examine a software artifact
to uncover defects that may be present so that those defects are removed before the document is ready to be used by its customer or it is ready to be sent
to the next phase of the software life-cycle. There are many techniques that
has been proposed to improve the inspection meetings, some work has also
been done in helping the inspectors when performing the individual stage of
the inspection. Two such techniques are Perspective Based Reading (PBR)
for the inspection of requirement document and Object Oriented Reading
Techniques (OORTs) for inspection of object oriented design. These techniques will be discussed in section 3.3. and 3.4 respectively.
3.2
Scenario-Based Reading
Software development and analysis techniques need to be well defined, it is
supposed to be context dependent and goal-oriented, and it should demonstrate effectiveness for purpose. The following goals are established for defining reading techniques:
• Flexibility: The technique should be flexible as per the project and
environmental characteristics. For example if the problem domain
changes, the reading technique should also change.
• Reusability: The technique should be reusable, which could be repeated by others. It should be detailed, such that it provides the reader
with a well-defined process.
• Goal Oriented:The technique should be goal oriented, it should see
to it that each reader has a particular purpose or goal for reading the
216
Methoden der empirischen Softwaretechnik
3 Families of Reading Techniques
document and the procedure should support that goal. The procedure
can vary from project to project.
• Modularity: The technique should be modular, in such a way that a
particular technique provides a particular coverage of a document and
a combination of different technique provides the coverage to the entire
document.
To determine if and when the technique is most effective, the technique
is studied empirically. In the study, a set of techniques are defined, which is
called proactive process-driven scenarios, it is in the form of algorithms that
readers can apply to traverse the document with a particular emphasis. The
scenarios should fit into the appropriate developmental phase and notation.
It should be associated with the particular document like test plan and the
notation in which the document is written like English text. Several scenarios
must be combined to provide complete coverage of the document as they are
focused, detailed and specific to a particular emphasis or viewpoint.
In their paper [3] the authors have defined an approach to generate a
family of reading techniques based upon operational scenarios as illustrated
in figure 1. In an operational scenario it is required that the reader creates
a model of the product first, and later he answers the questions based on
analyzing the model with a particular emphasis. The types of question and
choice of abstraction will depend on the scenarios like the problem history of
the organization or the goals of the organization in large and the document
that is being read in particular.
Figure 1: Building focused reading technique
Perspective Based Reading and Defect based reading are two different
families of scenario-based reading techniques for requirement documents. In
the following subsections we will have a look at these two reading technologies.
Methoden der empirischen Softwaretechnik
217
Experimente: Allgemein
3.3
Perspective Based Reading (PBR)
Generic inspection procedure does not help the individual reader in the
preparing for the inspection meeting. A technique called Perspective Based
Reading (PBR) was developed by Basili [5] in 1996 for helping the readers
to perform the individual inspections for requirement. This technique was
based on the fact that throughout the software life cycle there are various
“customers” of the requirement document. The individual inspector is provided with a specific view of the perspective from which the review of the
requirements document is done in such a way that all of these customers were
represented in the review team. The idea is that if different reviewers are
provided with specific view or perspective from which they review the document, then we can achieve a much better coverage of the whole document
when we put together all of them.
In their paper [5] they had defined initial perspectives that are tester, user
and designer. For each perspective, a high level abstraction of the software
artifact is created by the inspector, in the same manner as that the customer
would usually create. The inspector will uncover defects in the process of
creating that software artifact. For example, when the inspector is using the
designer’s perspective, he creates a design plan for the requirements. If there
is a requirement that is not defined in such a way that a design plan can be
created, then the inspector comes across a defect that is uncovered.
As an example, let us consider the procedure for test-based perspective,
when the reader is applying it to a requirement specification document, which
could be as follows:
Reading Procedure: Make up a test or a series of tests for each and
every requirement, which will allow to ensure that the implementation satisfies the requirement. The test suite should be made using the standard test
approach and test criteria. The test suit should be made in such a way that
the following questions are answered:
1. Is all the necessary information available to identify the item being
tested and to identify the test criteria? Based upon the criteria, is it
possible to make up reasonable test case for each of the items?
2. Do we get any contradictory result with another requirement for which
we generate a similar test case?
3. Do we always get a correct value in the correct unit with the test case
we generated?
4. Based on the way the requirement is defined, are there other interpretations of this requirement that the implementor might make? Will
218
Methoden der empirischen Softwaretechnik
3 Families of Reading Techniques
this effect the test that has been made up?
5. Is there any co-relation between what we know about the application
and what is specified in the general description, does the requirement
make any sense?
The points listed above are the five example questions which could be
used as the basis by the test-based reader to review the document.
3.4
Defect Based Reading
Researches have developed defect classification schemes, in order to understand the types of defects that occur in the software artifacts better. A
properly specified defect classification schemes can be useful for comparisons
across studies and environment and also for repeatability. Here an attempt
is made to group the defect into classes as per the environment in which
they occur. In the coming subsections we will discuss the classification of
defects and the work done to classify them. In every case, what the defect
classifications will look like will depend on the reason for what the organization classifies. The goals of the organization greatly influence the scope
and specificity of the classification described below. After the related work
is discussed, defect based reading will be described.
3.4.1
Defect Classification Schemes
In order to measure their process with the intent of improving, the organization must classify the defects that are found using it. So the idea of grouping
defects into classes is not a new one, it has been extensively used in fields
other than computer science, like in industry. It can be either a simple classification like only 2 classes namely, major and minor or it can be something
quite elaborate. As described in the previous subsection, the defect classification will highly depend on the reason for which the organization wants
to classify the defect. This classification also depends on the phase of the
software life cycle in which the inspection is going to take place.
So depending on their local environment, many different defect classification schemes have been proposed by researchers. From these classifications,
some are useful for the documents produced throughout the software life
cycle, and others are more specific and they are useful at the documents
from a specific life cycle phase. These classification are mostly with defect
in requirement documents or defects in source code, some classification also
deals specifically with the defect in design documents. The following example
throws some light on the defect classification scheme for requirements.
Methoden der empirischen Softwaretechnik
219
Experimente: Allgemein
3.4.2
Defect Classification Schemes for Requirement
The study of the evaluation of a requirements document for the on-board
operational flight programm for A-7 aircraft was described in [4] by the authors, which is a complex real time program. They were actual defects which
evolved along with the evolution of the document. A one level classification
scheme with 7 categories was defined by the author. Here the classes were
used to make hypothesis about the commonly made defects.
Clerical - Problems in the documents like typing mistakes, which are relatively quite simple.
Ambiguity - The documents may have more than one meaning which leads
to ambiguity.
Omission - Some facts and figures have been omitted in the document.
Inconsistency - There is inconsistency between two parts of the document.
Incorrect Fact - There is some incorrect fact in the document with respect
to the domain.
Information Put in Wrong Section - Right information is placed in the
wrong section, which may lead to defect.
Implementation Fact not included - Complete information is not given,
some of the information or facts are not included.
Other - The defects which do not fall into any of the above classes.
As we could see in the above subsection, Defect Based Reading focuses
on the defect detection in requirements, or defect detection in source code or
design. The requirement or design is expressed using a state machine notation
called SCR. It is based on different missing classes like ambiguity or omission
or missing functionality etc which we saw in the previous subsection. Defect
based reading was defined for reading documents written in SCR style [10]
which is a formal notion for event-driven process control system and it focuses
of different defect classes as described in the previous subsection. Here three
different scenarios are created which are
1. Data type consistency
2. safety properties
3. ambiguity/missing information
220
Methoden der empirischen Softwaretechnik
3 Families of Reading Techniques
An experimental study [4] was done to analyze the defect-based reading, ad
hoc reading and checklist-based reading to evaluate and compare them with
respect to their effect on defect detection rates. The major results which
were found out from this experiment were.
1. There was an improvement of 35% in the performance of scenario based
reading as compared to ad hoc and checklist based readers.
2. Scenarios not only helped reviewers focus on specific defect classes but
also they were more effective at detecting other defects.
3. The effectiveness of checklist and ad hoc based reading was almost the
same.
In order to guide the reader, the defects are categorized and characterized
into a set of questions developed for each defect class.
3.5
Object Oriented Reading Techniques (OORTs)
The primary usage of software inspection in general and scenario-based or
perspective-based inspector in particular, has been in connection with textual artifacts resulting from conventional structured programming methods
like requirements documents or code modules. During its evolution in the
beginning less work had been done in the inspection methods to be used in
graphical form of object oriented artifacts. There are two reason for this.
First is that over the past decade object-oriented development methods replaced conventional structured programming methods as the embodiment of
software development, they are now the approach of choice in most new software development projects. So the inspection methods that are more and
more relevant to the conventional structured methods will become obsolete
as more and more of these methods are surpassed. Second reason is that
though the many beneficial features of object oriented technology, low defect
density is not one of the strong point of this technology. Some empirical studies has even shown that object-oriented artifacts are more error prone than
functional artifacts. One of the reason for this is the lack of comprehensive
reading techniques for inspection in most of the leading object-oriented development. Object oriented methods therefore would benefit quite enormously
with the availability of such techniques. A systematic viewpoint-based inspection approach like perspective-based inspection approach offers a very
good way of accommodating the complexity of object-oriented systems.
As described in the section about PBR, in order to perform the individual
inspection for the object oriented design, the inspectors has to be provided
Methoden der empirischen Softwaretechnik
221
Experimente: Allgemein
with guidance. Since the requirement and design are actually different representation of the same goal, to see to it that all the system is captured from
the requirement in a consistent way should be the overall goal of the system.
To do this there are two different types of techniques which could be used
namely, horizontal technique and vertical technique. Horizontal technique ensure that the design is internally consistent, so they are the techniques which
are used to compare two different design documents. The vertical technique
is used to ensure that not only the design is consistent with itself but also
it does correctly capture the requirement, hence they are used to compare
the design document back to the requirement and the use cases. For example, there may be the case that the inspector finds that some functionality
described in the requirements does not appear anywhere in the design.
Figure 2: Reading Techniques for Object Oriented Design [14]
Abstraction and Use are the two important models of an Object Oriented
based reading. A model of abstraction is the model of the important information in an artifact and how these information are interrelated and organized.
The model of abstraction are very easy to identify at high level for an Object
Oriented design (as shown in figure 2). The information is described in separate models or diagrams like state machines, class diagrams or interaction
diagrams etc. The model of Use describes the usage of the information in
the artifact to detect the defects. It describes how we use the information.
Also the reviewer should have a general domain knowledge to have a better
understanding of the system that is being built, and to decide weather the
model can be realized. While the general domain knowledge is necessary,
usage of other irrelevant information from other domains should be avoided
from appearing in the artifact since it can lead to ambiguity and hurt the
clarity of the artifact. All artifacts should be analyzed for its self-consistency,
and it should be made sure that it has only one interpretation of the final
system.
222
Methoden der empirischen Softwaretechnik
3 Families of Reading Techniques
3.6
Usability Based Reading
Usability or use-case based reading technique aims at checking wether each
object responds back correctly to all the possible ways in which it might be
used. It attempts to address the dynamic nature of Object Oriented systems. It verifies that the correct methods are being called with respect to
the use cases in which the object participates, similarly it also verifies that
the decisions and state changes made within each method are correct and
consistent. Here we basically decide a number of scenarios from the use-case
and examine how the class under inspection deals with these scenarios. We
discover the defects by noticing the erroneous state changes, missing methods, incorrect methods etc. This technique forces the inspector to consider
the context in which an object is used. This technique is applied by the inspector by taking each use-case in turn and device a series of brief scenarios
based on the preconditions, exception found in the use-case and success and
failure conditions. To guide the inspector throughout the interactions that
the scenarios have with the code under inspection, a sequence diagram is
used. Due to this the inspector :
• Has to become familiar with the code which is under inspection,
• He should be able to identify the state of the system that will make a
particular scenario to occur,
• As a result of the scenario, he should be able to identify the expected
change of state and outputs from the classes under inspection,
• By tracing the message calls between objects he should be able to follow
the scenario through the sequence diagram.
This technique is meant to be complementary to other reading approaches
since there is a possibility that some part of the class will not be checked due
to the reason that they are not involved in that particular use-case.
3.7
Scope-Based Reading (SBR)
Here we find a particular technique which allows the user to better understand
the document in order to use it in constructing another document. The
the idea is to use the reading technique for learning about Object-Oriented
framework in order to reuse it. There are two techniques which are developed
to do the above tasks, one is hierarchically based and the other one is example
based.
Methoden der empirischen Softwaretechnik
223
Experimente: Allgemein
4
The Data and Experiments
In this section we will discuss about the different experiments conducted to
test the effectiveness of the source code readers. A short overview of how the
experiment was conducted and a brief analysis of the data obtained in the
experiment immediately follows the overview.
4.1
4.1.1
Defect-Based Reading Experiment
Experiment at University of Maryland
Experiments were conducted at University of Maryland on defect-based reading study [4]. A comparison and evaluation was made between Defect-based
reading, ad-hoc reading and checklist based reading. Their effect on fault
detection effectiveness were evaluated and compared. In the study, a blocked
subject project was replicated twice in two semesters using 48 students of
University of Maryland. The experimental was done in two pass, on the first
pass there were more ad-hoc and checklist readers, many of them (not all)
where moved to the second pass for defect-based reading.
Results from the experiment: With this experiment they found out
that the performance of defect-based readers was much better than ad-hoc
and checklist readers. The defect based readers were not only able to focus
on specific fault classes but also they were effective in detecting other faults,
and finally the effectiveness of both checklist reading and ad hoc reading were
almost the same.
4.1.2
Real-time track control for railway companies
A variation of the traditional inspection was done by the authors in [12].
Here the author had investigated the benefits gained with the inspection
being performed on multiple independent inspections of same requirement
document instead of doing only one inspection. The document they studied
was for a “real-time track control for railway companies”. The author of the
document was an expert in the domain of railroad engineering, and so he
had made some actual defects during the creation of the document. Apart
from the defect made by him, some new defects were introduced by the
researchers to balance the number of different defect classes. There was
two high level classes with subclasses in each of these high level classes.
They wanted to find out wether the new inspection process affected on how
inspector performed in finding these classes of defects.
Missing or Incorrect Information
224
Methoden der empirischen Softwaretechnik
4 The Data and Experiments
Missing Functionality or Missing Feature There has been some omission of the
information describing internal behavior of the system
Missing Interface There has been omission of the information about how the
system communicates with the external interfaces i.e., objects outside
the system.
Missing Performance There has been some omission of performance specifications or it has been described in an untestable way.
Missing Environment There has been an omission of information about the
external hardware, software, databases or personnel which will be interacting with this system.
Wrong or Inconsistent Information
Ambiguous Information There in an ambiguity in the definition of an important term, it is either not defined at all or there are multiple interpretation of that term.
Inconsistent Information There is a contradiction between the two parts of the
same document.
4.1.3
Scenario-based reading on Cruise control system and water
level monitoring system
A study of scenario-based reading was done by authors Porter and Basili
[11]. Here each inspector executed a series of steps to discover a particular
class of defect. They were inspecting the domains of the requirements of
cruise control system and a water level monitoring system. They also had a
similar defect classification as done by the previous section by [12] which was
discussed above. In their experiment the authors were comparing the adhoc reading technique and checklist reading technique with the then newly
developed technique of scenario-based reading. They developed scenarios in
such a way that each scenario targeted a specific class of defect. Here just
like in the previous subsection, the defect classification was in two levels. The
first level was very abstract and the second one was more in detail and it was
more useful in the actual defect detection. Both these levels drew greatly
from the studies mentioned above. The author combined these classification
to fit to their environment.
Omission
1. Missing Functionality: There has been an omission in the information describing the desired internal operational behavior of the system
Methoden der empirischen Softwaretechnik
225
Experimente: Allgemein
2. Missing Performance: There had been an omission of information
describing the desired performance specification or it is described in
such a way that it is unacceptable for acceptance testing.
3. Missing Environment: There has been an omission of information
describing the required hardware, software, database, or personnel environment in which the system will run
4. Missing Interface: There has been an omission in the information
describing how the proposed system will interface and communicate
with objects outside the scope of the system
Commission
1. Ambiguous Information: There is ambiguity in the information provided, an important term, phrase or sentence which is essential to the
understanding of the system has either been left undefined or it is defined in such a way that can cause ambiguity.
2. Inconsistent Information: There is a contradiction in two or more
sentences, they either directly contradict with each other of they or
they express actions that cannot both be correct or cannot both be
carried out.
3. Incorrect or Extra Functionality: There are extra or incorrect
functionality which under specified conditions these sentence asserts a
fact that cannot be true.
4. Wrong Section: Some essential information are misplaced in the document.
Results from the above two experiments: In the above experiment
the authors where investigating a variation on the traditional inspection
methodologies. Firstly, instead of only one inspection being performed on the
requirement document, they tried to investigate the pros and cons of having
multiple and independent inspections for the same requirement document.
They found that multiple independent inspectors where able to perform significantly better than single inspector. Secondly with this experiment, they
proposed multiple level of classes for defect. With their work they tried to
demonstrate the feasibility of such reading technique and improving those
techniques based on the results of empirical studies.
226
Methoden der empirischen Softwaretechnik
5 Classification
4.2
Perspective-Based Reading Experiment
In their study on perspective-based reading [5] they evaluated and analyzed
perspective-based reading with respect to its effect on fault detection effectiveness in the context of the inspection team. They defined and studied
three types of perspective based reading techniques. They were tester-based,
designer-based, and user-based. The effectiveness of the perspective-based
reading was evaluated on both domain-specific and generic requirements documents. These documents had been constructed expressly so that the generic
portion could be replicated in a number of different environment and the
domain-specific part could be replaced in each new environment. This was
useful because it helped in improving the local to a particular environment
while they were easily able to combine the generic parts of multiple studies.
This experiment was done in two runs, based on the feedback from the
first run, they made some changes in the experimental design and did an
improved second run. In the first run they found it necessary to include
some more training sessions as the subjects were not completely familiar
with both the documents and the techniques involved in the experiment.
They allowed less time for each review of the document as they found out
that the subjects tended to tire in longer sessions. They also shortened some
of the documents so that they could reach a size that could be realistically be
expected to be checked in an experimental and time-constrained settings.By
making the above changes they had their second run.
Results from the experiment: The major result of this experiment
was that there was an improvement in time and individual scores when
perspective-based reading was applied to generic document. With this experiment they also showed that with perspective-based reading technique the
relative effort spent on fixing defects was better.
5
Classification
The evolution of the understanding on reading technologies is through empirical studies and experiments. Many different experimental designs have been
used to understand the insight into the effect of different types of reading
technologies, we had seen some of them in the previous section. The classification of reading families can be broadly divided into two spaces, namely, the
“Problem Space” and the “Solution Space”. The problem space models the
problems that can be addressed by reading and the solution space models the
specific solutions that has been provided to date for the particular problems.
A further specialization of each of the space is done as shown in the
rightmost column of the Figure 4. For example in the problem space a
Methoden der empirischen Softwaretechnik
227
Experimente: Allgemein
reading technology can be applied for analysis which is a general goal or
high level goal, this analysis is more specifically done for detecting defect
which is a specific goal in a design which is a document which are written in
the form of OO Diagram. Just like problem space, solution space is further
subdivided, here it consists of Reading Families and Reading Techniques as
shown in the lower rightmost part of the Figure 4. Each family is associated
with particular goal or document or software artifact. This is also associated
with the notion in which the document is written. Each technique within the
family is
1. Tailorable, depending on the project and environmental characteristics, these techniques could be tailored as per requirement.
2. Detailed, here it is well documented so that the reader has to follow
a well-defined set of steps.
3. Specific, the reader has a particular goal for reading the document
and the has procedures that support the goal.
4. Focused, the technique provides a particular coverage of the document
and combination of techniques provides the coverage for the entire document.
Construction and analysis activities are the integral part of the software
life cycle. For example, the testing phase is responsible for creating testplan document and also it is responsible for analysis of its quality. Since
both construction and analysis are two parts of the same phase, from the
analysis technologies we can learn about the construction technologies. So
the reading activity can be divided into “Reading for Analysis” and “Reading
for Construction” at high level goal. The next two subsection deals in detail
about these two parts of high level goal.
5.1
Reading for Analysis
Reading for analysis helps us to understand the type of defects that we make
and the nature and structure of the product, hence it is important for the
product quality. They attempt to answer the following question: “With the
given document how do I access the various qualities and characteristics?”
Reading for Analysis is quite useful in assessing the quality of the document
and also it can provide insights into better developmental practices and techniques. It can be applied to various documents throughout the life cycle of
the software.
228
Methoden der empirischen Softwaretechnik
5 Classification
There are different families of reading techniques which are collectively
know as scenario-based reading techniques. These techniques requires the
reader to create an abstraction of the product and based on that abstraction
of the product the reader is required to answer question with a particular
emphasis or the role that the reader assumes. Since there will be different
roles the reader assumes there will be different abstraction and question set,
and each reading technique can be based upon a different set of these abstraction and questions. The kind of document being read or the problem
and history of the organization or the goals of the organization decides the
type of question set and the choice of abstraction.
Figure 3: Reading Techniques for Analysis [2]
Figure 3 shows the Problem space and Solution space of the reading
for analysis part of the reading technique. In the solution space there are
different families of scenario based reading technique. The remaining part of
this subsection describes the different types of reading techniques. The first
type in the family is called defect based reading technique. This technique
focusses on a model of the requirement using a state machine notion. There
are different classes, and each model views are focused on specific class. Some
of these classes are data inconsistency, incorrect functions and ambiguity
or missing information. A set of question which is used in check-list for
evaluating the correctness and reliability of the requirement documents is
used to generate the analysis question.
Perspective based reading technique is another member of the family of
scenario-based reading technique. It focusses on the different product perMethoden der empirischen Softwaretechnik
229
Experimente: Allgemein
spective. For example reading from the perspective of a developer or the
end user or the tester or service engineer and hardware engineer etc. Various
kinds of requirement errors like omission, ambiguity, incorrect fact, inconsistency etc are the basis of generating the analysis question. The questions
thus developed can be used to discover these errors from the perspective of
the assumed reader of the document.
Another family of techniques which comes under scenario based reading
is Usability-based reading. This focuses on the usability of the software,
weather its an expert or a novice. The analysis questions are generated by
focusing predominately on the usability point of view of the system.
5.2
Reading for Construction
Reading for construction basically deals with what a system is capable of
doing, what a system does and what capabilities exists or do not exist in the
system. They attempt to answer the following question: ”With the given
existing system, how can I understand on how to use it as part of my new
system?”. It helps us in abstracting the important information in the system.
This is useful both in maintenance and building a new system using the
reusable components and architecture of the existing system.
Though Reusing an existing system or library increases quality and productivity it does not provide the default system behavior, it provides a
functionality at a low level and it forces the developer to provide the interconnections between the libraries. The reusability which is allowed by
object-oriented technology framework has to follow a pre-defined class hierarchy which the developers should strictly follow, also they have to follow
the framework of object interaction and thread of control framework by object oriented technology. Hence in a framework-based development there is
a learning curve so it has to be first learnt and then adapted to the specific
requirement of the application. It has been found that the effort of learning the framework and include a reusable class libraries is less than doing
it from the scratch. In the following two subsections we will discuss about
the two different types of this framework, namely, White-Box and Black-Box
framework.
5.2.1
White-Box Framework
A white-box framework is a set of interacting abstract classes that captures
the invariants in the problem domain. Here the source code of the class are
accessible to the programmer. Due to this it is possible for the programmer to
derive application-specific class from the base class through inheritance and
230
Methoden der empirischen Softwaretechnik
5 Classification
by completing or overriding their methods. To learning curve for a whitebox framework is same as that of its construction, since the user must have
a detailed framework knowledge of the codes involved.
There are two different reading techniques which are defined under whitebox framework to build a new application. They are (a) system-wide reading
technique and (b) task-oriented reading technique. Both techniques have
access to the same source of information and they both look at the run-time
behavior and static structure of the framework. They mainly differ from the
focus of the learning process. The system-wide technique focuses more on the
big picture than the detailed task to be completed, hence it covers the whole
system, and task-oriented technique focuses more on the details of individual
task of the system. Programmers attempt to gain a broad knowledge of the
framework design with the system-wide reading technique.
5.2.2
Black-Box Framework
A black-box framework on the contrary to the white-box framework, is customized by selecting parameterizing and configuring a set of components that
provide the application specific behavior. They allow an application to be
created by composing objects rather than programming. Here the programmer is not able to see the source code of the components, and the interface
between the components can be defined by protocol. Hence the user only
needs to understand the external interface of the components and does not
have to bother about the code of the component. This framework is considered easier than white-box framework since the programmer does not need
to look into the source code. A better documentation and training is a must
because developers cannot look into code to know what is going on.
The only experiment so far in testing the construction branch of the tree is
the study of scope-based reading. Unlike the analysis branch the hypotheses
here are related to finding a particular technique that allows the user to
better understand the document for use in constructing another document.
Methoden der empirischen Softwaretechnik
231
Experimente: Allgemein
Figure 4: Reading Techniques Classification [2]
Figure 4 shows the overall taxonomy of reading families that we had
discussed till now. The upper part of the tree (over the dashed horizontal
line) models the problems that can be addressed by reading.
6
Conclusion
In this report we tried to have an overview of the different techniques of
source code reading, also we had a classification of these source code readers.
We had a look at many experiments that were conducted on source code
readers at different Universities and research institutes. As we had seen
in the classification part, the reading could be done for construction or for
analysis of the document, and both of them co-exists.
We also had a look at the families of reading techniques that were used,
most of the work in reading has so far been focused on three main families of
reading techniques namely, perspective-based reading, defect-based reading
and scope based reading. As we could find from the experiments that were
conducted in these reading family one could derive that, each technique had
its own strength and weakness in terms of the faults they can help in uncovering. The effectiveness of the technique solely depend on the nature of the
programs to be more precise, the nature of faults in those programs. There
also seem to have the trace of fundamental weakness in each of the technique
when applied individually. A combination of these techniques showed general
improvement.
232
Methoden der empirischen Softwaretechnik
References
Finally these techniques are more formally defined and it has been proved
by experiments that they are very much effective than the simple walkthrough
or simple peer review and these techniques have evolved from the days of
structural programming to the current Object Oriented framework.
References
[1] Atkinson, C. and Laitenberger, O. Generalizing Perspective-based Inspection to handle Object- Oriented Development Artifacts. Fraunhofer
Institute for Experimental Software Engineering
[2] Basili, V. R. et al: Studies on Reading Techniques. Experimental Software Engineering Group, University of Maryland at College Park
[3] Basili, V. R. Evolving and Packaging Reading Techniques Through Experimentation. Experimental Software Engineering Group, University of
Maryland at College Park
[4] Basili, V. R., Porter, A., Votta, L. Comparing detection methods for
software requirements inspections: a replicated experiment. IEEE Transactions on Software Engineering, vol. 21, no. 6, 1995.
[5] Basili, V. R., Green. S., et.al: The empherical investigation of
Perspective-Based Reading, Empirical Software Engineering Journal, I.
[6] Briand et al. An Experimental Comparison of the Maintainability
of Object-Oriented and Structured Design Documents. IESE-Report
008.96/E, December 1996.
[7] Dunsmore, A. et al. Practical Code Inspection for Object Oriented Systems. Computer Science Department, Strathclyde University
[8] Fagan, M. Design and Code Inspections to Reduce Errors in Program
Development. IBM Systems Journal 15, 3 (1976): 182-211
[9] Foote, B. and Jonson, R. Designing Reusable Classes. Journal of ObjectOriented Programming June/July 1988
[10] Heninger, Kathryn L. 1980, Specifying Software Requirements for Complex Systems: New Techniques and Their Application. IEEE Transactions on Software Engineering SE-6: 2-13.
Methoden der empirischen Softwaretechnik
233
Experimente: Allgemein
[11] Porter, A., Votta, L. G. Jr. and Basili, V. R. 1995. Comparing Detection
Methods For Software Requirements Inspections: A Replicated Experiment. IEEE Transactions on Software Engineering, 21(6)
[12] Schneider, G., Martin J. 1992 An experimental study of fault detection in
user requirement documents. ACM Transaction Software Eng Methods
1(2).
[13] Travassos, G. H. et al. Detecting Defects in Object Oriented Designs
Using Reading Techniques to Increase Software Quality. University of
Maryland at College Park Accepted Paper at the OOPSLA, Denver,
Colorado, 1999.
[14] Travassos, G. H. et al: Reading Techniques for OO Design Inspections.
University of Maryland at College Park
[15] Empirical Investigation of Perspective-Based Reading. A Replicated Experiment. IESE Technical Report, 1997.
234
Methoden der empirischen Softwaretechnik
Softwaremetriken
Thomas Franken
Experimente: Allgemein
1
Einleitung
In der Softwaretechnik ist es heutzutage aus ökonomischer und
wissenschaftlicher Sicht Konsens Messverfahren bei Softwareentwicklungsprozessen einzusetzen, um bedeutende Merkmale und Kenngrößen zur
Planung und Steuerung zu ermitteln. In diesem Kontext haben viele Unternehmen die Wichtigkeit einer genauen Kostenkontrolle mit deren Hilfe
sie sich mit anderen Unternehmen vergleichen können. Um das zu bewerkstelligen benötigt man prezise Modelle und Metriken, die eine Analyse der
Qualität und Produktivität von Softwareentwicklungsprozessen erlauben.
Diese Seminararbeit stellt angefangen von den klassischen bis zu neueren
Ansätzen die bekanntesten Softwaremetriken zusammen und untersucht
diese Messverfahren hinsichtlich ihrer metrologischen Eigenschaften. Dabei
kommen, wie in anderen Ingenieurwissenschaften schon seit langen üblich,
grundlegende Konzepte aus der Maßtheorie zu Einsatz. Außerdem werden
hier Modelle zur Validierung von Softwaremetriken erläutert und angewandt.
Desweitern beleuchtet das Kapitel 3 den Standard ISO/IEC 14143 zur Messung des funktionalen Umfang von Software. Kapitel 4 stellte eine ISO/IEC
14143-1 konforme funktionale Softwaremetrik und eruiert ihr Stärken und
Schwächen anhand eines ausgewählten Beispieles.
Softwaremetriken spielen eine große Rolle in der heutigen Softwaretechnik. Mit seiner Aussage
A science is as mature as its measurement tools.
stellte Louis Pasteur (1822-1895) fest, dass jede Wissenschaft soweit verstanden ist wie ihre funktionaler Softwaremetriken. Objektive Kriterien
für Funktionalität, Qualität, Verständlichkeit, Wiederverwendbarkeit und
Komplexität eines Softwareproduktes oder -prozesses zu besitzen bildet die
Voraussetzung für eine geordnete Planung und ein fundierter Beurteilung.
Dieser Auffassung ist auch Tom DeMarco, der sagt:
You can’t control what you can’t measure. [?]
Was genau soll man unter dem Begriff Softwaremetrik verstehen? Eine
Definition von Sommerville besagt:
Eine Softwaremetrik ist jede Art von Messung, die sich auf ein
Softwaresystem, einen Prozess oder die dazugehörige Dokumentation bezieht.
Im IEEE Glossary findet sich folgende die Definition wieder:
236
Methoden der empirischen Softwaretechnik
1 Einleitung
A quantitative measure of the degree to which a system, component, or process possesses a given variable. [ieeeglossary]
Unter dem Begriff Softwaremetrik versteht man ein Verfahren zur Bestimmung eines Merkmals einer Software oder seines Softwareentwicklungsprozesse. Softwaremetriken dienen als Indikatoren für problematische
Softwareentwürfe, Architekturen oder Implementierungen. Sie vermessen
die Software oder ihren Erstellungsprozess um aus der Empirie Aussagen
über z.B. Test- und Wartungsaufwand abzuleiten, Projekte vergleichbar zu
machen oder Implementierungsvorschriften durchzusetzen. Nicht zuletzt werden
Softwaremetriken im Bereich der Projektplanung eingesetzt, um in der
Risikoplanung Kenngrößen, wie z.B. benötigte Mannstunden, abzuschätzen.
Softwaremetriken lassen sich grob in zwei Kategorie einteilen: Prozessmetriken und Produktmetriken. Prozessmetriken quantifizieren wichtige
Kenngrößen eines Entwicklungsprozesses wie den Kommunikationaufwand,
die Fehleranfälligkeit oder den Ressourcenaufwand (Kosten, Zeit oder Mitarbeiter). Zum anderen gibt es die Klasse der Produktmetriken, die Merkmale
eines Softwareprodukts messen. Beispiele solcher Merkmale sind Umfang,
Lesbarkeit, Komplexität oder Qualitäten wie Modularität, Kopplung oder
Wiederverwendbarkeit.
Im Kapitel 2 werden immer noch weit verbreitete klassische Produktmetriken vorgestellt. Die folgenden Kapitel 3 und 4 stellen neue Ansätze der
Prozessmetriken vor.
1.1
Maßtheorie
In der Maßtheorie beschäfigt man sich mit Messtechniken mit deren Hilfe
man ein empirisches Merkmal von Objekten der realen Welt auf ein numerische oder symbolische System abbildet. Gegenstand einer Messtechnik
ist die Untersuchung einer empirischen Relation bezüglich eines Merkmal
von Objekten aus der realen Welt, die wiederum Rückschlüsse auf die reale
Situation zulassen. Als Messtechniken eignen sich somit nur Abbildungen,
die die zu untersuchende empirische Relation respektieren. Damit sich eine
Messtechnik eignet, um ein Analyse durch zuführen, muss sie also ein Homomorphismus bezüglich der empirische Relation sein.
Ziel des Messvorgangs ist es gültige Aussagen über die reale Welt zu
machen, indem die numerischen Resultate analysiert und interpretiert werden. Eine Metrik muss dabei nur die Repräsentationsklausel erfüllen oder
auch validierbar sein, damit solche Rückschlüsse überhaupt zulässig sind und
korrekte Aussagen liefern. Im Folgenden wird Vorgang des formalen Messen
Methoden der empirischen Softwaretechnik
237
Experimente: Allgemein
in Teilschritte aufgeschlüsselt.
1. Auffinden eines Merkmals von Objekten einer Sort aus der realen Welt
2. Untersuchung der empirischen Relationen zwischen den Objekten
bezüglich dieses Merkmals
3. Auffinden von numerischen Relationen für jede empirische Relation
4. Definition einer Abbildung von Objekten der realen Welt in ein numerisches System
5. Überprüfung auf Konformität der Abbildung bezüglich der empirischen
Relationen und der numerischen Gegenstücke
6. Anwendung der Abbildung auf die Objekten der realen Welt
7. Schlussfolgerung auf Basis der numerischen Resultate auf die reale Situation
8. falls nötig Durchführung von Verbesserungen der realen Situation
1.2
Skalen
In dem obigen Abschnitt wurden Grundlagen für formale und valdierbare
Messtechniken erläutert. In vierten Schritt des formalen Messen wurde jedoch nicht geklärt, welche Klassen numerischen Systemen es gibt und welches
vielleicht anderen vorzuziehen sind. Unter einer Skala wollen wir die bei
einer Metrik verwendete Abbildung zusammen mit ihren empirischen und numerischen Relationen verstehen. Es gibt verschiedenen Klassen von Skalen,
die sich darin unterscheiden wie reich das numerische Zahlensystem ist auf
dem man die Merkmale des empirischen Systems abbilden und wie sehr sie
arithmetische Operationen zulassen aus denen man sinnvolle Resultate erhält. Im folgenden Abschnitt werden fünf Klassen von Skalen vorgestellt, die
jeweils eine Spezialisierung der vorangegangen Klasse darstellen und jeweils
eine präzisiere Beschreibung der realen Welt zulassen. Die 1.2 zeigt schematisch diese Enthaltenseinbeziehung zwischen diese Klassen.
1. nominale Skalen: Diese Klasse lässt nur die Unterteilung des empirische Relationensystem in unterschiedliche Klassen zu. Es existiert
keine Ordnung auf der Menge der Objekte. Bezüglich des zu untersuchenden Merkmals lässt sich nur nur die Gleichheit oder Ungleichheit
feststellen. Zum Beispiel lassen sich Softwareprodukte bezüglich ihres
Anwendungsbereiches nur in Kategorien wie Finanzsoftware, Büroanwendung, Logistiksoftware unterteilen.
238
Methoden der empirischen Softwaretechnik
1 Einleitung
2. ordinale Skalen: Bei dieser Klasse existiert eine totale auf dem Wertebereich des Maß, die eine totale Ordnung der realen Objekten induziert. Wie bei den nominalen Skalen werden hier die realen Objekte
in unterschiedlich Klasse eingeteilen solange diese unter der Metrik erhalten bleiben. Zusätzlich sind hier Kleiner-,Größer- oder Gleichheitsrelationen auf Klassen oder Objekten definiert. Ohne Bedeutung sind
Operationen wie Addition oder Subtraktion. Ein Beispiel für eine ordinale Skala wäre eine Bewertung von Softwaremodulen bezüglich ihrer
Portabilität auf einer Wertebereich von –, -, 0, +, ++.
3. Intervalskalen: Bei diesem Skalentyp handelt es sich um eine Zuordnung auf einen Skalenbereich beim dem Reihenfolgen und Differenzen
erhalten bleiben. Der Nullpunkt ist im Allgemeinen willkürlich festgelegt und bedeutet nicht auf das Nichtvorhanden sein des zu untersuchenden Merkmals hin. Artimetische Operationen wie Addition und
Substraktion der numerischen Wert sind bei Intervalskalen zulässig und
sinnvoll. Die Maßeinhalt Celsius ist ein Beispiel für eine Intervalskala.
Mit ihrer Bestimmung können Temperaturunterscheide gemessen und
verglichen werden. Die Berechung von Temperaturverhältnisse in Celsius sind dagegen von keinem Nutzen.
4. Verhältnisskalen: Metriken vom Verhältnisskalentyp bilden Objekte
auf Null oder echt positive Zahl ab. Sie erhalten Ordnung, Differenzen
und Verhältnisse. Jegliche Art von Arithmetik auf den diesen Skalentyp, wie insbesondere die Division oder die Multiplikation, sind zulässig
und enthalten meist eine sinnvolle Interpretation. Zusätzlich verweist
der Wert 0 auf das Fehlen des Merkmals. Der veranschlagte Preis eines
Softwareprojekt in Euro ist eine solche Verhältnisskala mit deren Hilfe
man Softwareprojekte relative oder auch prozentual vergleichen kann.
5. absolute Skalen: Dieser Skalentyp bildet auf den Bereich der natürlichen Zahlen ab, indem das zu untersuchende Merkmal aufgezählt
wird. Beim absoluten Skalentyp gibt es nur eine Möglichkeit die Anzahl zu bestimmen. Wiederum sind alle arithmetischen Operationen
sinnvoll. Z.b. ist Anzahl der Source Lines of Code eines Softwaremoduls eine absolute Skala für die Anzahl der enthaltenen Zeilen des
Quellkodes (bei eindeutiger Festlegung von LOC, siehe Abschnitt 2.1).
Relative und absolute Häufigkeiten einer absoluten Skala lassen sich
bestimmen und liefern aussagekräftige Resultat.
Methoden der empirischen Softwaretechnik
239
Experimente: Allgemein
Figure 1: Skalen Klassen
2
2.1
klassische Softwaremetriken
LOC - Lines of Code
Eine der einfachsten Metriken ist Umfangsmetrik LOC (engl. lines of code).
Diese Metrik misst die in einer Software enthaltenen Quellkodezeilen. Es
sind jedoch vielen Fragen bei der Definition von LOC zu klären, was sie
in der Regel untäglich macht Softwareprojekte miteinander zu vergleichen.
Zunächst muss klar sein ob und wie Kommentare oder Leerzeilen gezählt werden. Auch muss die Frage, wie mit Codeexpansion durch Makros umzugehen ist, beantwortet werden. Das größste Problem bei der Definition von
LOC ist wie man mit Zeilen, die aus mehreren programiersprachlich Konstrukten wie Anweisung oder Deklaration bestehen, umgegangen wird; im
einfachsten Fall erhalt jede Zeile ein Gewicht von 1. Aufgrund seiner extrem simplen Messbarkeit ist die LOC Metrik im noch weitverbreitet. Eine
Variante von LOC, genannt NCSS (engl. Non Commentary Source Statements) zählt ohne Berücksichtigung von Makros, Kommentaren oder Deklarationen nur Anzahl in einem Modul enthaltenen Anweisungen und behebt
dabei einige Mehrdeutigkeit des LOC Begriffs. Jedoch ist unklar, ob die LOC
Metrik ihr Ziel erfüllt, nämlich den Umfang einer Software zu messen. Offensichtliche Nachteile von LOC sind, dass es nicht die strukturelle Komplexität
eines Programms berücksichtigt und dass sein Einsatz innerhalb eines Softwareentwickungsprozesses erst in der Implemenierungsphase stattfinden kann.
240
Methoden der empirischen Softwaretechnik
2 klassische Softwaremetriken
Ausserdem sind die Ergebnisse von LOC sehr abhängig von externen Faktor
wie der Wahl der Programmiersprache, Kodierungrichtlinien oder Interpretation des LOC Begriffs, was das folgende Beispiel in 2.1 zeigt.
Figure 2: LOC Berechungen
2.2
zyklomatische Komplexität von McCabe
Im Jahr 1976 entwickelte Thomas McCabe die zyklomatische Komplexität
eines prozeduralen Programms. Diese Softwaremetrik misst die Größe eines
prozeduralen Programms, indem es dem strukturellen Aufbau seiner enthaltenen Kontrollflüsse als Flussgraph modelliert. Die Metrik eignet sich bedingt
Methoden der empirischen Softwaretechnik
241
Experimente: Allgemein
auch für object-orientiert Software, wenn man die auf der Ebene von Methoden anwendet. Die Grundidee dabei ist, dass mit der Anzahl an verschiedenen Kontrollflüsse in einem Programm bzw. unabhängigen Pfaden seines
KontrollFlussgraphen dessen Komplexität und Wartungsaufwand steigt. Der
Kontrolflussgraph G eines Programms wird dabei definiert als gerichteter
Graphen mit zwei ausgezeichneten Knoten, den Start- und Stopknoten. Aus
dem Stopknoten führen keine Kanten heraus und alle anderen Knoten liegen
auf einem Pfad zwischen Start- und Stopknoten. Jeder Knoten entspricht der
Auswertung einer Anweisung des Programms und jede Kante einen möglichen
Lauf des Kontrollflusses. Die zyklomatisch Kompletität die definiert als
V (G) = e − n + 2p, wobei e die Anzahl der Kanten, n die Anzahl den
Knoten und p die Anzahl der Komponenten des Kontrollflussgraphen bezeichnen. Es lässt sich zeigen, dass wenn die Anzahl der Komponenten p gleich 1 die zyklomatisch Kompletität V (G) gleich π + 1, wobei π die Anzahl
binärer Verzweigungen bezeichnet. Die 2.2 illustriert die Berechnung der zyklomatischen Komplexität anhand der Kontrollflussgraphen von drei kurzen
Programmfragmenten.
Figure 3: Kontrollflussgraphen
Die Klassifikation in 2.2 unterteilt Quelltexte nach ihrer Verständlichkeit
bzw. Fehleranfälligkeit.
242
Methoden der empirischen Softwaretechnik
2 klassische Softwaremetriken
zyklomatische Komplexität V(G)
Quellkode Charakteristika
≤ 10
verständlich und einfach strukturiert
11 − 20
durchschnittlich verständlich
21 − 49
problematisch und teuer in der Wartung
≥ 50
unverständlich und sehr fehleranfällig
Figure 4: Quellkode Klassifizierung
Es sei anzumerken, dass der bei der Berechnung von V (G) ermittelte
Kontrollflussgraph genutzt werden kann, um eine Menge von Testfällen mit
voller Zweigabdeckung zu erzeugen. Die zyklomatischen Komplexität weist
allerdings eine Anomalie auf. Betracht man ein Programm, welches aus n ineinander verschalten IF -Anweisungen mit jeweils einer Anweisung und einem
leerem Else-Zweig besteht, so läßt sich leicht zeigen, dass V (G) den Wert
n + 1, obwohl das entsprechende Programme für den Leser auch für große n
leicht zu verstehen ist.
2.3
Die Halstead Komplexität
Eine weitere verbreitete Softwaremetrik geht auf eine Arbeit von Martin
Halstead aus dem Jahre 1972 zurück. Die Halstead Komplexität misst die
strukturelle Komplexität des Quellkodes eines Moduls. Halstead Idee ist
dabei, dass der Umfang einer Software mit der Anzahl an Operator und
Operanden korreliert ist. Die Menge der Operatoren bzw. Operanden
ist durch die zugrunde liegende Programiersprache festgelegt. Die Anzahl
verschiedener Operatoren, die der Quellkode enthält sein ν1 . ν2 bezeichnet
die Anzahl verschiedener Operanden. N1 ist die Anzahl angewandter
Vorkommen von Operator und N2 die Anzahl angewandter Vorkommen von
Operanden. Mit ν = ν1 + ν2 bezeichnet Halstead die Größe des Vokabulars
und mit N = N1 + N2 die Länge der Implementierung. Basierten auf diesen
Größen leitet Halstead die folgenden drei Größen ab:
1. Schwierigkeit: D =
ν1
2
∗
N2
ν2
2. Volumen: V = (N1 + N2 ) ∗ log2 (ν1 + ν2 )
3. Aufwand: E = D ∗ V
Die abgeleiten Größen werden wie folgt interpretiert.
• D: misst den Schwierigkeitsgrad das Programm zu verstehen und ist
mit ihr positive korreliert. Nν22 entspricht dem gemittelten Operandenvorkommen.
Methoden der empirischen Softwaretechnik
243
Experimente: Allgemein
• V: mißt den Umfang der Implementierung
• E: mißt den gesamt Aufwand ein Programm zu verstehen
Zur Messung der Halstead Größen bedarf es eines sprachabhängigen Scanners, welcher pro Modul angewandt wird. Durch Mittelwertsbildung wird so
der mittlere Aufwand oder das mittlere Volumen pro Modul einer Software
bestimmt.
2.4
Objekt-orientierte Metrik von Chidamber and
Kemerer
Chidamber und Kemerer schlugen eine Metrik für objekt-orientiert Software, die die strukturellen Besonderheit und Charakteristika von objektorientierter Software berücksichtigt. Die einzelnen Bestandteile diese Metrik
beziehen sich jeweils auf eine Klasse oder Modul und werden im Folgenden
erläutert:
1. Abhängigkeit zwischen Objekten Das CBO Maß (engl. für Coupling between objects) zählt zu einem gegebenen Modul die Anzahl abhängigen Module. Zwei Module sind genau dann abhängig,
wenn das eine Modul Instanzen oder statische Methoden des anderen verwendet oder umgekehrt. Ein hoheren CBO Index weist auf
schwaches Niveau der Datenkapselung hin, was die Wiederverwendbarkeit schwierig macht.
2. Reaktionsgrad Der Reaktionsgrad einer Klasse ist die maximale Anzahl an Methoden die ausgeführt werden können, wenn ein Objekt
dieser Klasse eine Nachricht erhält. Bei diesem Maß wird angenommen,
dass mit dem Reaktionsgrad einer Klasse seine Komplexität steigt.
3. Gewichtete Methodenanzahl Es existieren zwei Varianten von
diesem Maß, die jeweils gewichtete dir Anzahl der Methoden zählt.
Das erste Maß WMC1 (engl. weighted methods per class 1), welches
jede in einer Klasse enthaltenen Methoden das Gewicht 1 zuordnet und
somit die Anzahl der enthaltenen Methoden misst. Und zum anderen
gibt es das WMC Maß, das alle privaten Methoden einer Klasse vernachlässigt und mit 0 gewichtet. Alle anderen Methoden werden bei
der WMC Bestimmung mit 1 gewichtet.
4. Tiefe des Vererbungsbaums Die Idee dieses Maßes, genannt DIT
(engl. depth of inheritance tree of a class), ist je tiefer der Vererbungsbaum einer Klasse ist umso schwieriger ist das Zusammenspiel zwischen vererbten und redefinierten Methoden zu verstehen. Das DIT
244
Methoden der empirischen Softwaretechnik
2 klassische Softwaremetriken
Maß einer Klasse ist durch die Länge des längsten Vererbungspfades
seiner Basisklassen bestimmt. Bei Programmiersprachen, die keine
Mehrfachvererbung kennen, ist dies die Anzahl aller Vorfahrenklassen
bis zum Vererbungsende.
5. Anzahl der Kindklassen Beim NOC Maß (engl. number of children)
wird die Anzahl aller direkten Kindklassen aufgezählt. Intuitiv deutet
ein hoher NOC Wert auf ein fehlendes Abstraktionsniveau der zugrunde
liegenden Klasse hin.
6. Kohäsionsmangel Der LCOM (engl. lack of cohesion on methods)
Wert einer Klasse ist die Differenz aus der Anzahl seiner Methodenpaaren, die disjunkten Mengen von Feldern verwenden, und der Anzahl
der Methodenpaaren, die gemeinsam genutzten Felder besitzen. Falls
dieser Wert negativ wird LCOM den 0 angenommen. Ein hoher LCOM
Wert ist ein Indikator dafür, dass die Klasse in mehrere Abstraktionen
enthält und in mehrere Klassen zerteilt werden sollen.
Empirische Untersuchungen haben ergeben, dass alle genannten Untermetriken positiv mit der Fehlerwahrscheinlichkeit eines Moduls oder einer
Klasse positiv korrelliert sind. Ein Ausnahme bildet das NOC Maß, welche
negativ korreliert ist.
2.5
Funktionspunkt Analyse
Allan Albrecht stellte 1979 bei IBM eine Method zur Messung funktionaler
Größe einer Software vor. Albrecht erkannte früh, dass der Umfang einer der
Hauptfaktoren für den Aufwand bei der Entwicklung, Wartung oder bei dem
Betrieb einer Software darstellt. Aus seinen Forschungen nach Möglichkeiten
diesen Aufwand abzuschätzen entstand seine Function Point Analysis Methode.
Albrecht’s Function Point Analysis Methode (kurz FPA) hat als Ziel den
funktionalen Umfang einer Software als eine von seinen funktionalen Benutzeranforderungen abgeleitete positive Größe, Function Points oder F P
genannt, zu bestimmen oder vorherzusagen. Sie misst somit mehr die
Größe des Ausgangsproblems und weniger die Größe einer konkreten Lösung. Die Messung des funktionalen Umfangs einer Software ist wegen ihrer
Unabhängigkeit von der Wahl der eingesetzten Technologien und von Implementierungsentscheidungen ein maßgebliches Werkzeug in der Softwaretechnik. Dieses Prinzip, kleinste funktionale Einheiten eines Softwaresystems
zu identifizeiren und zu zählen, wurde nach Veröffentlichnug von Albrecht’s
FPA vielfach aufgegriffen und weiterentwickelt. Alle daraus resultierenden
Methoden der empirischen Softwaretechnik
245
Experimente: Allgemein
Konzepte und Methoden oder auch Functional Size Measurement Methods
haben eine etwas unterscheidliche Ausfassung von dem was die funktionallen Bestandteile eine Softwaresystems sind und welchen Einfluss sie auf
die Gesamtgröße haben. Die Funktionseinheiten einer Softwaresystems zu
zählen kann auch in dem Fall, dass die Anforderungen an die Software formal spezifiziert sind, eine sehr schwierige Aufgabe sein. Albrecht’s Function Point Method zählt im Wesentlichen kleinste funktionale Einheiten eines
spezifizierten oder bereit implementierten Softwaresystems. Der erste FPASchritt zählt die sogenannten unangepassten Funktionspunkte UFP (engl.
unadjusted function points). Um diesen Vorgang zu vereinfachen schlägt
Albrecht die Einteilung aller Funktionen in die fünf Kategorien externe Ausgaben, externe Eingaben, externe Anfragen, externe Schnittstellen und interne Dateien vor.
1. Unter Externe Eingaben sind alle Daten zu verstehen, die das System
aus externen Quellen erhält und die eine intern Verarbeitung anstoßen.
2. Externe Ausgaben bestehen aus alle vom System verarbeiten Daten,
die die Softwaregrenze verlassen. Z.b. Daten die auf einen Drucker oder
Bildschirm gesendet werden.
3. Externe Anfragen sind sowohl Eingabeanfragen als auch Ausgabeanfragen, die die internen Daten nicht verändern. Eine Datenbankabfrage
wäre ein Beispiel für eine externe Anfrage.
4. Unter der Kategorie Externe Schnittstellen fallen alle Daten, die
mit externen Systeme geteilt werden. Gemeinsam genutzte Datein,
Programmbiliotheken oder Datenbank sind klassische Beispiel für Externe Schnittstellen.
5. Interne Dateien sind alle systemeigene logische Daten und Dateien.
Eine Konfigurationsdatei oder eine Datei, die Information aller Benutzerprofile enthält, fallen in diese Klasse.
Dabei unterteilt die FPA Methode diese fünf Kategorien weiter nach ihrer
Komplexität in einfach, durchschnittlich und schwierig und ordnet jedem der
resultierenden 15 Unterklassen einen gewichteten Faktor, genannt Function
Count Weighting Factors.
246
Methoden der empirischen Softwaretechnik
2 klassische Softwaremetriken
einfach mittel schwierig
externe Ausgaben
3
4
6
externe Eingaben
4
5
7
externe Anfragen
3
4
6
externe Schnittstellen
5
7
10
interne Dateien
7
10
15
Figure 5: Function Count Weighting Factors
Die FPA Methode ermittelt ausgehen von der Function Count Weighting
Factor Matrix den unangepassten Funktionspunktwert UFP des Systems,
in dem sie alle funktionalen Einheiten des System in einer der 15 Klassen
einstuft und sie mit durch ihren Function Count Weighting Factors gewichtet
nach der folgenden Vorschrift auszusummiert.
3 P
5
P
UF P =
wij aij , wobei wij der jeweilige Function Count Weighting
i=1 j=1
Factor und ai j die Anzahl der Funktionen der Kategorien i, j bezeichnet.
Die FPA Methode versucht in einem zwei Schritt die UFP Wert zu präsisieren. Das Systems wird weiter hinsichtlichtlich ihrer Zugehörigkeit in eine
technische Kategorie unterteilt. Der Anwender von FPA soll nun die 14 Kategorien nach ihrer Relevanz im System auf einer Skala von 0-5 (irrelevant bis
essentiell) einstufen und kann anschließend den technischen Komplexitäts1
P
faktor TKF des System mit Hilfe der Formel T KF = 0 65 + 0 01 4Fi
1
berechnet. Ein Einstufung mit dem Wert 5 der Kategorie Die 2.5 zeigt eine
Auflistung der Kategorien aus den sich der TKF zusammensetzt.
F1 Reliable back-up and recovery F2 Data communications
F3 Distributed functions
F4 Performance
F5 Heavily used configuration
F6 Online data entry
F7 Operational ease
F8 Online update
F9 Complex interface
F1 0 Complex processing
F1 1 Reusability
F1 2 Installation ease
F1 3 Multiple sites
F1 4 Facilitate change
Figure 6: Kompontenten des technischen Komplexitätsfaktors
Das Resultat der FPA Methode, die Funktionspunkte (FP), ist dann das
Produkt des technischen Komplexitätsfaktors und den unangepassten Funktionspunkten oder kurz F P = U F C × T CF .
Methoden der empirischen Softwaretechnik
247
Experimente: Allgemein
2.5.1
Resumee
Albrecht’s FPA Methode ist intuitiver und empirischer Ansatz, der nicht explizit auf einer theoretischen Basis oder einem Modell aus der Maßtheorie
aufbaut. Aus diesem Grund ist unklar, was der FP Wert aussagt, und wie
vergleichbar mehrere Softwaresysteme bzgl. FP sind. Zudem beinhaltet der
Bestimmung des FP Wertes eine subjektiven Einfluss, der sich das Endresultat um -35 bis 35 Prozent verändern kann. Zudem haben Kitchenham and
Känsälä ( [KiKä93]) 1991 bei ihren empirischen Erhebungen zu FPA festgestellt, dass die technische Anpassung des UTP Wertes durch den TKF
keine Verbesserung für die resultierende Schätzung der realen FP bringt.
Trotz der genannten Schwierigkeiten setzt, angeregt durch Albrecht’s FPA,
die rege Evolution der FSM Methoden Ende der siebziger Jahren ein. Viele
Methoden griefen das FP Grundprinzip auf ein System aus der funktionalen
Perspektive des Anwender und nicht technischen Sicht des Systementwicklers zu betrachten und daraus den Aufwand zu schätzen, nicht zuletzt weil
die funktionale Perspektive es erlaubt eine frühe Schätzung (bezogen auf den
Lebenszyklus des Systems) zu geben.
2.6
klassische Metriken in einer Anwendung
In diesem Abschnitt soll der Einsatz von Softwaremetriken anhand des OpenSource Project GNU Crypto demonstriert werden. Das GNU Crypto Projekt stellt eine alternative cryptographische Programierschnittstelle zu dem
de-facto Standard JavaSoft’s JCA/JCE dar und ist im Quellkode, der in
Java geschrieben ist, frei verfügbar. Zur Messung wird das von Frank Sauer
entwickelte Plugin Metrics für die Entwicklungplatform Eclipse eingesetzt,
welches eine Reihe von Softwaremetriken wie LOC, McCabe Komplexität
oder Weighted Methods per Class auf der Basis von Java-Quellkode berechnet. Das Metrics Plugin stellt die Messresultate in einem sogenannten Metrics View dar. Die Metrics View Ansicht bestellt aus einer baumartigen
Ansicht dar. Die baumartige Ansicht enthält biszu fünf Ebenen, die die
Messresultate nach Metriken, Gesamtprojekt, Paketen, Klasse bis hin zu den
einzelnen Methoden oder nach Paketen und enthaltenen Typen aufschlüsselt.
Es ist möglich für jede Metrik Ober- und Unterbereichsgrenzen zu definieren,
wodurch die Pfade von Messwert außerhalb des Gültigskeitsbereich in der
Metrics View Ansicht rot markiert werden. Ausserdem kann das Plugin
bei Bereichsverletzung Out of Range Warnungen erzeugen. Dadurch ist es
möglich problematische Stellen im Quellkode schon bei Kodieren zu identifizieren und mit Hilfe eines Doppelklicks in der Metrics View oder Problems
View direkt dort hinzu navigieren.
248
Methoden der empirischen Softwaretechnik
2 klassische Softwaremetriken
Figure 7: Messresultate des GNU Crypto Quellkodes
Die 2.6 zeigt wie die Metrics View Ansicht die abgeleiteten statistischen Kenngrößen der berechneten Messwerte wie Summe (Total), Mittelwert
(Mean), Standardabweichung (Std.Dev.), Maximum und der Klasse, dem
Packet oder der Method, die den größsten Messwert, auflistet. Das Plugin hilft einen schnell problematische Klassen zu identifieren. Ein solches
Beispiel ist die Klasse SRPServer aus Abbildung 2.6, die fünf Methoden aus
als 50 Kodezeilen enthält und insbesondere die Methode sendProtocolElements, welche aus 107 Zeilen besteht und eine inakzeptabel hohe zyklomatische Komplexität von 63 aufweist.
Methoden der empirischen Softwaretechnik
249
Experimente: Allgemein
Figure 8: Messresultate des SRPServer.java Quellkodes
Mit Hilfe von Refakturierungsmethoden kann ein Programmierer nun die
problematischen Kodefragmente leicht in kleinere Methoden aufteilen und so
besseren und verständlichen Kode erzeugen, was unteranderem die Erweiterbarkeit, Änderbarkeit und Wartbarkeit signifikant erhöht.
3
ISO 14143 Standard zur Messung funktionaler Größe
Der Standard ISO/IEC 14143-1 wurde 1998 in Kooperation der Standardisierungsorganisationen ISO (engl. International Organisation for Standardization) und IEC (engl. International Electrontechnical Commission) veröffentlicht und definiert fundamentale Konzepte, Methoden und Terminologien
für den Entwurf und Einsatz funktionaler Größenmessung (engl. Functional
Size Measurement, kurz FSM) von Software bzw. ihrer Anwendung in der
Projektplanung, Projektrisikoanalyse, Produktivitätsmessung oder Projektmessung. Der Standard beschreibt keine konkrete Implementation einer
250
Methoden der empirischen Softwaretechnik
3 ISO 14143 Standard zur Messung funktionaler Größe
FSM Methode oder ihrer Details zu ihrem Einsatz, sondern ein Rahmenwerk
oder Metastandard mit man konsist FSM Methoden beschreiben und entwickeln kann. Ziel dieses Rahmenwerks ist es einen einheitlichen Standard
vorzugeben, der bisher fehlte um Methoden hinreichend genau zu vergleichen oder ineinander zu konvertieren. Ein weiteres Ziel des Standards ist
es das Problem zu beseitigen, dass Softwareunternehmen zuvor nur unzureichend in der Lage waren geeignete quantitative Methoden zu finden, um
die Kosten für Entwicklung, Wartung oder Verbesserung ihrer Softwaresysteme abzuschätzen oder die Effektivität und Effizienz ihrer Prozesse zu bewerten und mit anderen Unternehmen zu vergleichen. Dabei spielt die genaue
Bestimmung oder die Prognose der Größe der resultierenden Software eine
zentrale Rolle. In der Vergangenheit wurden auf diesem Gebiet hunderte
Verfahren vorgestellt und eingesetzt, z.b. die SLOC, McCabe oder Halstead
Metriken. Die meisten dieser Verfahren leiden allerdings unter erheblichen
Schwachpunkten. Viele dieser Verfahren setzen den vollständigen Quellkode
des Systems voraus und sind ungeeignet um in einer frühen Phasen des Softwareerstellungprozesses eingesetzt zu werden oder sie lassen sich nicht einheitlich während des gesamten Lebenszyklus des Systems anwenden. Häufig
sind die vorgeschlagen Verfahren auch nicht hinreichend verstanden und es
ist unklar was sie genau messen und können deshalb nicht sinnvoll eingesetzt
werden. FSM Methoden sind dagegen so konzeptiert, dass sie keine konkrete
Implementation messen, sondern sie spezifizieren die Größe eines System anhand der funktionalen Anforderungen des System, und verweiden deshalb die
genannten Schwachstellen. Seit Albrecht’s Veröffentlichung seiner Funktionspunkt Analyse griefen viele seine Ideen auf und entwickelten sie weiter, was
zu Inkonsistenzen der einzelnen Methoden führte und die Standartisierung
einer FSM Methode erschwerte. Der ISO/IEC Standard legt die fundamentalen Konzepte von FSM Methoden fest und versucht eine konsistente Behandlung und Weiterentwicklung der FSM Methoden zu propagieren und ist
in sechs Teile aufgeschlüsselt.
1. Definition der Konzepte
2. Conformity Assessment of Software sizing methods to ISO/IEC 141431:1998
3. Verification einer FSM Methode
4. FSM Referenzmodel
5. Bestimmung von funktionalen Domänen für den Einsatz von FSM
Methoden der empirischen Softwaretechnik
251
Experimente: Allgemein
6. Anleitung zur Benutzung der ISO/IEC 14143 Reihe und verwandten
internationalen Standards
Im folgenden werden die zentralen Konzepte und Definitionen des
[ISO14143] Standards zitiert:
Base Functional Component (BFC) Base Functional
Component (BFC) an elementary unit of Functional User Requirements defined by and used by an FSM Method for measurement purposes
BFC Type a defined category of BFCs
boundary a conceptual interface between the software under
study and its users
FSM Method a specific implementation of FSM defined by
a set of rules, which conforms to the mandatory features of this
part of ISO/IEC 14143
Functional Domain a class of software based on the characteristics of Functional User Requirements which are pertinent
to FSM
Functional Size a size of the software derived by quantifying
the Functional User Requirements
Functional Size Measurement (FSM) the process of measuring Functional Size
Functional User Requirements - FUR a sub-set of the
user requirements. The Functional User Requirements represent
the user practices and procedures that the software must perform
to fulfil the users? needs. They exclude Quality Requirements
and any Technical Requirements
User any person that specifies Functional User Requirements
and/or any person or thing that communicates or interacts with
the software at any time NOTE - Examples of ’thing’ include,
but are not limited to, software applications, animals, sensors, or
other hardware.
252
Methoden der empirischen Softwaretechnik
4 COSMIC-FFP
Der Metastandard spezifiert weiter die folgenden Charakteristika und Anforderung, die eine Metrik aufweisen muss um Komformität mit ISO/IEC
14143 zu erreichen, dabei ist die Bedeutung des Wortes soll als eine strike
Anforderung an die FSM Methode zu verstehen.
Die Methode arbeitet mit einer Repräsentation aller systemeigenen Anforderung (FURs) aus Sicht des Benutzers und kann ab dem Zeitpunkt
ihrer Erstellung eingesetzt werden. Desweitern sollte die Methode BFC
Typen definieren (und falls vorhanden deren Relationen untereinander),
den zumessenden funktionalen Umfang auf Basis dieser Typen ableiten und
Regeln und Methoden beinhalten mit denen man die einzelnen BFCs anhand der vorliegenden FURs identifizieren kann und eindeutigen einem BFC
Typ zuordnen kann. Die BFCs sollen keinen Bezug auf technische Systemanforderungen oder Qualitätsanforderungen enthalten. Zudem soll die
Methode definieren wie jeder BFC ein numerischer Wert unter Berückigsichtigung seines BFC Typs zugewiesen wird. Diese Regeln sollen unabhängig
von Methoden und dem Aufwand zur Entwicklung und Wartung des Systems
sein. Informationen, die für ihre Anwendung benötigt werden, sollen die FSM
Methode spezifieren und Richtlinien festlegen, wie ihre Anwendung zu dokumentieren ist. Eine FSM Methode soll ihren funktionalen Einsatzbereich festlegen, d.h. für welche Systeme bzw. Anwendungsbereiche sie konzepiert ist.
Sie solltest auch soweit wie möglich unabhängig sein der Wahl der eingesetzten Technologien und Entwicklungsmethoden. Soweit möglich soll festlegt
sein zu welchem Grad die Methode kompatibel zu anderen FSM Methoden ist
und wie potentielle Konvertierungen durchzuführen sind. Die FSM Method
soll aus Konvention einen eindeutigen Namen besitzen und falls vorhanden
unterschiedliche Versionen durch eine entsprechende Versionsnummer kenntlich machen.
4
COSMIC-FFP
Das Common Software Measurement International Consortium initiierte
1997 das COSMIC FFP Projekt mit dem Ziel neue Methoden zu entwerfen mit deren Hilfe man den Umfang und die Kosten von Software genauer
schätzen und bestimmen kann. Außerdem sollte COSMIC FFP einen internationalen Standard entwickeln, testen und bis zur Marktreife bringen. Das
Konsortium traff gleich zu Beginn einige Entwurfsentwurfsentscheidungen.
Z.b. sollten die Methoden insbesondere Informationssysteme, Realzeitsysteme oder Mischformen dieser beiden unterstützen. Sie sollten aber auch
in einer frühst möglichen Phase eines Softwareentwicklungsprozesses einsetzbar und unabhängig von Implementierungsaspekten sein. Das dem Projekt
Methoden der empirischen Softwaretechnik
253
Experimente: Allgemein
entstand die gleichnamige COSMIC-FFP (COSMIC Full Function Points)
Methode, die mit Unterstützung der ISO/IEC JTC1 SC7 Gruppe im Dezember 2002 als als ISO/IET 14143-1 konforme FSM Methode standardisierte
wurde. Die COSMIC FFP Methode unterliegt bis heute einem ständigen
Überarbeitungsprozess, der zum heutigen Stand die Version 2.2 der Methode
hervorbrachte (siehe [cosmiconhome]).
4.1
COSMIC FFP-2.2
Im diesem Abschnitt wird eine grober Überblick über die Arbeitweise der
COSMIC FFP Methode gegeben. Zur Anwendung der Methode reicht eine
vollständige Liste aller funktionale Benutzeranforderungen (FUR Liste). Die
Methode ist in zwei Phasen gegliedert. In der Abbildungsphase oder Unifikationsphase werden die FURs des zuvermessenden Systems auf das in Abschnitt 4.2 erläuterte generische COSMIC Softwaremodell abgebildet. Dabei
erhält man an das COSMIC Softwaremodell angepasste FURs, die wiederum
in der Messphase als Eingabe benötigt werden. In der Messphase werden auf
diesem Model Regeln angewandt mit deren Hilfe man die funktionale Größe
des Systems herleitet. Die FURs der Software werden in der ersten Phase
zerlegt in funktionale Prozesse, die wiederum, falls sie zu grob granular sind,
in einzelne funktionale Unterprozesse zerteilt werden. Im COSMIC Model
führen diese Prozesse eine Folgen von Datenbewegungen oder Datenmanipulation aus. Auf Basis der einzelnen Prozesse und deren Unterprozessen
bestimmt die COSMIC FFP Methode vereinfacht gesagt eine Zählung aller
enthaltenen Datenbewegungen (Entries und Exits) und der Datenmanipulation (Reads und Writes) durch und bewertet jede dieser im Modell atomaren
Operationen mit dem Wert 1 und der Einheit Cfsu (COSMIC functional size
unit), um so den FFP Wert des Systems in Cfsu zu ermitteln.
4.2
COSMIC-FFP Software Kontextmodell
Dem COSMIC-FFP Software Kontextmodell verwendet zwei grundlegende
Prinzipien, die im Folgenden aus dem COSMIC Measurement Manual zitiert
werden [Cosmic Measurement Manual]
General Principle 1: The software to be mapped and measured is
fed by input and produces useful output, or a useful outcome, to
users.
General Principle 2: The software to be mapped and measured
manipulates pieces of information designated as data groups
which consist of data attributes.
254
Methoden der empirischen Softwaretechnik
4 COSMIC-FFP
Im COSMIC-FFP Software Kontextmodell ist Software ist umgrenzt von
Hardware. Zum einen ist sie in eine sogenannter Frontend -Grenze zum menschlichen Benutzer durch Ein- und Ausgabehardware wie Tastatur, Maus,
Bildschirm etc. abgeschirmt und zum anderen begrenzen sie persistenten Speicher Medien wie Festplatten, RAMs oder ROMs an der Backend -Grenze. In
Frontend -Richtung erlauben es Entries und Exits die funktionale Datenströme über die Softwaregrenze zum Benutzer. Die entsprechende Datenströme an der Backend -Grenze heissen Reads and Writes.
Figure 9: generisches COSMIC Softwaremodell
4.3
COSMIC-FFP Fallstudie
In dem Abschnitt wird anhand einer Fallstudien eines eingebetteten Systems die Vorgehensweise COSMIC-FFP Methode demonstriert und den Umfang des Softwaresystem in Cfsu bestimmen. Das zugrundeliegende eingebetteten System besteht aus einer Software für einen Controller-Chip, der
in einem Pkw einen festen Abstand zu einem vorausfahrenden Fahrzeug automatisch halten soll. Das zudimensonierende System besteht aus einem
menschlichen PKW-Fahrers, den Sensoren, dem Controller und Akteuren wie
die Bremsen und die Motorsteuerung. Die Sensoren vermessen die Umwelt
nach Parametern wie dem aktuellen Abstand zum Vordermann, die aktuelle
Geschwindigkeit und die Ausfeuchtigkeit und speichern diese Daten für eine
gewisse Zeit. Der Controller kann jederzeit diese Daten der Sensoren und
Methoden der empirischen Softwaretechnik
255
Experimente: Allgemein
Akteure lesen und soll in dem Fall, dass der Fahrer das System aktiviert
hat, entscheiden, ob der die Akteuren einsetzen soll, um einen bestimmten
Abstand wiederherzustellen.
Formal ergeben sich somit die folgenden funktionalen Benutzeranforderungen:
1. FUR 1 Das System soll durch Bremsen den Abstand zum vorderen
PKW verringen, wenn dieser kleiner ist als der Standardabstand.
2. FUR 2 Das System soll durch Steuerung des Motors den PKW beschleunigen, wenn der Abstand zum vorderen PKW größer ist als der Standardabstand.
3. FUR 3 Deaktiviert der Fahrer das System oder betätigt er die Bremsen
oder das Gaspedal, soll sich das System deaktivieren und die Steuerung
der Akteure enden.
Voraussetzung für FUR 1 und FUR 2 ist zusätzlich, dass das System
aktiviert ist und der Benutzer seit längerem keinen Akteur gesteuert hat.
Der Controller muss also auf die folgenden Simuli des Fahrers reagieren:
1. SYSTEM AKTIVIERUNG
2. SYSTEM DEAKTIVIERUNG
Der Controller muss also auf die folgenden Simuli der Sensoren reagieren:
1. ABSTANDSÄNDERUNG
2. GESCHWINDKEITSÄNDERUNG
3. FEUCHTIGKEITSÄNDERUNG
Der Acteure müssen auf die folgenden Simuli des Benutzer bzw. des
Controller reagieren:
1. BREMSEN
2. BESCHLEUNIGEN
3. INAKTIVITÄT
Da nun alle Benutzeranforderungen vorliegen, können wir die von COSMIC FFP anwenden. Die folgende 4.3 zeigt das System mit seinen Komponenten und seiner Umgebung und gliedert das System in zwei Softwarekomponenten, die innerhalb sich das System befindet: Controller Komponente
256
Methoden der empirischen Softwaretechnik
4 COSMIC-FFP
und Steuerungskomponente. Die 4.3 identifiziert auch gleichzeitig alle Systemgrenzen, die aus der Grenze zum Benutzer und der Grenze zu der Hardware der Sensoren bestehen. Damit wäre der erste Teilschritt der Abbildungsphase von COSMIC FPP abgeschlossen.
Figure 10: Kontrollflussgraphen
Nun müssen wir noch die funktionalen Prozesse identifieren. Da eine
vollständige Schlüsselung aller involvierten funktionalen Prozesse den Rahmen dieser Seminararbeit übersteigen würde, wird hier nur exemplarisch der
funktionale Prozess der Abstandsänderung analysiert und gemessen.
Methoden der empirischen Softwaretechnik
257
Experimente: Allgemein
Figure 11: Funktionaler Prozess - Abstandsänderung
Die 4.3 zeigt, dass der Prozess der Abstandsänderung aus drei Datenbewegungen (2× Entries und 1 Exit) und einer Datenmanipulation (Read)
besteht. Somit beinhaltet dieser Prozess einen Umfang von 4Cf su. Weil
die Systemgesamtgröße sich aus der Summe aller Größen der funktionale
Prozesse zusammensetzt, wollen wir im folgenden eine Systemgröße von 25
Cfsu annehmen.
Aus den Ergebnissen (vergl. 4.3), die von der COSMIC Gruppe bei
ihren [COSMIC Feldversuchsreihe] gewonnen hat, werden wir nun auf Basis
der Systemgröße von 55 Cfsu der Aufwand für die Entwicklung des Systems
abschätzen. Dabei sei eine Mannstundenzahl von 120 pro Monate und eine
Teamstärke von 5 Personen angenommen.
258
Methoden der empirischen Softwaretechnik
References
Mannstunden pro Cfsu Mannmonate pro Cfsu Mannstunden
26 96
0 224
1482
29 5
0 246
1622
20 7
0 173
1139
Median
2tes Quartile
3tes Quartile
Figure 12: Produktivitätszahlen aus den COSMIC Feldversuchen
Dauer
mittlere
langsamste
schnellste
Stunden
Monate
296 6
2 46 = (1482/5)/120
324 4
2 70 = (1622/5)/120
227 7
1 90 = (1139/5)/120
Figure 13: Systementwicklungsdauer für das Team in Mannstunden bzw.
Monaten
Die mit Hilfe von COSMIC FFP gefundenen Resultate lassen also eine
relativ präzise Eingrenzung der Projektdauer zwischen 1 9 und 2 7 Monaten
zu.
5
Literaturverzeichnis
References
[KiKä93]
Kitchenham, B.A. and Känsälä K., Inter-item correlations amoung function points, Proceedings of the IEEE
Software Metrics Symposium, Baltimore, MD, IEEE
Computer Society Press,pp. 11-15, 1993
[CiKe94]
S.R. Chidamber and C.F. Kemerer, A Metrics Suite
for Object Oriented Design, IEEE Transactions on
Software Engineering, vol.20, no. 6, 1994, pp. 476-493.
[cosmiconhome]
COSMIC Homepage,
Stand vom 26.10.2005
http://www.cosmicon.com,
[Cosmic Measurement Manual] A. Abran, J.M. Deshairnes, S. Oligny, S. StPierre, C. Symons (2003), Measurement Manual COSMIC Full Function Points 2.2, The COSMIC Implementation Guide for ISO/IEC 19761
Methoden der empirischen Softwaretechnik
259
Experimente: Allgemein
[COSMIC Feldversuchsreihe] Abran, Symons, Oligny (2001) An Overview of
COSMIC-FFP Field Trial Results, Proceedings 12th
European Software Control and Metrics conference,
London
[Fent97]
N.E. Fenton and S.L. Pfleeger, Software Metrics: A
Rigorous and Practical Approach second edition, PWS
Publishing Co., 1997
[ISO14143]
Implementation Note for IEEE Adoption of ISO/IEC
14143-1:1998
[ISOvoc]
International Vocabulary of Basic and General Terms
in Metrology, International Organization for Standardization, Switzerland, 2nd edition, 1993, ISBN 92-6701075-1
[Bassman]
Mitchell J. Bassman, Frank McGarry, and Rose Pajerski, Software Measurement Guidebook, Software Engineering Laboratory Series, Rev. 1, pp. 21-46, 1995.
[ieeeglossary]
IEEE Standard Glossary
260
Methoden der empirischen Softwaretechnik
Experimente: Objektorientierung
Objektorientierte Entwürfe
Empirisches Ergebnis
Na Bai
Keywords: BAI,Objektorientierte Entwürfe,Entwurf
Abstract
Im Rahmen dieser Ausarbeitung führen zuerst die wesentlichen Begriffe der Objektorientierung ein und zeigt ihre Darstellung in der Unified Modeling Language (UML). Dann weiter beschäftigt sich mit verschiedenen Aspekten des objektorientierten Entwurfs (object-oriented
design, OOD). Es wird definiert, was Entwurf ist und welche Arten
von Entwurf es gibt. Am Ende wird die Frage, was eigentlich ein guter
Entwurf ist, aus verschiedenen Perspektiven beleuchtet. Dazu werden
einige Beispiele vorgestellt. Dann kann man gut verstehen. Schließlich
wird eine Zusammenfassung des Beispiels gegeben.
1
Grundlagen
1.1
Objektorientierung
Die Begriffe in der Objektorientierung werden häufig unterschiedlich
definiert, oder es werden für dasselbe Konzept unterschiedliche Begriffe verwendet. [3] Daher werden die Definitionen der zentralen Begriffe angegeben,
wie sie in dieser Arbeit verwendet werden. Die verwendeten Definitionen
stützen sich vor allem auf die Begriffsbildung im Zusammenhang mit UML.
Drei Eigenschaften zeichnen die objektorientierte Sichtweise aus:
jekte, Klassen und Vererbung. [2]
Ob-
• Objekt
Die zentrale Rolle spielt der Begriff des Objekts. Ein Objekt besteht
Experimente: Objektorientierung
aus Datenfeldern, den so genannten Attributen, und aus Funktionen
auf diesen Daten, den so genannten Methoden. Methoden dienen zur
Reaktion auf Nachrichten, die ein Objekt versteht. Methoden können z.
B. den Zustand des Objekts (die Werte seiner Attribute) verändern oder
neue Nachrichten verschicken. Die Schnittstelle einer Methode wird als
Operation bezeichnet. Eine Methode ist also die Implementierung einer
Operation.
• Klasse
Die Objekte eines Systems werden nicht individuell beschrieben, sondern anhand ihrer Gemeinsamkeiten in Klassen zusammengefasst. Eine
Klasse definiert die Attribute und Methoden ihrer Objekte. Die Klasse
dient als Schablone zur Instantiierung von Objekten. Bei der Instantiierung müssen nur die Werte für die Attribute angegeben werden, die
Methoden übernimmt das Objekt von seiner Klasse.
Abbildung 1. zeigt die UML-Darstellung einer Klasse und eines Objekts
dieser Klasse. Der Name des Objekts wird zur besseren Unterscheidung
unterstrichen.
Figure 1: UML Darstellung von Objekt und Klasse
Kommentare werden in UML durch einen Kasten mit Eselsohr
dargestellt, der mit dem Modellelement, auf das sich der Kommentar
bezieht, durch eine gestrichelte Linie verbunden ist.
• Vererbung
Vererbung ist eine Beziehung zwischen Klassen.
264
Eine Klasse kann
Methoden der empirischen Softwaretechnik
1 Grundlagen
sämtliche Eigenschaften (Attribute und Methoden) einer anderen
Klasse erben, d.h. als Kopie übernehmen. Es dürfen außerdem weitere
Eigenschaften hinzugefügt werden (Erweiterung) und geerbte Methoden modifiziert werden (Redefinition). Bei Einfachvererbung erbt eine
Klasse von genau einer anderen Klasse, bei Mehrfachvererbung von
mehreren Klassen.Die vererbende Klasse heißt Oberklasse, die erbende
Unterklasse.
Bei getypten objektorientierten Programmiersprachen wird die
Vererbungs-relation auf die korrespondierenden Typen übertragen:
Eine erbende Klasse definiert einen Subtyp des durch die vererbende
Klasse definierten Typs. Dadurch entsteht eine zur Vererbungsstruktur
der Klassen isomorphe Typstruktur.
In UML wird die Vererbung durch einen Pfeil mit einer dreieckigen Spitze angezeigt, der von der Unterklasse zur Oberklasse geht.
Geerbte Eigenschaften werden in der Darstellung der Unterklasse nicht
wiederholt.
Figure 2: Vererbung
Vererbung ist ein mächtiges Konzept; durch sie kann viel redundante
Implementierung eingespart werden. Durch Erben kann aber die
Kapselung durchbrochen werden, weil eine Unterklasse Zugriff auf die
Implementierung der Oberklasse erhält. Außerdem ist die Unterklasse
durch das Erben stark an ihre Oberklasse gekoppelt: Jede Änderung
der Oberklasse betrifft auch die Unterklasse.
1.2
1.2.1
Entwurf
Definition
Der Begriff Entwurf (oder Design) hat zwei verschiedene Bedeutungen. Zum
einen bezeichnet er die Gestaltung oder Formgebung eines Gegenstands; bei
Methoden der empirischen Softwaretechnik
265
Experimente: Objektorientierung
Software entspricht das vor allem der Gestaltung der Benutzungsoberfläche
(user interface design). Diese Tätigkeit ist Teil der Spezifikationsphase. [6]
Die Abbildung 3.
Entwicklung.
zeigt die Einbettung des Entwurfs in die Software-
Figure 3: Einbettung des Entwurfs in die Software-Entwicklung
Der Entwurf transformiert die Anforderungsspezifikation in eine Entwurfsbeschreibung, die in der Implementierungsphase in Code für ein
ausführbares Programm umgesetzt wird, der danach getestet und gewartet
wird.
Die Entwurfsbeschreibung ist ein wichtiges Dokument für alle anderen
nachfolgenden Phasen. In der Implementierungsphase dient der Entwurf als
Vorgabe, in der Wartung wird er für das Verstehen der Implementierung
benötigt. Innerhalb des Entwurfs können die Aktivitäten Architekturentwurf
und Komponentenentwurf unterschieden werden.
1.2.2
Entwurfsprozess
Abbildung 4. zeigt den Entwurfsprozess. Die Anforderungsspezifikation ist
nicht das Einzige, was den Entwurfsprozess steuert. Hinzu kommen noch
Entwurfseinschränkungen und die Entscheidungen des Entwerfers, die durch
sein Wissen und seine Erfahrung bestimmt sind. Auch die vorhandene Infrastruktur hat Einfluss auf den Entwurfsprozess: Beispiels-weise spiegelt
266
Methoden der empirischen Softwaretechnik
1 Grundlagen
die Struktur des Entwurfs oft die Struktur der entwickelnden Organisation
wieder.
Figure 4: Entwurfsprozess
Der Entwurfsprozess besteht aus drei Phasen (Divergenz, Transformation
und Konvergenz)
• Divergenz (Analyse):
Problemanalyse, Suchraum definieren.
Das Problem wird analysiert und in seine Bestandteile zerlegt.
Anschließend wird ein Suchraum für die möglichen Lösungen aufgespannt. Dies geschieht in der Regel implizit im Kopf des Entwerfers.
Der Suchraum kann aber auch explizit dargestellt werden. Er enthält
die Menge aller Entwurfsmöglichkeiten zu einer Menge gegebener
Anforderungen. Die Dimensionen des Entwurfsraums reflektieren
alternative Anforderungen, Entwurfsentscheidungen (z. B. bestimmte
Architektursmuster) und Bewertungskriterien (z.B. hinsichtlich
Funktion oder Leistung), sie sind in der Regel nicht voneinander
unabhängig. Ein konkreter Entwurf wird durch einen Punkt im
Entwurfsraum repräsentiert.
• Transformation (Synthese):
Generieren von Lösungsalternativen innerhalb des Suchraums.
Innerhalb des in der ersten Phase generierten Suchraums wird nach
Lösungsmöglichkeiten gesucht, die den Anforderungen entsprechen.
Im Entwurfsraum werden die Entwurfsmöglichkeiten in der Regel
nur die sinnvollen Alternativen durch Einordnung auf den einzelnen
Methoden der empirischen Softwaretechnik
267
Experimente: Objektorientierung
Dimensionen positioniert.
Indem bisher unbesetzte Bereiche im
Entwurfsraum betrachtet werden, können häufig weitere Alternativen
gefunden werden, die bisher übersehen wurden. Untersucht man
die Korrelationen zwischen den Dimensionen, insbesondere zwischen
Entwurfsentscheidungen und Bewertungen kann die Zahl der sinnvollen
Alternativen schnell eingeschränkt werden, was die Suche beschleunigt.
• Konvergenz (Evaluation):
Bewertung der Lösungsalternativen und Auswahl einer Lösung.
Die Lösungsalternativen der vorhergehenden Phase werden bewertet, und die Lösung mit der besten Bewertung wird ausgewählt.
Durch Einsatz von Checklisten kann bei der Bewertung sichergestellt
werden, dass alle erforderlichen Kriterien erfüllt sind. Die Bewertung
der Alternativen kann auch auf quantitativer Basis durchgeführt
werden, z.B. durch Vergabe von Nutzwerten für Bewertungskriterien
(Nutzwertanalyse). Bei einer Nutzwertanalyse ist also sicherzustellen,
dass alle relevanten Aspekte berücksichtigt und Aspekte korrekt
gewichtet sind, um keine irreführenden Resultate zu erhalten.
1.3
Klassifikationen des Entwurfs
In diesem Abschnitt werden verschiedene Aspekte betrachtet, nach denen
sich der Entwurf klassifizieren lässt: Strategie, Aktivität, Abstraktionsebene
und Struktur.
1.3.1
Strategien
Die Strategie bestimmt, auf welche Weise der Entwurf angegangen wird. Hier
wird die historische Entwicklung hin zur objektorientierten Strategie grob
chronologisch dargestellt.
Kein Entwurf/Impliziter Entwurf Zu Anfang wurden nur kleine Programme in Maschinencode oder Assembler geschrieben. Der Entwurf, sofern
vorhanden, war im Wesentlichen das Programm in einem Pseudocode, der
einer höheren Programmiersprache entsprach. Der Bedarf für einen expliziten
Entwurf auf einer höheren Abstraktionsebene war nicht vorhanden oder nicht
klar. Im Zusammenhang mit der Softwarekrise wurde deutlich, dass ein expliziter Entwurf vorteilhaft ist, wenn komplexere Programme erstellt werden.
268
Methoden der empirischen Softwaretechnik
1 Grundlagen
Strukturierter Entwurf Die Aufteilung des Systems wird vorgenommen anhand von Funktionen (funktionsorientierter Entwurf). Die Granularität des
Entwurfs ist die Prozedur. Datenstrukturen dienen zur Modellierung der
Daten. Eingeführt wurden auch die Ideen der Abstraktion, der Hierarchie
und der Schichten.
Modulorientierter/Objektbasierter Entwurf Das System wird in Module
aufteilt. Unter einem Modul verstand man ursprünglich (beim strukturierten Entwurf) eine Prozedur. Beim modulorientierten Entwurf fasst man,
beeinflusst durch das Geheimnisprinzip und die Theorie der abstrakten Datentypen, Prozeduren und Datenstrukturen zu größeren Einheiten (Modulen)
zusammen. Module, die Datenstrukturen mit den notwendigen Funktionen
auf diesen Datenstrukturen zusammenfassen und kapseln, werden auch als
Objekte bezeichnet; man spricht dann von objektbasiertem Entwurf.
Der objektorientierte Entwurf Der objektorientierte Entwurf nimmt zum
objektbasierten Entwurf noch das Konzept von Vererbung und den damit
zusammenhängenden Polymorphismus hinzu. Damit kann der objektorientierte Entwurf als eine Weiterentwicklung der bisher verfolgten Entwurfsstrategien angesehen werden. Allerdings scheint dennoch ein Umdenken
beim Entwerfen erforderlich zu sein, weshalb auch häufig von einem Paradigmenwechsel die Rede ist.
1.3.2
Aktivitäten
Wie bereits in Abbildung 3. gezeigt können in der Entwurfsphase zwei verschiedene Aktivitäten unterschieden werden: Architekturentwurf und Komponentenentwurf.
Der Architekturentwurf Der Architekturentwurf entwickelt die grobe
Struktur der Lösung, die Architektur. Die wesentlichen Komponenten sind
dabei in der Regel der funktionale Kern, die Benutzungsoberfläche und die
Datenhaltung. Außerdem wird die Verteilung der Komponenten auf Rechnerknoten festgelegt. Das Vorgehen beim Architekturentwurf ist wie folgt: Das
System wird zunächst hierarchisch in Subsysteme zerlegt, die verschiedene
Aufgaben innerhalb des Systems wahrnehmen. Diese Subsysteme werden
verfeinert, bis man zu den Atomen des Architekturentwurfs, den Komponenten, gelangt. Die Beziehungen zwischen den Komponenten, die Konnektoren,
werden identifiziert. Dokumentiert werden schließlich die Subsysteme, die
Komponenten, die Konnektoren und ihre Interaktion zur Laufzeit.
Methoden der empirischen Softwaretechnik
269
Experimente: Objektorientierung
Komponentenentwurf Der Komponentenentwurf legt zunächst die
Schnittstellen der Komponenten nach außen fest.
Außerdem werden
wichtige Details für die Implementierung bestimmt, vor allem die zu
verwendenden Algorithmen und Datenstrukturen (Feinentwurf). In der
Praxis entstehen Architektur- und Komponentenentwurf eher parallel als
sequentiell, da beim Komponentenentwurf häufig Fehler oder Schwächen im
Architekturentwurf identifiziert werden; insbesondere müssen häufig andere
Komponenten angepasst werden, mit denen die Komponente interagieren
soll.
1.3.3
Abstraktionsebenen
Anhand des Abstraktionsgrads des Entwurfs kann zwischen logischem und
physischem Entwurf unterscheiden werden.
Der logische Entwurf Der logische Entwurf abstrahiert vom konkreten
Kontext der geplanten Implementierung, z. B. der Plattform (Rechner, Betriebssystem, Netzwerke) und anderen Systemen, mit denen das System interagieren soll (z. B. Datenbank, Middleware). Auf dieseWeise entsteht ein
implementierungsneutraler Entwurf, der in dieser Form nicht direkt implementierbar ist.
Physischer Entwurf Die Brücke vom logischen Entwurf zur Implementierung schlägt der physische Entwurf. Die im logischen Entwurf offen gelassenen Realisierungsentscheidungen werden auf der Basis von Anforderungen durch Kunden und Management, Kostenaspekten ( z. B.
Anschaffungs- und Betriebskosten, Einarbeitungszeit der Entwickler und Benutzer ) und Effizienzüberlegungen ( Laufzeit und Speicherbedarf ) gefällt.
Der Vorteil der Trennung zwischen logischem und physischem Entwurf ist,
dass sich der Entwerfer zunächst keine Gedanken um Implementierungsprobleme und Effizienz machen muss, sondern sich auf die Aufteilung der Funktionalität auf Komponenten konzentrieren kann.
1.3.4
Strukturen
Beim objektorientierten Entwurf kann zwischen statischer und dynamischer
Struktur unterschieden werden. Die statische Struktur beschreibt den Aufbau des Programms zur Übersetzungszeit, während die dynamische Struktur
den Aufbau des Programms zur Laufzeit beschreibt.
270
Methoden der empirischen Softwaretechnik
1 Grundlagen
Statische Struktur Die statische Struktur besteht aus Klassen, Interfaces
und Paketen sowie ihren Beziehungen untereinander. Zu jeder Klasse und
zu jedem Interface werden Attribute und Operationen angegeben. Zwischen
Klassen und Interfaces können verschiedene Beziehungen bestehen: Es
lassen sich Benutzungsbeziehung,Vererbungsbeziehung, Realisierung und
Assoziation (mit ihren Spezialfällen Aggregation und Komposition) unterscheiden. Die Pakete dienen vor allem der hierarchischen Strukturierung der
Klassen und Interfaces.
Die statische Struktur wird in UML vor allem mit Klassendiagrammen beschrieben. Bei einer objektorientierten Implementierung stimmt die
Codestruktur in hohem Maße mit der statischen Struktur überein, da der
objektorientierte Code ebenfalls klassenorientiert ist.
Dynamische Struktur Die dynamische Struktur entsteht beim Ablauf des
Programms. Sie wird vor allem durch die vorhandenen Objekte geprägt, die
Instanzen der Klassen aus der statischen Struktur sind. Die Objekte haben
Beziehungen, schicken einander Nachrichten, ändern ihren Zustand, erzeugen
neue Objekte oder zerstören vorhandene. Die Verteilung der Objekte auf
unterschiedliche Rechnerknoten spielt für die dynamische Struktur ebenfalls
eine Rolle. Jeder Zustand des Systems während der Ausführung ist eine
Ausprägung der statischen Struktur.
Im Gegensatz zur statischen Struktur ist die dynamische Struktur dem Code
nur sehr schwer zu entnehmen. Zum einen besteht sie aus einer Vielzahl von
Objekten, die untereinander in den unterschiedlichsten Beziehungen stehen.
Das Objekt-Netzwerk ist sehr komplex und verändert sich laufend über die
Zeit, so dass es nur in Ausschnitten verstanden werden kann. Zum anderen
ist die Funktion über den Code verstreut.
Ursache für die Delokalisierung ist, dass die Lösung datenorientiert erstellt wird. Dies ist sinnvoll, um eine bessere Abstraktion (im Sinne
abstrakter Datentypen) zu erreichen. Durch die Fokussierung auf die Daten
wird aber die Funktion in kleine Teile zerlegt, die sich den jeweiligen Daten
zuordnen lassen. Die Verteilung der Funktion wird durch Vererbung noch
verstärkt, weil man die Methoden zu den Operationen einer Klasse nicht
an einem Ort findet, sondern sich diese aus der gesamten Vererbungshierarchie zusammensuchen muss. Dynamisches Binden erschwert zusätzlich
eine statische Analyse des Codes, da oft nicht klar ist, welche Methode
tatsächlich aufgerufen wird.
Methoden der empirischen Softwaretechnik
271
Experimente: Objektorientierung
Gerade weil die dynamische Struktur im Code schlecht dokumentiert
ist, muss sie im Entwurf hinreichend beschrieben werden, denn sie wird
später zum Verständnis des Codes benötigt werden. Die Dokumentation
kann z. B. in Form von Szenarien mit einigen Objekten und Aufrufsequenzen ihrer Methoden erfolgen. In UML dienen zur Beschreibung der
dynamischen Struktur vor allem Objektdiagramme, Sequenzdiagramme,
Kollaborationsdiagramme, Zustandsdiagramme und Aktivitätsdiagramme.
1.4
Entwurfsmuster
Ein Entwurfsmuster (Design Pattern) [5]beschreibt eine in der Praxis
bewährte Lösung für ein Entwurfsproblem.
Das definieren MikroArchitekturen, d. h. kleinere Einheiten innerhalb einer Architektur1 . Sie
bieten abstrakte Lösungen für das Zusammenspiel weniger Komponenten an.
Häufig geht es um die Entkopplung einzelner Komponenten, um eine bessere
Änderbarkeit zu erreichen.
2
Entwurfsqualität
2.1
Perspektiven der Entwurfsqualität
Entwurfsqualität ist durch verschiedene Perspektiven geprägt:
1. Zeitliche Perspektive: kurz- oder langfristig
2. Interessengruppe: Kunde, Anwender, Entwickler, Projektmanager oder
Projekteigentümer
3. Qualitätssicht: transzendent, produktbezogen, benutzerbezogen, herstellungsbezogen oder kostenbezogen
Es ist praktisch nicht möglich, für jede dieser Perspektiven alle Möglichkeiten
in einem einzigen allgemeinen Modell zusammenzubringen.
2.2
Entwurfsregeln
Um die gewünschten Eigenschaften des Entwurfs in hohem Maße zu erreichen, wurden Unmengen von Ratschlägen publiziert: Methoden, Prinzipien,
Heuristiken, Entwurfsmuster und vieles andere mehr. In diesem Abschnitt
1
Defn: Die Architektur definiert also eine Struktur, die aus Komponenten und ihren
Beziehungen (Konnektoren) besteht.
272
Methoden der empirischen Softwaretechnik
2 Entwurfsqualität
sollen die Prinzipien und Heuristiken genauer betrachtet werden, da sie so
etwas wie den Erfahrungsschatz des objektorientierten Entwurfs darstellen.
Daher können aus ihnen Kriterien für einen guten Entwurf gewonnen werden.
• Prinzipien
Hier werden einige Prinzipien für den objektorientierten Entwurf, von
denen viele aus dem strukturierten Entwurf übernommen wurden kurz
vorgestellt.
• Heuristiken
Eine Heuristik ist eine Daumenregel, die meistens funktioniert, aber
nicht immer optimale Ergebnisse liefert. Daher ist eine Heuristik im
Gegensatz zum Prinzip nicht allgemein gültig, sondern es muss anhand
des Kontextes entschieden werden, ob ihr Einsatz an einer bestimmten
Stelle im Entwurf sinnvoll ist.
2.3
2.3.1
Beispiele für OOD-Qualitätsmodelle
Coad und Yourdon
• Coad und Yourdon [1] geben einige Kriterien an, die bei einer Entwurfsbewertung angewendet werden sollen. Ihrer Meinung nach werden Entwurfskriterien benötigt, um das Entwickeln eines schlechten Entwurfs
zu verhindern. Guter Entwurf bedeutet für sie eher, schlechte Eigenschaften zu vermeiden, als aus dem Stand einen perfekten Entwurf
abzuliefern. Letzteres sei nämlich völlig unrealistisch.
Kopplung (coupling) Coad und Yourdon haben zwei Arten der
Kopplung: durch Interaktion (entspricht der Kopplung durch Verwendung) und durch Vererbung. Um eine geringe Interaktionskopplung zu erreichen, wird vorgeschlagen, die Anzahl der versendeten
und empfangenen Nachrichten zuminimieren und die Anzahl der Parameter einer Nachricht auf drei zu limitieren. Die Delegation von
Nachrichten an andere Objekte wird als Ursache für unnötige Interaktionskopplung angesehen. Die Vererbungskopplung soll hingegen hoch sein. Die Vererbung spiegelt vornehmlich Generalisierungs/Spezialisierungsbeziehungen. Das Überschreiben von geerbten Attributen oder ein Erben ohne Erweiterung sind Indikatoren für eine
geringe Vererbungskopplung, da keine wirkliche Spezialisierung vorliegt.
Methoden der empirischen Softwaretechnik
273
Experimente: Objektorientierung
Zusammenhalt (cohesion) Drei Ebenen des Zusammenhalts werden
unterschieden: Methode, Klasse und Vererbungshierarchie. Methoden sollten nur genau eine Funktion haben. Klassen sollten nur Attribute und Methoden haben, die aufgrund der Verantwortlichkeiten
der Klasse notwendig sind; und diese Attribute und Methoden sollen
zusammenhängen. In der Vererbungshierarchie schließlich sollen nur
echte Spezialisierungen vorkommen.
Wiederverwendung (reuse) Die Wiederverwendung vorhandener
Artefakte (z. B. Klassen, Komponenten, Bibliotheken, Entwürfe) kann
die Kosten senken und die Qualität erhöhen.
Klarheit (clarity) Der Entwurf muss verständlich sein, um seine Verwendung und Wiederverwendung zu fördern. Als Maßnahmen werden
die Verwendung eines einheitlichen Vokabulars, eines einheitlichen Stils
(insbesondere bei Schnittstellen) und die klare Zuordnung von Verantwortlichkeiten zu Klassen genannt.
Einfachheit (simplicity) Methoden, Objekte und Klassen sollen so
einfach wie möglich sein. Methoden sollten nur wenige Anweisungen
umfassen. Objekte sollten so wenig wie möglich andere Objekte kennen müssen, um ihren Zweck zu erfüllen. Klassen sollten möglichst
wenig Attribute und eine kleine Schnittstelle haben sowie klare Verantwortlichkeiten besitzen.
Größe (system size) Die Größe des Gesamtsystems sollte möglichst
klein sein, um die Handhabbarkeit zu verbessern. Je größer das System wird, desto größer wird das Risiko, dass das Entwurfsteam den
Entwurf nicht mit einem wohlstrukturierten, eleganten Ergebnis abschließen kann. Coad und Yourdon geben dafür eine Obergrenze von
etwa hundert Klassen an.
Eleganz (elegance) Die Autoren geben zu, dass dieses Kriterium von
allen am schlechtesten messbar ist. Weil der Begriff der Eleganz in der
Praxis immer wieder auftauche, müsse er aber von Bedeutung sein. Sie
geben zwei Beispiele für Eleganz an: wiederkehrende Muster im Entwurf und Ähnlichkeit der Entwurfsstruktur zur Struktur der Realität.
274
Methoden der empirischen Softwaretechnik
2 Entwurfsqualität
• Zur Entwurfsbewertung schlagen Coad und Yourdon Reviews vor. Zum
einen sollen sich diese an Szenarien orientieren, die mit den Klassen
durchgespielt werden. Außerdem sollten kritische Erfolgsfaktoren wie
Wiederverwendbarkeit, Effizienz und Implementierbarkeit geprüft werden.
2.3.2
Erni
• Ziel
Erni (1996; s. a. Erni und Lewerentz, 1996) definiert ebenfalls ein Qualitätsmodell nach dem FCM-Schema. Da das Modell zur Bewertung von
Rahmenwerken dienen soll, ist es auf den Bereich der Wiederverwendbarkeit beschränkt.
• Aufbau
Die Ebene der Kriterien wird in zwei Ebenen aufgeteilt: Entwurfsprinzipien und Entwurfsregeln. Auf dieseWeise kann das Modell die
zugrunde liegenden Prinzipien und Regeln reflektieren, so dass die Messungen auch gleich Verstöße gegen die Regeln und Prinzipien aufzeigen.
Falls die Werte bestimmter Metriken nicht im gewünschten Bereich
liegen, wird es dadurch für den Entwerfer einfacher, festzustellen, was
das Problem ist und was geändert werden sollte.
Methoden der empirischen Softwaretechnik
275
Experimente: Objektorientierung
Figure 5: Qualitätsmodell von Erni
• Ergebnis
Zu den Metriken werden Schwellenwerte angegeben, die aus der Literatur oder aus Erfahrung stammen. Für manche Metriken ist es allerdings sinnvoller, eine erwünschte Richtung (z. B. so groß wie möglich)
anzugeben als einen oberen oder unteren Schwellenwert. Dann werden
Schwellenwerte gewählt, die sich aus dem Mittel und der Standardabweichung der Messwerte berechnen (im Beispiel die Summe aus Mittel und Standardabweichung). Mit Hilfe der Schwellenwerte können
die Messwerte in gut/schlecht oder akzeptabel/inakzeptabel unterteilt
werden.
276
Methoden der empirischen Softwaretechnik
2 Entwurfsqualität
2.3.3
Gillibrand und Liu
• Ziel
Gillibrand und Liu geben ein rudimentäres Qualitätsmodell für den
objektorientierten Entwurf an. Zu diesen Faktoren werden Kriterien
angegeben, für die wiederum eine Reihe von Metriken angegeben wird.
• Aufbau
Das Modell enthält die drei Faktoren Zuverlässigkeit, Komplexität und
Wiederverwendbarkeit. Abbildung 6. zeigt den Aufbau des Modells.
Der Begriff Zuverlässigkeit wird hier in einem völlig anderen Sinne verwendet: Er bezeichnet die Korrektheit des Entwurfs in Bezug auf die
Spezifikation. Für die anderen beiden Faktoren wird keine Definition
angegeben, da wohl irgendeine übliche Definition angenommen wird.
Übrigens bedeutet eine höhere Zuverlässigkeit oder Wiederverwendbarkeit eine höhere Qualität, während eine höhere Komplexität eine
niedrigere Qualität bedeutet. Eine solche Gegenläufigkeit der Faktoren
ist -schon aus psychologischen Gründen -keine gute Idee. Statt Komplexität wäre wohl Einfachheit die bessere Wahl gewesen.
Figure 6: Qualitätsmodell von Gillibrand und Liu
• Ergebnis
Die Kriterien werden nicht näher erläutert, dafür die Metriken ausführlich. Die Bewertung eines Kriteriums ergibt sich aus den Werten
seiner Metriken, die gewichtet werden sollen. Konkrete Gewichte geben
die Autoren aber nicht an. Eine Gewichtung soll ebenfalls erfolgen, um
aus den Werten der Kriterien Werte für die Faktoren zu erhalten. Explizite Zusammenhänge zwischen Faktoren und Kriterien fehlen aber in
Methoden der empirischen Softwaretechnik
277
Experimente: Objektorientierung
der Beschreibung, Gewichte werden auch nicht genannt. Es gibt zwar
eine Diskussion, welche Metriken Einfluss auf welche Faktoren haben
-wie diese Einflüssse mit den Kriterien zusammenhängen, bleibt aber
unklar. Es wird nur gesagt, dass alle fünf Kriterien für jeden Faktor
relevant sind.
2.3.4
Bansiya und Davis
• Zeil
Bansiya und Davis haben ein hierarchisches Qualitätsmodell für den
objektorientierten Entwurf namens QMOOD (Quality Model of ObjectOriented Design) entwickelt.
• Aufbau
Das Modell besteht aus drei Ebenen: Qualitätsattribute, Entwurfseigenschaften und Metriken.Basis der Bewertung ist ein in C++ dokumentierter Entwurf.Auf diesen Dateien werden mit Hilfe des Werkzeugs
QMOOD++ Metriken erhoben. Jede dieser Metriken ist genau einer
Entwurfseigenschaft zugeordnet. Die Entwurfseigenschaften beeinflussen die Qualitätsattribute positiv oder negativ. Für die Stärke
des Einflusses geben die Autoren Gewichte an, so dass sich aus den
Metriken Qualitätskennzahlen für die Qualitätsattribute berechnen
lassen.
• Ergebnis
Die Gesamtbewertung ergibt sich durch Aufsummieren der Qualitätskennzahlen.
278
Methoden der empirischen Softwaretechnik
2 Entwurfsqualität
Figure 7: Qualitätsmodell von Bansiya und Davis
2.4
Zusammenfassung der Exprimente
Wie die vorgestellten Beispiele zeigen, gibt es kein einheitliches Modell zur
Bewertung objektorientierter Entwürfe. Es gibt zwar einige Kriterien, die
öfter auftreten (z. B. Kopplung und Zusammenhalt) Diese unterscheiden
sich aber jeweils in ihren Definitionen. In der Struktur der Modelle ist keine
klare Trennung der Detaillierungsebenen (Methode, Klasse) erkennbar.
Außerdem werden die Systemebene kaum und die Paketebene gar nicht
betrachtet. Stattdessen ist die Sichtweise meist auf Klassen und ihre
Bestandteile fokussiert. Die Beziehungen zwischen Klassen (Vererbung,
Assoziation) werden selten explizit und oder gar detailliert betrachtet.
Nur die letzten drei Modelle enthalten eine Quantifizierung. Die Quantifizierung bei Gillibrand und Liu ist allerdings nur fragmentarisch
dokumentiert und daher unbrauchbar. Außerdem deckt das Modell nur
einen kleinen Teil der relevanten Qualitätsattribute ab. Nur bei Bansiya
und Davis gibt es eine Quantifizierung für alle Ebenen.
Methoden der empirischen Softwaretechnik
279
Experimente: Objektorientierung
3
Ein Modell für den Objektorientierten Entwurf
Der folgende Abeschnitt beschreibt das Object-oriented Design
Model(ODEM). Um einen objektorientierten Entwurf bewerten zu können,
muss man zunächst festlegen, was man genau darunter versteht. Ralf
Reißing hat in seiner Abhandlung [4] das Object-Oriented Design Model
(ODEM) entwickelt. ODEM enthält die Teile des objektorientierten Entwurfs, die als für die Bewertung relevant erachtet werden. Dabei wird von
Entwurfsartefakten ausgegangen, die typischerweise vorhanden sind. ODEM
kann auch für die formale Definition von Metriken auf diesen Artefakten
verwendet werden.
3.1
Grundlagen
UML ist der Standard für die Darstellung Objektorientierter Entwurf, Und
daher muss eine Integration von UML in ODEM stattfinden. Daher baut
ODEM auf den Informationen auf, die sich aus einer Entwurfsdarstellung in
UML, d. h. einem UML-Modell, gewinnen lassen.
Abbildung 8.
zeigt die konzeptionelle Struktur von ODEM. ODEM
beruht auf dem UML-Metamodell. Für die Verwendung in ODEM wird
das UML-Metamodell auf den tatsächlichen Bedarf reduziert. Zusätzlich
werden nützliche, aus den Bestandteilen des UML-Metamodells abgeleitete
Modellelemente eingeführt. Diese dienen vor allem dazu, als Abstraktionsschicht die Komplexität des UML-Metamodells nach außen zu verbergen.
Außerdem sind sie praktisch bei der Definition von Metriken.
Figure 8: Konzeptionelle Struktur von ODEM
280
Methoden der empirischen Softwaretechnik
4 Zusammenfassung
3.2
Kernelemente von Object-Oriented Design Model
(ODEM)
Abbildung 9. zeigt die Kernelemente von ODEM mit ihren Attributen und
Beziehungen als UML-Klassendiagramm.
Figure 9: Der Kern von ODEM
4
Zusammenfassung
Diese Ausarbeitung beschäftigt sich nicht nur die Begriffe des objektorientierten Entwurfs ,sondern auchmit der Bewertung des Objektorientierten
Entwurfs.
Zuerst führen die Begriffe der Objektorientierung und Entwurf im ersten
Kapitel ein. Die Objektororientierung haben drei Eigenschaften: Objekte,Klassen und Vererbung. Der Begriff des Objekts spielt die zentrale
Rolle. Eine Klasse definiert die Attribute und Methoden ihrer Objekte, und
Vererbung ist eine Beziehung zwischen Klassen. Dann weiter beschäftigt sich
mit verschiedenen Aspekten des objektorientierten Entwurfs (object-oriented
design, OOD). Es wird definiert, was Entwurf ist und welche Arten von
Entwurf es gibt.
Anschließend wird auf Entwurfsregeln ( Prinzipien und Heuristiken ) des
objektorientierten Entwurfs eingegangen. Diese enthalten Erfahrungswissen,
Methoden der empirischen Softwaretechnik
281
Experimente: Objektorientierung
wie man zu einem guten (bzw. besseren) Entwurf kommt.Dazu wird vier
Beispiele vorgestellt. Jedes Beispiel wird aus das Ziel, der Aufbau und das
Ergebnis besteht. Dazu kann man gut verstehen, wie die objektorientierten
Entwurf läuft. Und am Ende zeige ich, was die ODEM ist und wie die
aufbauen.
References
[1] Briand, L.; Bunse, C.; Daly, J.: A Controlled Experiment for Evaluating
Quality Guidelines on the Maintainability of Object-Oriented Designs.
IEEE Transactions on Software Engineering, 27 (6), IEEE Press, 2001.
[2] Glinz,M.: Spezifikation und Entwurf von Software
[3] Chernuchin,D.;Dittrich,G.: Aspekte der Objektorientierten Modellierung am Beispiel Evolutionärer Algorithmen
[4] Reißing, R. (2001): Towards a Model for Object-Oriented Design Measurement. In: Brito e Abreu, F. et al. (eds.):Proceedings of the 5th
International ECOOP Workshop on Quantitative Approaches in ObjectOriented Software Engineering(Budapest, June 2001), 71-84.
[5] Entwurfsmuster aus Wikipedia, der freien
”http://de.wikipedia.org/wiki/Entwurfsmuster”
Enzyklopödie:Von
[6] http://de.wikipedia.org/wiki/Entwurf
282
Methoden der empirischen Softwaretechnik
Experimente auf Designebene
Yu Yin
Betreuer: Dirk Wilking
Abstract
Der Begriff der Empirie stammt aus dem Griechischen und
bedeutet ”auf Erfahrung” beruhend. Er steht damit im Gegensatz zur
Theorie. ”Empirisch” bedeutet somit aus der Erfahrung, Beobachtung
oder dem Experiment entnommen. Unter empirischer Softwaretechnik
versteht man also die praktische Durchführung von Experimenten,
Fallstudien, usw. mit dem Zweck, vorher aufgestellte Hypothesen
zu ueberprüfen. In diesem Kapitel werden nach einer allgemeinen
Erklärung des Aufbaus und des Ablaufs einer empirischen Studie
drei Moeglichkeiten empirischer Vorgehensweisen genauer erklärt:
Experimente, Fallstudien und Surveys. Für jede Vorgehensweise
wird die Durchführung beschrieben und anhand eines Beispiels
verdeutlicht.
1
Einleitung
Der Zweck dieses Experimentes ist, dass es die Auswirkung des Verwendens
von OCL auszuwerten, und mit UML kombiniert.(Kategorie, Diagramme,
usw). Wie kann man ein Experiment aufbauen. Zuerst muss man wissen,
was die wichtigsten Schritte bei einem Experiment sind.( Fragestellung>Hypothesen->Versuchsplan->Stichprobe->Durchführung-> Auswertung
der Daten->Schluss auf Hypothese->Bericht).
• OCL
Experimente: Objektorientierung
Mit der OCL(Object Constraint Language)steht jetzt eine Sprache
zur Verfügung, die sich von herkömmlichen formalen Spezifikationssprachen deutlich unterscheidet. Die Betonung liegt hier weniger
auf der mathematischen Fundierung als auf der praktischen Anwendbarkeit. Mit Hilfe der OCL können präise Einschränkungen und
Bedingungen mit wenig Aufwand zu einem UML-Modell hinzugefügt
werden. Die Ursache für diesen pragmatischen Ansatz ist sicher in der
Herkunft dieser Sprache zu suchen: Sie ging aus einer Entwicklung der
Firma IBM hervor und ist seit der Version 1.1 Bestandteil der UML
der Object Management Group (OMG) ([1], [2]).
Die OCL hat gegenüber herkömmlichen Spezifikationssprachen
den wesentlichen Vorteil, dass es mit ihr möglich ist, ein bestehendes
UML-Modell inkrementell zu erweitern. Somit ist es von Dokumenten
der objektorientierten Analyse ausgehend nicht mehr nötig, die
Semantik des Modells, vor allem die in ihm definierte Typ- bzw.
Klassenhierarchie, umständlich in eine äquivalente Darstellung in
der Spezifikationssprache umzusetzen. Ausserdem können gezielt
diejenigen Aspekte präzise beschrieben werden, die aus den UMLDiagrammen nicht klar hervorgehen([3]). All dies kann in einer
wesentlich kompakteren Schreibweise ausgedrückt werden, als das bei
anderen Sprachen möglich ist. Das wird unter anderem durch eine
Bibliothek von vordefinierten Typen erreicht.
Ein anderer Punkt, der OCL zur breiteren Anwendung tauglich
macht, ist die Einfachheit der Sprache. Während bei anderen Spezifikationssprachen eine umfangreiche Vorbildung in mathematischer
Logik zum Verständnis erforderlich ist, ist OCL für einen mit Programmiersprachen vertrauten Leser nahezu intuitiv verständlich,
was man von anderen Spezifikationssprachen kaum behaupten kann.
Zusammenfassend kann aber trotzdem gesagt werden, dass die OCL
durchaus geeignet ist, in realen Projekten Verwendung zu finden, ohne
dass das durch die überdurchschnittlichen Sicherheitsansprüche eines
solchen projekts begründet werden müsste.
Der wesentliche Vorteil liegt in dem vergleichsweise geringen Aufwand,
der hiermit verbunden ist. Bis mit der OCL formale Spezifikationsmethoden Einzug in den Alltag der Softwareentwicklung halten,
sind aber noch einige Hürden zu bewältigen. Denn als reine Dokumentationssprache, die als Interpretationshilfe zu UML-Diagrammen
hinzugefügt werden kann, wird sich diese Sprache sicherlich nicht
284
Methoden der empirischen Softwaretechnik
1 Einleitung
durchsetzen.
OCL ist Bestandteil der UML und dient unter anderem der textuellen
Spezifikation von Invarianten in Klassendiagrammen, von Bedingungen
in Sequenzdiagrammen oder der Formulierung von Vor- und Nachbedingungen für Methoden. Ihre Syntax ist an die Programmiersprache
Smalltalk angelehnt. Sie ist seit der UML-Version 1.1 Bestandteil der
UML. Es werden 4 Arten von Constraints unterschieden: Invariants
müssen zu jeder Zeit für eine Instanz, Typ oder Interface gelten.
Preconditions müssen gelten zu dem Zeitpunkt an dem die Ausführung
der zugehörigen Operation beginnt. Postconditions müssen zu dem
Zeitpunkt gelten an dem die Ausführung der zugehörigen Operation
endet. Guards müssen gelten wenn ein Zustandsübergang beginnt.
Ein Constraint ist immer definiert im Rahmen eines Kontext. Dies
ist ein beliebiges Modell Entity, wie z.B. eine Klasse, ein Typ, ein
Interface oder eine Komponente. Man unterscheidet den Kontext Typ
und die Kontext Instanz.
Auf letzteren beziehen sich die Angaben eines Constraints. Z.B.
er kann festlegen, dass für eine Instanz der Klasse Banane der Wert
des Attributs Krümmung nicht grösser als X sein darf. Object
steht hier für eine Komponente eines beliebigen Systems, diese soll
genauer spezifiziert, definiert oder beschrieben werden. Constraint
steht für eine Begrenzung oder Einschränkung, diese kann maximale
oder minimale Werte annehmen. Beispielsweise die maximale Anzahl
gleichzeitiger Zugriffe auf eine Datenbank, oder die maximale Höhe
eines Bauobjektes. Language steht hier nicht für eine formale Computersprache, sondern vielmehr für eine auf jede Implementierung
anwendbare weniger formale Sprache.
• UML
Unified Modeling Language (häufig mit UML abgekürzt) ist eine
von der Object Management Group entwickelte und standardisierte
Beschreibungssprache, um Strukturen und Abläufe in objektorientierten Softwaresystemen darzustellen. Im Sinne einer Sprache
definiert die UML dabei Bezeichner für die meisten Begriffe, die im
Rahmen der Objektorientierung entstanden sind, und legt mögliche
Beziehungen zwischen diesen Begriffen fest.
Die UML definiert des weiteren grafische Notationsweisen für
diese Begriffe und für Modelle von Software oder anderen Abläufen,
Methoden der empirischen Softwaretechnik
285
Experimente: Objektorientierung
die man in diesen Begriffen formulieren kann. Die UML wurde am
19. November 1997 von der OMG als Standard akzeptiert und wird
seit dem von ihr weiterentwickelt. Im Juni 2003 wurde die jüngste
Version der UML, die Unified Modeling Language 2.0 oder UML2,
von der OMG als Entwurf veröffentlicht. Sie wurde im März 2005
verabschiedet.
Die UML beschreibt eine Menge von Diagrammen um die Architektur und Modellierung zu beschreiben. Verschiedene Ansätze
der Wissensrepraesentation verwenden ebenso die UML, insbesondere
UML Klassendiagramme. Die Sprache OCL um die Semantik von
UML Diagrammen formal beschreiben zu können. In dieser Arbeit
sollen die UML basierten Ansaetze zur Wissensrepraesentation insbes.
unter Verwendung der OCL untersucht werden.
• Design
Das Wort Design, zu Deutsch Gestaltung, bedeutet meistens Entwurf
und Formgebung, im Regelfall auch unter dem Gesichtspunkt der
Schönheit. Es ist ein Lehnwort aus dem Englischen, das wiederum
aus dem Lateinischen abgeleitet ist (designare = (be)zeichnen) und
in viele europäische Sprachen Eingang gefunden hat. Im Englischen und Französischen bedeutet design ”Gestaltung” oder ”Entwurf”,
während das italienische disegno ”Zeichnung” bedeutet. Im Gegensatz
zur deutschen Bedeutung des Design-Begriffes, die eher im formal liegt.
2
2.1
Experiment
Definition des Experimentes
Ein Experiment (Versuch, Beweis, Prüfung, Probe) ist ein wissenschaftlich
aufgebauter Versuch zur zielgerichteten Untersuchung einer unter definierten
Bedingungen reproduzierbar hervorgerufenen Erscheinung. Das Experiment
ist neben der genauen Beobachtung die wichtigste wissenschaftliche Methode,
um etwas über die Realitaet zu erfahren.
2.2
Planung und Design
Die Variablen, Prozeduren, Kontrollmechanismen und Auswahlverfahren zur
zufälligen Gruppenbildung werden in diesem Prozess festgelegt. Das Design
umfasst drei Aktivitäten, die iterativ durchgeführt werden:
286
Methoden der empirischen Softwaretechnik
2 Experiment
• Festhalten des Ziels und informelle Formulierung der Hypothesen
• Definieren der Variablen des Experiments
• Auswählen eines Designs mit minimalen Kosten
2.3
Implementierung und Vorbereitung
Das ist auch Vorbereiten aller benoetigten Materialien und Treffen organisatorischer Massnahmen.
2.4
Durchführung
Alle Qualitätskontrollen müssen angegeben werden, die die Vollständigkeit
und Genauigkeit der Datenerfassung sicherstellen.
Bei Surveys muss
auch die Antwortrate erfasst und veröffentlicht werden. Weiters muss die
Repräsentativität der Antworten untersucht werden und der Einfluss der
nicht-Antworten. Die Ursachen für nicht-Antworten sind wichtig, da sie die
Ausgewogenheit der Ergebnisse beeinträchtigen können. Manchmal ist es
sinnvoll, die nicht-Antworten selbst zu untersuchen und bei einem Sample
die genauen Gründe herauszufinden, z.B. durch demographische Analysen
oder mittels telefonischer Kurzinterviews.
Bei beobachtenden Studien und Experimenten muss zusätzlich die Anzahl der Abbrecher erfasst werden. Es gibt verschiedene Gründe, warum
Subjekte aus einer Untersuchung aussteigen bevor diese abgeschlossen
ist: Zum Beispiel werden Subjekte einem anderen Projekt zugeteilt, sie
verlassen die Firma oder haben einfach kein Interesse weiter an der Studie
teilzunehmen. Solche Situationen müssen auf jeden Fall protokolliert werden.
2.5
Analyse der gewonnenen Daten
Es muss sichergestellt werden, dass die Daten die Anforderungen erfüllen,
die die durchgeführten Tests an sie stellen. Die verschiedenen statistischen
Verfahren stellen oft bestimmte Anforderungen an die Verteilung der untersuchten Daten. Es hat keinen Sinn, ein Verfahren anzuwenden, wenn diese
Anforderungen nicht erfüllt werden.
Methoden der empirischen Softwaretechnik
287
Experimente: Objektorientierung
2.6
Aufbereitung und Interpretation der Daten und
Veröffentlichung von Ergebnissen
Alle statistischen Methoden müssen beschrieben oder Referenzen auf
entsprechende Dokumente angegeben werden. Nur das verwendete Statistikpaket zu nennen ist hier nicht ausreichend, obwohl es natürlich auch
genannt werden sollte.
Man sollte, wenn möglich, die Rohdaten veröffentlichen. Da Studien
im Software Engineering oft im Rahmen realer Projekte durchgeführt
werden, können die Projektdaten natürlich nicht immer veröffentlicht werden. Dann sollten diese zumindest vertrauenswürdigen oder unabhängigen
Auditoren zugänglich gemacht werden. Jegliche Einschränkungen der Studie
sollen diskutiert und angegeben werden.
3
Beispiel des Experimentes
• Definition des Experimentes
Der Zweck dieses Experimentes ist, die Auswirkung des Verwendens
von OCL auszuwerten. Sie sind jedoch nicht in der Lage, eine
Kosten-Nutzen-Analyse durchzuführen, da die Aufwand in diesem
Experimentdesign konstant ist. Dieses ist ein typisches Experiment,
in dem Zeit normalerweise begrenzt ist, und die Studie werden in der
industriellen Einstellungen wahrscheinlich angefordert, um die Kosten
von OCL festzusetzen.
Analyse des Dokumentes ist das erste UML Modell, das in den
meisten Methodologie produziert wird. Und Design ist unterschiedlich,
weil der wichtige Schwerpunkt nicht architektonische Informationen
besorgt sondern die Funktionalität und die Logik des System ist.
• Planung und Design
In diesem Experiment untersucht man die Auswirkung von OCL nach
zwei abhängige Variablen:
Comprehension (C): Diese Variable nimmt die Fähigkeit der Themen,
um Fragen über die System Funktionalität und die Logik zu beantworten. Die übersicht sowie die Anzahl der korrekten Antwort wird in
einem Ausdruck von Fragebogen aufgezeichnet.
Maintainability (M):
288
Methoden der empirischen Softwaretechnik
3 Beispiel des Experimentes
Diese Variable konzentriert auf die Fähigkeit der Themen, um
festzustellen, welche Elemente der UML-Modelle nach Analyse die
änderung durchmachen müssen, die auf Beschreibungen basiert.
Dieses wird, während einer eine Stunde Session, gründete auf einem
sorgfältig entworfenen Fragebogen gemessen, in dem eine Anzahl von
Änderungen beschrieben werden und Themen erwartet werden, alle
betroffenen vorbildlichen Elemente zu verzeichnen.
Man kann auf die obere genannte Variablen die folgende Hypothese(H0) formulieren. Es gibt keinen Unterschied bezüglich des
Erfassens und der Haltbarkeit zwischen den Themen, die auf den UML
Dokumenten arbeiten, welche die OCL Bedingungen einschliessen und
ausschliessen (unten bezeichnet als variable Methode). Die alternative
Hypothese (h1) ist, dass OCL Leistung für unsere zwei abhängige
Variablen beeinflusst. Um exakter zu sein, sollte h1 angebunden
werden: man erwartet OCL, um Leistung zu erhöhen.
Ob OCL auf Datenanalyse benutzt wird, wollte man die Daten über
die Fähigkeit der Themen in Bezug auf UML modellieren(bezeichnete
Fähigkeit unten). Es ist so wichtig, dass die Schwankungen der
menschlichen Fähigkeit erhebliche Unterschied bezüglich der Resultate
verursachen. Dieses kann man eine Auswirkung von OCL auf unsere
abhängige Variablen verhindern. Man messt folgliche Fähigkeit, in
dem man die Grade der Kursteilnehmern von einem vorhergehenden
UML verwendet und direkt zur Handaufgaben denkt.
• Implementierung und Vorbereitung
Es gibt insgesamt 38 Kursteilnehmern, die in unserem registriert wurden. Die Kursteilnehmern waren mit den Konzepten der Verträge (vor
und Pfosten-Zustände) die konstante Zustand und der konstante Klasse
vertraut. Man sieht, keine Notwendigkeit um Kursteilnehmern auszusortieren, da Schwankungen der Fähigkeit auch in der industriellen Einstellungen anwesend sind. Das Experiment war ein Teil einer Übungen
des Kurses. Kursteilnehmern wurden erklärt, dass sie nicht auf Leistung geordnet würden, aber sie wurden erwartet, um ihre Aufgaben in
einer professionellen Weise durchzuführen, um die Punkte zu erreichen.
Die Punkte wurden Kurs zugewiesen. Die Kursteilnehmern beachteten,
dass man versucht, die Auswirkung von OCL sowie das Verbessern ihres
praktischen Trainings in UML auszuwerten. Aber sie berücksichtigten
nicht die genauen Hypothesen, die man prüft, oder welche Resultate
hofft man, zu erreichen.
Methoden der empirischen Softwaretechnik
289
Experimente: Objektorientierung
• Durchführung
Sie spezifizierten zuerst die Plannung des Experimentes: Die Kursteilnehmern wurden bis eine von 4 Gruppen zugewiesen, und die Aufgaben,
die sie über 4 Kurse(Lab)sind, und der Auftrag der Aufgaben werden
in Fig.1 zusammengefasst. Die Reihen stellen die vier folgenden Kurse
dar, die Kursteilnehmern (jeder Kurs, der eine Woche auseinander
ist. d.h jeder Kurs arbeitet selber eine Woche) die drei Aufgaben
durchzumachen. Sie durchführten, während die Spalten die 4 Gruppen
der Themen sind.
Figure1 stellen für jede Gruppe dar, welches System sie bearbeiten und ob sie OCL Begrenzungen haben. Merken Sie, dass dieses
Papier nur die Resultate dargestellt, die auf Kurse 2 und 4 bezogen
werden. Ob OCL die Entdeckungen von Mangel in den UML-Modellen
hilft, werden dargestellt [9].
Dieses Experiment betrifft nur einen Faktor mit Effekt vom Interesse für uns, ob OCL in die Datenanalyse verwendet wird. Die
Kursteilnehmern wurden folglich gruppiert, (”in die Blöcke” bestanden
aus 20 und 18 Kursteilnehmern), ob sie einen minimalen Grad von
B im vorhergehenden Kurs auf UML und OCL erreicht hatten.
Anerkanntermassen können sie auch mit anderer Weisen machen.
Aber der Fokus ist hier auf UML die Fähigkeit modelliert und als
Ausbilder ihrer vorhergehenden Kurse auf diesem Thema glauben sie,
dass es die beste Alternative ist. Jede Gruppen wurde beliebig nach
dem Zufall Kursteilnehmern von beiden Blöcken in den fast gleichen
Anteilen zugewiesen.
Es war auch für uns wichtig, um die Datenanalyse zu erleichtern,
dass jede Gruppen ungefähr von der gleichen Grösse ist. Für jede
Aufgabe arbeitete jedes Thema einzeln auf jedem der zwei Systeme
mit UML und OCL in einem Fall und nur UML im anderen. Jeder
Kursteilnehmer führte alle Aufgaben durch, die betreffend Erfassen
und Haltbarkeit auf beiden Systemen geplant wurden. Die Kursteilnehmern wurden auch am Zusammenarbeiten verhindert und dieses
könnte leicht überwacht werden, während Aufgaben in einem Kurs
durchgeführt wurden.
Das Grundprinzip dieser Arbeit war auf beiden Systemen: (1)
Sie maximieren die Zahl der Datenpunkten (Beobachtungen), um
290
Methoden der empirischen Softwaretechnik
3 Beispiel des Experimentes
statistische Energie zu erhöhen. (2)Sie versichern, dass die Unterschiede bezüglich der Kompliziertheit der Systeme nicht die Resultate
(zwar wählten uns Modelle ”der ähnlichen” Kompliziertheit) beeinflusst
wurden und (3) die Gelegenheit geben jedem Kursteilnehmer, das
gleiche Material zu erlernen. Jedoch wenn Versuchspersonen gebeten
werden, führen ähnliche Aufgaben der mehrmals (z.B. Auswirkung
Analyse) durch und verwenden die gleichen Techniken (z.B. OCL
Verträge). Wir sind abhängig von Lernen- oder Ermüdungeffecten
und mann muss sie sicherstellen nicht die Resultate verwirren. Dieses
wurde in zwei Möglichkeiten getan. Zuerst verwendeten erste Gruppen
OCL, das erste mal sie die Aufgabe durchführten, während die zweite
Gruppen so das zweite mal herum, dann kann man nicht mit der
Effekten von OCL verwirren. Sowie in Abschnitt (Analysis Procedure)
beschrieben, erklärt unser Verfahren von Datenanalyse auch Lerneffekte.
Sie verwendeten 4 Gruppen Teilnehmern anstelle von 2, um die
Effekte zu vermeiden (z.B. Effekt der Ermüdung). z.B. Wenn alle Teilnehmer an Gruppe 1 zuerst System mit OCL verwendet haben würden
(und dann das CD-System ohne OCL), während alle Teilnehmer an
Gruppe 2 mit non-OCL Dokumenten auf dem CD-System (und dann
mit OCL)begonnen haben würden. Sie könnten beobachten, dass
Leute in Gruppe 2 mehr Zeit das Wissen von UML und von OCL haben.
Anderes Resultat unserer Design ist, dass alle Gruppen jedes der
zwei Systeme zweimal in einer Reihe benutzen, manchmal mit OCL
zuerst oder zweite anfangen. Man kann folglich fragen, ob dieses eine
Drohung zur Gültigkeit der Resultate ist. Zuerst ist es wichtig zu
beobachten, wenn das System zweimal in einer Reihe benutzt wird.
Er soll eine andere Aufgabe durchführen, und die gesammelten Daten
werden geteilt und analysiert. Wenn es einen System die Effekt des
Lern gibt, können Gruppe 1 von Kurs 1 zur Kurs 2 gehen. Dieses ist
eine bessere Erfassen- und Haltbarkeitsleistung. Ausserdem erwarten
sie dass System Lerneffekt, um schwach zu sein, während die Kurse
eine Woche auseinander stattfinden und Kursteilnehmern nicht Zugang
zu den Dokumenten zwischen Kurse haben.
• Analyse der gewonnenen Daten
Sie beginnen zuerst mit etwas einfacher einleitender Analyse, die hilft,
unsere folgenden Analyse Schritte zu rechtfertigen. Abschnitte ( der
Prozess von Kurs 2 (C),der Prozess von Kurs 4 (C), die Erhaltung
Methoden der empirischen Softwaretechnik
291
Experimente: Objektorientierung
Figure 1: Design und Ausführung
von Kurs 2 (M) und die Erhaltung von Kurs 4 (M)) stellen dann
die Resultate der Datenanalyse hintereinander mit beschreibenden
Standardstatistiken dar[10]. Der Hauptgrund für das Betrachten jedes
Kurses soll separat die Lerneffekte erklären, die durch unsere einleitende Analyse vorgeschlagen werden, wenn man die Forschung Frage
über die Auswirkung von OCL beantwortet. In jedem Unterabschnitt
zeigen die Zahl von Tabellen der Statistik und Mittelwerte(Mittel).
Eröffende Analyse (Frage zu beantworten) soll geben, dass zwei
Leute in eine Gruppe T-test durchführen, der auf die Spielergebnisse
aller Kursteilnehmern basiert, wenn sie UML und OCL, und nur-UML
verwendet haben. Fig.2 zeigt, dass OCL eine statistisch bedeutende Auswirkung für Erfassung hat, obwohl beide Leuter (kleinen)
Unterschied von Spielergebnisse haben.
Figure 2: T-test zu Vergleich zwischen UML und OCL, und nur-UML
Um zu verstehen, ob Lerneffekte und der Effekte von OCL in diesem
Fall existieren. Sie führten einen T-test durch (die Fig. 4). Ob der
Unterschied der Spielergebnisse zwischen UML und OCL und nur-UML
haben, wurde OCL zuerst in Kurs 2 (d.h. OCL wurde benutzt, dass
es erste mal in der Aufgabe durchgeführt, bezeichnet als O-N) dann in
Kurs 4 verwendet.(d.h. OCL wurde verwendet, dass es zweite mal in
292
Methoden der empirischen Softwaretechnik
3 Beispiel des Experimentes
der Aufgabe durchgeführt wurde, bezeichnet als N-O). Fig.3 zeigt die
durchschnittliche Unterschied (d.h. Sie haben Unterschiede bezüglich
der Prozentsätze der maximalen Spielergebisse)zwischen N-O und O-N
sowie P-Werte.
Figure 3: die Auswirkung von Probe durch T-test über die Aufgabe
Fig.3 schlägt vor, dass es in OCL angewendet wird, einen bedeutenden
Effekt auf dem Unterschied zwischen UML und OCL und nur-UML
hat. Das heisst, dass der Profit von OCL O-N Kursteilnehmern kleiner
als N-O Kursteilnehmern ist. Zu uns schlägt dieses vor, dass im O-N
Fall anderen Effekt erstellt wird. Der Effekt kann nur Lerneffekte
sein, da alle weiteren plausiblen Effekte gesteuert worden(d.h. System,
Fähigkeit). Aus diesem Grund machen sie die Datenanalyse jedes
Kurses auf eine unabhängige Art und Weise, damit sie ein ähnliches
Niveau des Trainings und der Erfahrung bekommen.
der Prozess von Kurs 2 (C)
Die Resultate sind in Kurs 2 Erscheinen der Erfassung nur ein
schwacher Effekt(Pwert = 0.08 und E2=0.097)für Fähigkeit(Fig.5
ANOVA Tabelle-Kurs 2(C)). Es ist auch in Fig.4 (Beschreibung von
Statistik des Kurses 2(C)) und in Fig.6 (Graph der Mittelwerte von
Kurs 2(C)) sichtbar. Es ist interessant, dass alle Werte in Fig.4 unter
10 sind, ob OCL verwendend oder nicht hat. Dies heisst, dass die Fragen weniger als 50 Prozent richtig beantwortet wurden. Sogar haben
die technische Kursteilnehmern nicht gewohnt, die ausgebildete 4 Jahr
haben.
der Prozess von Kurs 4 (C)
In Kurs 4 sind die Resultate zu Kurs 2 sehr unterschiedlich (Fig.7
Beschreibung von Statistik des Kurses 4(C) und Fig.8 ANOVA
Tabelle-Kurs 4(C)).
Fähigkeit und Methode (OCL) haben offenbar einen positiven
Effekt (Pwert = 0.035 und 0.003, beziehungsweise). Über die Logik
Methoden der empirischen Softwaretechnik
293
Experimente: Objektorientierung
Figure 4: Beschreibung von Statistik des Kurses 2(C)
Figure 5: ANOVA Tabelle-Kurs 2 (C)
Figure 6: Graph der Mittelwerte von Kurs 2 (C)
294
Methoden der empirischen Softwaretechnik
3 Beispiel des Experimentes
des Systems fragt man, ob sie eine niedrige oder hohe Fähigkeit haben
(der Interaktion Effekt ist nicht bedeutend). Der Grösse Effekt der
Methode ist E2=0.27 stärker als der Effekt der Fähigkeit (E2=0.12).
Dieses Resultat wird weiter von Figure 9 veranschaulicht, dass der
Effekt von OCL ähnlich ist, ob Kursteilnehmern eine niedrige oder
hohe Fähigkeit haben. Der Unterschied zwischen Kurs 2 und Kurs 4
kann durch das Vergleichen der Resultate für die Erfassung erklärt
werden.
Die Analyse des übersichtlichen Fragebogens für Kurs 4 ist mit den
ANOVA Resultaten gleichbleibend: Die Themen, die OCL verwenden,
verbrachten weniger Zeit, die das System versteht (Man bekommt pvalue=0.007, mean(OCL)=3.87 gegen mean(non-OCL)=2.86) und für
die Fragen ist dieser Prozess leichter zu antworten (p-value=0.00003,
mean(OCL)=3.5 gegen mean(non-OCL)=1.92).
Sie merken, dass diese Resultate nicht in den Fragebögendaten
von Kurs 2 beobachtet wurden. Die Spielergebnisse sind unterschiedlich zwischen OCL und die non-OCL Gruppen. Ausserdem ist
die Fragen, die richtig beantwortet werden, sind die richtige Antworten
für die OCL Gruppe erheblich höher.
Man bekommt die Mittelwerte, die die Fähigkeiten von Kursteilnehmern in Kurs 4 (10, 13) und in Kurs 2 (7.1, 9.4) sind. (Fig.9): Die
Verwendung von OCL erhöht sich auf Durchschnitt um 46 Prozent und
43 Prozent. Diese Zahlen sind korrekter Antworten für die hohen und
niedrigen Fähigkeiten von Kursteilnehmern. Diese Resultate schlägt
vor, dass die Leute in Kurs 4 besser vorbereitet wurden. Man benutzt
aus OCL besser zu verwenden. Es kann durch die Tatsache erklärt
werden, die sie zusätzliche Zeit hatten, das Verständnis von OCL zu
reifen, und die Aufgabe wurden ausgeführt.
die Erhaltung von Kurs 2 (M)
Wie hat OCL keinen Effekt für Erfassen in Kurs 2 (Fig.11 ANOVA
Tabelle-Kurs2(M) Figure 12 Graph der Mittelwerte von Kurs 2(M)).
Die Resultate zeigen auch den Durchschnitt wie Erfassen, dass nur 30
Prozent richtig gekennzeichnet werden. Die Beschreibung von Statistik
des Kurses2(M) Figure 10) ist offenbar Anzeige, trotz ihres Trainings
Methoden der empirischen Softwaretechnik
295
Experimente: Objektorientierung
Figure 7: Beschreibung von Statistik des Kurses 4(C)
Figure 8: ANOVA Tabelle-Kurs 4(C)
Figure 9: Graph der Mittelwerte von Kurs 4(C)
296
Methoden der empirischen Softwaretechnik
3 Beispiel des Experimentes
und sie nicht völlig für die Aufgabe der zur Hand vorbereitet haben,
weil auf Dokumenten solcher Skala Kompliziertheit sind. Dieser kann
ein Grund sein, warum man keinen Effekt von allen Fähigkeit und
Methode sieht.
Figure 10: Beschreibung von Statistik des Kurses2(M)
Figure 11: ANOVA Tabelle-Kurs2(M)
Figure 12: Graph der Mittelwerte von Kurs 2(M)
die Erhaltung von Kurs4 (M)
Die Resultate sind für Kurs 4 sehr unterschiedlich zu Kurs 2. Die
Resultate (Fig.14 ANOVA Tabelle-Kurs4(M)) zeigen, dass Fähigkeit
und Methode (OCL) eine bedeutende Auswirkung haben (pvalue =
0.006 und 0.029, beziehungsweise).
Methoden der empirischen Softwaretechnik
297
Experimente: Objektorientierung
Die ANOVA Resultate zeigen nicht einen bedeutenden Interaktion Effekt, obwohl Fig.15 scheint, dass der Effekt von OCL für
Kursteilnehmern der niedrigen Fähigkeiten stärker als er für Kursteilnehmern der höheren Fähigkeiten ist (er erhöht sich auf Durchschnitt
um 122 Prozent und 13.3 Prozent. Diese Zahlen sind korrekten
Antworten.). Der Grösse Effekt der Auswirkung der Fähigkeit und die
Methode sind E2=0.22 und E2=0.13, beziehungsweise. So sehen sie,
dass die Auswirkung von OCL noch praktisch bedeutend ist, da sie
60 Prozent der Auswirkung der Fähigkeit darstellt. Die Unterschiede
bezüglich der Resultate werden zwischen Kurs 2 und Kurs 4 durch
die Fragebogenanalyse erklärt, die in dem Abschnitt( der Prozess
von Kurs 4)dargestellt wurde. Themen verbrachten in OCL Gruppen
weniger Zeit, das System zu verstehen. Zusätzlich fanden die Themen auch die Aufgabe einfacher durchzuführen (p-value=0.006 mit
mean(Kurs2)=2.8 und mean(Kurs4)=2).
Merken Sie, dass solche Resultate nicht in den Fragebögen des
Kurs 2 beobachtet wurden.
Figure 13: Beschreibung von Statistik des Kurses 4(M)
Figure 14: ANOVA Tabelle-Kurs 4(M)
• Diskussion von Resultate
298
Methoden der empirischen Softwaretechnik
3 Beispiel des Experimentes
Figure 15: Graph der Mittelwerte von Kurs 4(M)
Bevor man sich auf die Resultate konzentriert, lasst man sich die
Veränderung der Teilnehmer über die Kurse besprechen. Da der
Fall in vielen kontrollierten Experimenten existiert, haben nicht alle
Kursteilnehmer an allen Kurse teilgenommen. Für jede abhängige
Variable beobachtet man einen Verlust in der Themen.
Die Themen sind über Methode und Fähigkeit sehr ähnlich (wie
in den beschreibenden Statistiktabellen gezeigt) und es gibt folglich
keinen Grund, die Resultate beeinflusst wurden. Eine allgemeine
Tendenz war über allen Kurse und Aufgaben, dass es einen starken
Lerneffekt zwischen der Kursteilnehmern zuerst an der Aufgabe oder
zweiten an der Aufgabe versucht. Das heisst, dass die Kursteilnehmern
ausgebildet haben, wenn sie OCL in den grösseren und komplizierteren
UML-Modellen verwendeten. Sobald in Kurs 4 das Lernen durchführte,
gibt es offenbar einen positiven Effekt von OCL auf die Fähigkeiten der
Kursteilnehmern. ANOVA erscheinen Resultate, dass der Effekt von
OCL zu der Fähigkeiten der Kursteilnehmern zwar für die Wartung
einfach additiv ist, konnte eine grössere Probe einen bedeutenden
Interaktion Effekt zur Verfügung gestellt haben.
Es schlägt weiter vor, dass der Effekte von OCL statistisch und
praktisch bedeutend sind: Er erklärt zwischen 13 Prozent und 27
Prozent der Abweichung (E2). Er erhöht sich die richtige Antworten
um mehr als 40 Prozent und die Vollständigkeit um 13 Prozent und 122
Prozent für die Kursteilnehmer der hohen und niedrigen Fähigkeiten.
Diese Resultate werden durch unsere übersichtliche Daten gestützt
und bringen Einblick für die Auswirkung von OCL. Die Resultate
dieser Studie zeigen offenbar, dass OCL als Begrenzung Sprache ist,
die zu UML ergänzend ist. Wenn man die Änderung solcher Modelle
erleichtert, muss die Interaktion des Modellierens von der Fähigkeiten
mit diesem Effekt weiter studiert werden und verstanden werden.
Methoden der empirischen Softwaretechnik
299
Experimente: Objektorientierung
Dieses Training war für die Kursteilnehmern bedeutend, die an
diesem Experiment teilnahmen. Obwohl sie nicht die Erfahrung vieler
Software-Fachleute haben, ist es unsere Beobachtung, die ihr UML und
OCL Training viel vollständiger als die meisten Software Engineers in
der Industrie ist. Unsere Resultate vorschlagen, dass Leute nur vom
Verwenden des exakteres Modellierens durch den Gebrauch von OCL
einmal profitieren. Wenn sie umfangreicheres Trainingin empfangen,
haben sie in UML und in OCL typisch Trend von Praxis.
3.1
Ergebniszusammenfassung
Dieses Experiment forscht einen wichtigen methodologischen Aspekt von
der vereinheitlichten modellierenden Sprache (UML) [2] für OO Analyse
und Design nach: Ob die Gegenstand-Begrenzung Sprache (OCL) [1] das
ein Teil des UML Standards ist. Im spezifischen Kontext von UML ist diese
Frage über das erforderliche Niveau der Förmlichkeit und Präzision in der
Software-Entwicklung [13, 14] sehr viel entsprechend.
Um diese Frage nachzuforschen führt man ein Experiment mit die
Technikkursteilnehmern von Software/Computer durch, die ein sehr vollständiges Training in UML und in OCL empfangen. Dieses Experiment
betrachtete die Auswirkung des Verwendens von OCL auf zwei Variablen:
(1) führen die Antwort der Frage über die basierende Logik des Systems und
(2) analysiert eine Auswirkung der Änderungen und führt mit dem UML
Modell durch. Das Entwurf des Experimentes wurde definiert, um Verwirren
zu verhindern. Es ist wichtig, dass interne Gültigkeit unseres kontrollierten
Experimentes sicherstellen kann, indem man die Tendenzen sicherstellte, die
man an OCL liegt.
Die Resultate zeigen, dass OCL eine positive Auswirkung auf die zwei
oben erwähnten Variablen hat. Diese Auswirkung ist statistisch und
praktisch bedeutend. Die Tatsache sieht man, dass ein Effekt eine Sache ist,
aber interessanter ist, dass Effekt sehr gross sein kann. Dieses schlägt dann
vor, dass der Kosten-Nutzen-Aspekt des Verwendens von OCL wichtig ist.
Jedoch wurden die oben genannten Resultate nur beobachtet, dass
zweite mal als Kursteilnehmern die Aufgaben durchführten. Das heißt, dass
man einen Lerneffekt beobachtet, während des Laufenes des Experimentes
lassen, verteilt mann durch die Daten der übersichtliche Fragebogen nach
jedem Kurs. Dieses sollte tatsächlich erwartet werden, obwohl die Kursteil300
Methoden der empirischen Softwaretechnik
References
nehmern ein eingehendes UML und OCL Training hatten. Sie hatten keine
viele Erfahrungen mit Dokumenten des Niveaus der Kompliziertheit in den
UML Modellen, die im Experiment benutzt wurden. Sie hatten auch wenig
Erfahrung in Bezug auf die Besonderen der Aufgaben durchzuführen.
In der Folgerung zeigten die Resultate unseres Experimentes, dass
OCL Potential für die Fähigkeit der Leute auf UML-Modelle kontrolliert
und ändert. Aber mann braucht erforderliche Training und Erfahrung. Von
einer praktischen Perspektive bedeutet dieses, dass es unwahrscheinlich ist,
dass Leute vom Verwenden des OCL in UML Modellen profitieren, denn sie
korrektes Training haben.
Eine Reproduktion dieses Experimentes ist durchgeführt worden und
Daten werden z.Z. analysiert. In diesem Experiment forschtet man nur
einen teilweisen Aspekt der Auswirkung von OCL auf UML-gegründete
Software-Entwicklung nach. Weitere Studien sind notwendig, zum Beispiel,
dass die Auswirkung des Verwendens von OCL auf die Qualität der
Basissprache(source code quality) nachforschen, und in den folgenden
Entwicklung Phasen stützt.
References
[1] L. Mandel und M. C. Cengarle: On the expressive power of the object constraint language OCL. Forschungsinstitut für angewandte Softwaretechnologie (FAST e.V.), http://www.fast.de, 1999
[2] J. Warmer und A. Kleppe: The Object Constraint Language: Precise
Modeling with UML. Addison-Wesley, 1999.
[3] H. Hussmann:Lehrmaterialien zur Vorlesung Formale Spezi
kation von Softwaresystemen
[4] Denger, C.; Paech, B.; Benz, S.: Guidelines - Creating Use Cases for
Embedded Systems. IESE Technical Report, 2003.
Methoden der empirischen Softwaretechnik
301
Experimente: Objektorientierung
[5] Briand, L.; Labiche, Y.; Yan, H.; Penta, M.: A Controlled Experiment
on the Impact of the Object Constraint Language in UML-based Maintenance. In Proceedings of the 20th IEEE International Conference on
Software Maintenance (ICSM’04). IEEE Press, 2004.
[6] Silva, L.F.S.; Travassos, G.H.: An empirical study of a Qualitative Systematic Approach to Requirements Analysis (QSARA). International
Symposium on Empirical Software Engineering. ISESE ’04. IEEEPress,
2004.
[7] Paper,K.Aberer,P.Cudr -Mauroux,A.Datta,et al.,”P-Grid:A Self- organizing Structured P2P System”,Lausanne,2003
[8] C. Larman, Applying UML and Patterns - An Introduction to ObjectOriented Analysis and Design and the Unified Process, Prentice Hall,
2002.
[9] L. C. Briand, Y. Labiche, H.-D. Yan and M. Di Penta, ”A Controlled
Experiment on the Impact of the Object Constraint Language in UMLBased Development,” Carleton University, Technical Report SCE-03-22,
www.sce.carleton.ca/Squall, 2003.
[10] J. L. Devore and N. Farnum, Applied Statistics for Engineers and Scientists, Duxbury, 1999.
[11] Kitchenham, B.: Evaluating Software Engineering Methods and Tools Part : Quantitative Case Study Methodology; ACM SIGSOFT Software
Engineering Notes, 23(1), pp. 24-26; 1998.
[12] Thelin Thomas, Runeson, Per; Wohlin, Claes: An Experimental Comparison of Usage-Based and Checklist-Based Reading; IEEE Transactions on Software Engineering, Vol 29, No. 8; 2003.
[13] S. L. Pfleeger and L. Hatton, ”Investigating the Influence of Formal
Methods,” Computer, vol. 30 (2), pp. 33-43, 1997.
[14] A. E. K. Sobel and M. R. Clarkson, ”Formal Methods Application: An
Empirical Tale of Software Development,” IEEE TSE, 28 (3), pp. 308320, 2002.
[15] S. L. Pfleeger, ”Understanding and improving technology transfer in software engineering,” Journal of Systems and Software, 47 (2-3), pp. 111124, 1999.
302
Methoden der empirischen Softwaretechnik
Experimente: Agile Methoden
Effekte des Pair Programming
Lars Mahnkopf
Experimente: Agile Methoden
1
Einführung
In den letzten Jahren wurden immer mehr alternative Softwareentwicklungsmethoden erarbeitet, welche versuchen die teilweise starren, traditionellen Konzepte zu ersetzen oder zu ergänzen. Pair Programming ist hierbei als ein Bestandteil des Extreme Programming zu verstehen, welches
wiederum in die Klasse der agilen Softwareentwicklungsmethoden einzuordnen ist. Diesen Methoden ist gemein, daß sie sich durch wenige, flexible
Regeln auszeichnen und mit wenig bürokratischem Aufwand daherkommen.
Die vorliegende Arbeit versucht einen kleinen Einblick in die bisherigen Studien zu geben, die Pair Programming unter verschiedenen Aspekten und
Bedingungen untersucht haben und dabei versuchen, die Effektivität dieser
Methode einzuschätzen.
1.1
Pair Programming
Unter Pair Programming versteht man das gemeinsame Programmieren
zweier Entwickler an einem Rechner. Einer der Entwickler übernimmt dabei
die Funktion des ”Handelnden” wobei der Andere als Kontrollperson fungiert
und diese Rollen in regelmäßigen Zeitabständen getauscht werden. Diese
Methode beschrä-nkt sich nicht nur auf die Implementierung, sondern kann
auch beim Softwaredesign und der Entwicklung von Algorithmen zum Einsatz kommen.
2
Empirische Studien
Um einen Überblick der bisherigen Forschungsergebnisse zu erhalten, wurde
eine Auswahl an Studien untersucht, die allerdings nicht immer direkt
miteinander verglichen werden können, da sowohl die Versuchsumgebung als
auch die zu untersuchenden Hypothesen sich voneinander unterscheiden. Ein
Großteil der Studien wurde an Universitäten durchgeführt, nur zwei wurden
mit Hilfe professioneller Programmierer erstellt. Außerdem unterschieden
sich die zu lösenden Aufgaben in Aufwand und Schwierigkeitsgrad. Hierzu
ist zu sagen, daß diese Unterschiede eher als Bereicherung zu verstehen sind,
da es so möglich ist ein realistischeres Bild über die Effekte des Pair Programming zu erhalten.
2.1
Untersuchungsrahmen
Als erstes sollen nun die einzelnen Studien in ihrem Aufbau beschrieben werden. Hierbei interessiert uns insbesondere die Anzahl der Versuchspersonen,
306
Methoden der empirischen Softwaretechnik
2 Empirische Studien
ihr Beruf, wie die erstellten Programme getestet wurden, die Dauer des Versuches, in welcher Umgebung der Versuch durchgeführt wurde und welche
Komplexität die gestellten Aufgaben besaßen. Der Umfang der einzelnen
Beschreibung weicht stark voneinander ab und entspricht dem Detailreichtum der jeweiligen Arbeiten.
2.1.1
The Benefits of Collaboration for Student Programmers
J. D. Wilson , N. Hoskin und J. T. Nosek untersuchten 34 Studenten einer
amerikanischen Universität, wobei 14 von ihnen einzeln und die anderen 20
in Paaren arbeiten sollten. Hierbei ist vielleicht noch von Interesse, daß
alle durch einen Schein motiviert werden sollten an dem Experiment lebhaft teilzunehmen. Allerdings wurde beim Nichtlösen der Aufgabe keine
schlechtere Note vergeben. Die Paare wurden zufällig zusammengestellt und
beide Gruppen hatten dann 60 Minuten Zeit, um Kontrollfunktionen für
eine Verkehrssteuerung zu implementieren. Diese Aufgabe wird vom Autor
als einfach genug beschrieben, um von Programmieranfängern gelöst werden
zu können. Den Paaren war selbstverständlich erlaubt sich über das Problem auszutauschen, wohingegen die Einzelpersonen gezwungen waren untereinander nicht zu kommunizieren. Nach Vorlage der Ergebnisse, wurden noch
zwei Fragen qualitativer Natur an die Studenten gerichtet. Zur anschließenden Auswertung ist zu sagen, daß diese von zwei Studenten vorgenommen
wurde, die nicht wußten von welcher Gruppe die jeweilige Lösung stammte.
2.1.2
The Case of Collaborative Programming
Noseks zweites Experiment zielte darauf ab, die von ihm gewonnenen
Erkenntnisse durch ein geeignetes Experiment in einer realistischeren und
ökonomisch orientierteren Umgebung zu überprüfen. Hierzu wurden 15 Programmierer einer Software-Firma mit einem Problem konfrontiert, das bis
dato nicht zu ihrem Arbeitsbereich zählte. Es sollte ein Skript erstellt werden,
das die Konsistenz einer Datenbank überprüft und bei gefundenen Fehlern
entsprechende Meldungen ausgibt. Im Falle einer fehlerfreien Datenbank,
sollte dies ebenfalls als Nachricht ausgegeben werden. Normalerweise wurden solche Probleme außerhalb der Firma gelöst, da sie zu kritisch schienen
und über das Know-How der eigenen Programmierer hinausgingen. Zur Lösung hatten die Probanden 45 Minuten Zeit und als Programmierumgebung
wurden die ihnen bekannten SPARCs verwendet. Die Zeit wurde mit einer
Stoppuhr gemessen und nach Abgabe, wurden wieder dieselben qualitativen
Fragen wie in dem Experiment mit den Studenten gestellt.
Methoden der empirischen Softwaretechnik
307
Experimente: Agile Methoden
2.1.3
Pair-Programming Effects on Developers Productivity
Diese von vier Studenten an der Universität von Tartu in Estland entwickelte
Arbeit wurde mit Hilfe von anfänglich 110 Studenten des Sommersemesters
2002 erstellt. Die Studenten waren größtenteils im ersten Jahr und hatten sowohl im Programmieren wie auch in Sachen Teamarbeit wenig bis gar
keine Erfahrung, bis auf einen einsemestrigen Javakurs. Ein Hauptunterschied zwischen den bisherigen Studien bestand darin, daß hier nicht Paare
mit Einzelpersonen, sondern Paare mit anderen Paaren verglichen wurden,
wobei die eine Gruppe von Paaren mit Hilfe von traditionellem Teamwork
und die Andere auf Basis des Pair-Programming arbeiten sollte. Hierzu wurden die Studenten in 2 gleichgroße Gruppen aufgeteilt, die Paare wurden in
diesen Gruppen gebildet und ihnen wurden eine Aufgabe gestellt, für deren
Lösung sie 2 Arbeitssitzungen Zeit hatten. Danach wurden innerhalb der
beiden Gruppen die Paare neu zusammengesetzt und die Gruppe, die vorher
Pair-Programming betrieben hatte, löste die neugestellte Aufgabe nun mit
Hilfe traditioneller Gruppenarbeitskonzepte und umgekehrt. Die zu lösenden
Aufgaben bestanden darin, einen ”Schiedsrichter” für ein Strategiespiel zwischen zwei Spielern auf einem vordefinierten CORBA-System zu implementieren. In der ersten Phase des Experiments wurde das Regelwerk entwickelt
und in der zweiten Phase dann das Spieleprotokoll implementiert. Mit Hilfe
eines automatischen Testprogramms, das von den Leitern des Experiments
vorher entworfen worden war, wurden dann die eingereichten Lösungen auf
Richtigkeit überprüft. Dieses simulierte 2 Spieler, die anhand einer gegebenen
Datenbank erlaubte und unerlaubte Spielzüge ausführten, wobei die Ergebnisse zur Auswertung gespeichert wurden. Bei der Untersuchung der qualitativen Bereiche des Experiments, wurde mit Hilfe eines Persönlichkeitstests
NEO PI versucht, eine Antwort auf 3 von den Autoren gestellte Fragen zu
geben. Auf diese Fragen wird später im Detail bei der Analyse der qualitativen Aspekte eingegangen.
2.1.4
Strengthening the Case for Pair Programming
Das Experiment in dieser Studie wurde 1999 von Laurie Williams, R. R.
Kessler, Ward Cunnigham und Ron Jeffries an der Universität von Utah
mit 41 höhersem-estrigen Studenten durchgeführt, die alle schon fortgeschrittenere Kenntnisse im Programmieren und Kontakte zur Industrie besaßen.
13 Studenten bildeten die Kontrollgruppe aus Einzelpersonen, während der
Rest sich zu Paaren formierte, die die gestellten Aufgaben mit Hilfe der
Pair Programming Methode lösen sollten. Um die Arbeitsbelastung auszugleichen, bekamen die Paare zusätzlich Aufgaben gestellt. Die Arbeitszeit
308
Methoden der empirischen Softwaretechnik
2 Empirische Studien
wurde in diesem Fall über ein webbasiertes Tool festgehalten und das Testen
wurde auch hier automatisiert durchgeführt. Auch wurden die Studenten
über Auswirkungen, die ihres Erachtens die Methode hatte, und ihre Einstellung zum Pair Programming befragt. Allerdings geht aus der Studie nicht
hervor, in welcher Art und Weise dies geschah. Auch gehen die Autoren nicht
näher auf die Art der Aufgaben und die Umgebung ein, in der diese gelöst
wurden.
2.1.5
Experimental Evaluation of Pair Programming
Im Wintersemester 1999/2000 führten 2 Studenten der Universität von Posen
4 Versuche mit 21 Studenten durch, um die Effizienz des Pair Programming
zu beweisen. Im Gegensatz zu den meisten anderen Studien, wurden hier
nicht 2 sondern 3 Gruppen gebildet, wobei eine Gruppe mit Hilfe des Pair
Programming arbeitete, wie es im Zusammenhang mit Extreme Programming verstanden wird, die zweite nach der Methode des Personal Software
Process(PSP) und die letzte auch nach den Prinzipen des Extreme Programming, allerdings ohne Hinzunahme des Pair Programming. Bei der Zusammensetzung der Gruppen wurde darauf geachtet diese möglichst ausgeglichen
zu halten, was man mit dem Notendurchschnitt probierte. Alle Studenten
befanden sich im vierten Jahr ihres Studiums und hatten schon vorher an
Experimenten dieser Art teilgenommen. Daher war ihnen bewußt, daß nicht
ihr Können, sondern die Effizienz der einzelnen Methoden im Vordergrund
stand. Die Zeit sowie die auftretenden Fehler sollten in entsprechenden Logs
gespeichert werden, wobei nur innerhalb der Universität unter Aufsicht von
einem der beiden Autoren an den Programmen gearbeitet wurde. Bei den
zu lösenden Aufgaben handelte es sich um 4 Aufgaben, die zwischen 150-400
Zeilen an Code umfassten. Den Probanden war es freigestellt, ob sie mit
Pascal, C oder C++ arbeiten wollten, allerdings entschieden sich alle für die
letzteren beiden. Zuerst sollte ein Programm geschrieben werden, das den
Mittelwert und die Standardabweichung von n natürlichen Zahlen berechnet. Danach sollten die linearen Regressionsparameter berechnet werden,
das Dritte hatte die Aufgabe, die wirklichen Zeilen an Code zu bestimmen
(ohne leere Zeilen und Kommentare) und das letzte Programm diente dem
Zählen der Codezeilen und der Anzahl an Zeilen sowie der Anzahl an Methoden innerhalb eines Objekts. Nach Einreichen der Lösungen, wurden diese
von den Leitern mit Fehlern versehen, die dann von den Studenten gefunden werden sollten. Die dafür benötigte Zeit wurde wiederum festgehalten
und diente dazu herauszufinden, ob beide Studenten der Pair Programming
Gruppen dieselben Kenntnisse von ihrem Programm hatten.
Methoden der empirischen Softwaretechnik
309
Experimente: Agile Methoden
2.1.6
Are Reviews an Alternative to Pair Programming?
Ein weiteres Experiment zu diesem Thema wurde im Sommersemester 2002
an der Universität von Karlsruhe von Matthias M. Müller während eines
Extreme Programming Kurses durchgeführt. Die Versuchsteilnehmer waren
im Durchschnitt im vierten Jahr ihres Studiums und hatten 6 Jahre Programmiererfahrung mit 50 bis 250000 Zeilen an selbstgeschriebenem Code
(durchschnittlich 2000 Zeilen an Code). Auch hier wurde Pair Programming
nicht mit traditionellen Entwicklungsmethoden verglichen, sondern einer prüfungsintensiven Methode gegenübergestellt. Die zu lösenden Aufgaben bestanden einerseits darin, die Nullstellen eines Polynoms dritten Grades zu
bestimmen, sowie eine Lösung für ein Shuffle Puzzle zu finden, sofern diese
existierte.
2.1.7
An Empirical Study about the Feelgood Factor in Pair
Programming
Matthias M. Müller, einer der Authoren des Papers ”Are Reviews an Alternative to Pair Programming”, versucht anhand desselben Experiments,
das dieser Arbeit zugrunde lag und eines weiteren Gleichgearteten, die qualitativen Aspekte des Pair Programming näher zu untersuchen. Außerdem
versuchen die Authoren die Frage zu beantworten, inwieweit die Programmiererfahrungen der Versuchsteilnehmer die Zeit zum Lösen der Aufgaben
beeinflußten. Zu diesem Zweck wurden die Probanden vor und nach dem Experiment gebeten, zwei kleine Fragebögen auszufüllen. Diese Fragen wurden
auch in der vorausgehenden Arbeit bei der Auswertung einbezogen, finden
in dieser Studie aber mehr Berücksichtigung. Wohingegen die erste Arbeit
mehr darauf abzielte, die generelle Effektivität der Pair Programming Methode zu untersuchen, wird hier der Versuch unternommen, einen Faktor für
die Unterschiede zwischen den einzelnen Paaren zu benennen.
2.1.8
Zusammenfassung
Zum Ende dieses Kapitels möchte ich die wichtigsten Kenndaten der Experimente nochmals tabellarisch zusammenfassen, wobei die Arbeit über den
Feelgood Factor nicht mehr separat aufgelistet wurde, da sie, wie bereits erwähnt, auf demselben Experiment beruht, wie die Studie ”Are Reviews an
Alternative to Pair Programming”.
310
Methoden der empirischen Softwaretechnik
2 Empirische Studien
Studie
[WiHoNo93]
[Nosek98]
[PuSeSa03]
[WiKeCuJe00]
[NawWoj01]
[Müller04]
Anzahl
34
15
110
41
21
20
Beruf
Studenten
Professionelle
Studenten
Studenten
Studenten
Studenten
Vergleich
PP vs EP
PP vs EP
PP vs 2EP
PP vs EP
PPvsXP1vsPSP
PP vs EP(R)
Umgebung
Labor
Büro
Labor
Labor
Labor
Labor
Umfang
60 Min
45 Min
2 Aufgaben
k.A.
4 Aufgaben
2 Aufgaben
Testmethode
Person
Person
auto
auto
k.A.
auto
PP=PaarProgrammierer,EP=Einzelprogrammierung
XP1=Einzelprogrammierung nach Extreme Programming Prinzipien
(R)=Programmierung mit Reviews PSP=Methode des Personal Software Process
2EP=2 Einzelprogrammierer mit traditionellen Teamwork
Table 1: Experimente im Überblick
2.2
Forschungsinhalte
Die meisten Arbeiten zu diesem Thema gehen sowohl auf die qualitativen
Effekte, als auch auf die quantitativen Effekte ein, wobei allerdings dem
quantitativen Aspekt oftmals mehr Aufmerksamkeit gewidmet wurde, was
sich aufgrund der einfacheren Auswertung und des ökonomischen Interesses
leicht erklären läßt. Im Folgenden sollen diese Effekte im Detail benannt
werden.
2.2.1
Qualitative Effekte
Zu den häufigst genannten qualitativen Vorteilen des Pair Programming zählt
wohl der ”Spaßfaktor”. Dies wird in jeder Studie deutlich, die diesen Aspekt
untersuchte. Die Probanden scheinen ein Gefühl von Sicherheit zu bekommen, wenn jemand neben ihnen sitzt, der mitdenkt und sie sich so mit dem
Problem nicht alleine gelassen fühlen. Ein weiterer Aspekt, der bei der Befragung der Probanden durchschimmerte, war der aufkommende Leistungsdruck durch die Präsenz eines anderen, der sich wohl darauf zurückführen
läßt, daß die Personen sich nicht blamieren und/oder ihren Partner nicht im
Stich lassen wollten (siehe [WiHoNo93]). Allerdings könnte sich genau dieser
Aspekt bei längeren Studien zur Bremse für diese Methode herausstellen, da
die anfängliche Euphorie dann verflogen sein könnte und die Programmierer
sich nicht mehr von ihrem Partner unter Druck setzen lassen oder die Zeit
durch Small Talk verschwenden. Ein anderer Aspekt ist das Vertrauen in die
entwickelte Löung, welches im Allgemeinen höher war als bei den Kontrollgruppen, die ohne Pair Programming gearbeitet haben. J. T. Nosek befragt
in seinen beiden Studien die Versuchspersonen direkt nach ihrem Vertrauen
in die erstellte Lösung und den Grad an Freude, den sie bei der Arbeit hatten. Sowohl in seiner Studie mit professionellen Programmierern als auch in
der mit Studenten, kommt er zu den gleichen Ergebnissen, was die Befriedigung durch die Arbeit betrifft. Nachfolgend seien kurz die Ergebnisse dieser
beiden Untersuchungen tabellarisch aufgelistet (siehe Tabellen 2 und 3). Zur
Methoden der empirischen Softwaretechnik
311
Experimente: Agile Methoden
Interpretation ist zu sagen, daß die Werte zwischen 1 und 7 liegen, wobei 1
für ”sehr niedrig” und 7 für ”sehr hoch” steht.
Variable Einzelperson Paar
Vertrauen
4.43
6.2
Freude
4.93
6.0
Table 2: Experiment mit Studenten
In diesem Zusammenhang sei die Korrelation zwischen den Werten ”Freude”
Variable Einzelperson Paar
Vertrauen
3.8
6.5
Freude
4.0
6.6
Table 3: Experiment mit professionellen Programmierern
bzw. ”Vertrauen” und der Gesamtpunktzahl, sowohl bei den Kontrollgruppen
wie auch bei den Versuchsgruppen erwähnt, also der Verbindung zwischen
den qualitativen und quantitativen Effekten.Hier sieht Nosek bei seinem Experiment eine deutliche Abhängigkeit zwischen diesen Werten, was anhand
der Tabelle nachvollzogen werden kann.
Note
Vertrauen
Freude
0.5195
0.4253
0.4587
0.6311
0.5746
0.6027
0.5062
0.2950
0.3853
0.3735
0.6662
Lesbarkeit Funktionalität Gesamtwert Note
Table 4: Korrelationswerte für die Kontrollgruppen
Auch M. M. Müller befragte in seiner Studie die Probanden danach,
wie sehr ihnen das Pair Programming gefiel. Auf einer Skala von 1 bis
5 , wobei 1 für sehr schlecht steht, gab es keine Wertung unter 4. Somit
wird auch hier diese Methode der Programmierung für die Meisten als die
Angenehmere betrachtet. Neben dieser Frage wurden die Teilnehmer des
Experiments auch noch nach ihren Einschätzungen über die Effizienz des
Programmierens mit Überprüfung und in Paaren, sowohl separat als auch
im direkten Vergleich, befragt. Daß die meisten Versuchsteilnehmer der
Paarprogrammierung mehr Effizienz zusprachen, sowohl bei der Einzelbewertung wie auch im Vergleich, läßt wieder auf ein höheres Vertrauen in die
312
Methoden der empirischen Softwaretechnik
2 Empirische Studien
Note
Vertrauen
Freude
0.1527
0.2500
0.2648
0.0000
0.6402
0.6186
0.2020
0.1050
0.4140
0.4152
0.3522
Lesbarkeit Funktionalität Gesamtwert Note
Table 5: Korrelationswerte für die Versuchsgruppen
Programme schließen, die mit dieser Methode erstellt wurden (siehe Bild 1).
Ebenfalls von Müller stammt eine Arbeit, die auf zwei vorausgegangenen
Figure 1: Ergebnisse der Befragungen nach dem Versuch
Versuchen (einer davon wurde mit [Müller04] vorgestellt) basiert und unter
anderem versucht, eine Verbindung zwischen den qualitativen und quantitativen Faktoren herzustellen. Hierzu wird der Durchschnitt für jedes Paar aus
den Werten für die individuelle Freude beim Pair Programming gebildet und
mit der Zeit verglichen, die diese Paare zum Lösen der jeweiligen Aufgabe
benötigten (siehe Bild 2). Bis auf wenige Ausreisser, scheinen diese beiden
Figure 2: Spaßfaktor pro Paar
Werte zu korrelieren. Eine Aussage, die durch einen p-Wert von 0.01 beim
Spearman Test unterstützt wird. Diese Korrelation, sofern sie wirklich existiert, gibt allerdings nicht Aufschluß darüber, welcher Wert von welchem
abhängig ist, ob also ein höherer Spasßfaktor zu den besseren Zeiten führt
oder ein besseres Ergebnis diesen Faktor beeinflußt.
Methoden der empirischen Softwaretechnik
313
Experimente: Agile Methoden
2.2.2
Quantitative Effekte
Bei den quantitativen Effekten, läßt sich insbesondere die reduzierte Entwicklungszeit und die geringere Anzahl von Fehlern nennen. Um diese Effekte
detailiert darzustellen, werden nun einige Tabellen und Grafiken aus den
jeweiligen Studien vorgestellt.
Fehlerhäufigkeit: Die Arbeitsgruppe um L. Williams verzeichnete bei ihren
automatisch durchgeführten Tests einen deutlichen Unterschied zwischen
Paaren und Programmierern, die einzeln arbeiteten, der im Maximum bei
16,7 % mehr bestandenen Tests lag (siehe auch Tabelle 6). Im Gegensatz
Programm
Programm
Programm
Programm
1
2
3
4
Einzelperson Paar
73.4
86.4
78.1
88.6
70.4
87.1
78.1
94.4
Table 6: Prozentangaben zu den bestandenen Tests
dazu, wurden bei Noseks Arbeiten nicht die prozentual bestandenen Tests
verglichen, sondern zwei Variablen eingeführt, die zum Vergleich genutzt
wurden. Die eine sollte etwas über die generelle Lesbarkeit der Programme
aussagen, also inwieweit das Implementierte anhand der Kommentare und
der Struktur nachvollzogen werden konnte. Die Werte hierfür liegen im Rahmen von null bis zwei mit null als Bewertung für ein nicht nachvollziehbares
Programm. Die Variable ”Funktionalität” wiederum gibt Auskunft darüber,
in welchem Maße die Lösung mit der Aufgabenstellung übereinstimmte und
bewegt sich zwischen null und sechs, wobei null einer nicht gegebenen Funktionalität enspricht. Die Variable ”Gesamtwert” ergibt sich aus der Aufaddierung der anderen beiden Werte und dient dem direkten Vergleich. Die
Tabellen 7 und 8 geben die Mittelwerte dieser drei Variablen für die jeweiligen Experimente an (die Werte in den Klammern stehen für die Standardabweichungen).
Auch diese beiden Experimente sprechen eine deutliche Sprache in Bezug
auf die Fehlerrate des Pair Programming. Bei den Studenten erreichen die
Einzelpersonen gerade 54% des maximalen Gesamtwertes, wohingegen die
Paare im Durchschnitt auf 74.3% der Punkte kommen. Bei den professionellen Programmierern ergibt sich ein ähnliches Bild nur auf höherem
Niveau. Es werden bei den Einzelpersonen 74% und bei den Paaren 95%
314
Methoden der empirischen Softwaretechnik
2 Empirische Studien
Variable
Einzelperson
Paar
Lesbarkeit
1.2857 (0.6712) 1.7500 (0.2887)
Funktionalität 3.0357 (2.2055) 4.2000 (1.9285)
Gesamtwert
4.3214 (2.8053) 5.9500 (1.9958)
Table 7: Noseks Experiment mit Studenten
Variable
Einzelperson
Paar
Lesbarkeit
1.40 (0.894) 2.00 (0.000)
Funktionalität 4.20 (1.788) 5.60 (0.547)
Gesamtwert
5.60 (2.607) 7.60 (0.547)
Table 8: Noseks Experiment mit professionellen Programmierern
der Gesamtpunkte erreicht. Somit liegt die Differenz bei beiden Studien
ungefähr bei 20%. Anhand der Werte für die Standardabweichung, läßt sich
auch erschließen, daß die Programme, die mit Hilfe des Pair Programming
erstellt wurden, vorhersagbarer sind als bei den Einzelprogrammierern. Eine
mögliche Erklärung hierfür mag sein, daß die Paarbildung schon zu einer
gewissen Nivellierung führt, so daß die Ergebnisse dichter beisammen liegen.
Bei den bisherigen Studien zeichnet sich der Trend ab, daß sich Pair Programming im direkten Vergleich zu Einzelprogrammierern durch eine geringere Fehleranzahl auszeichnet. Bei [WiKeCuJe00] liegen die Unterschiede
zwischen 10.5% und 16.7% mehr bestandenen Tests und bei den Studien von
Nosek ( [Nosek98], [WiHoNo93]) spiegelt die Variable ”Funktionalität” diese
Unterschiede wieder.Bei der Auswertung der Daten wird zunächst lediglich
auf den Gesamtwert eingegangen, da die Variable ”Lesbarkeit”, die in diesen
Wert miteinfließt, zwar nicht direkt über die Fehler Aufschluß gibt, jedoch
mit einer hohen Lesbarkeit Fehler schneller gefunden werden können und sie
somit indirekt die Anzahl von Fehlern reduziert.
Da die bisherigen Vergleiche nicht ganz ”fair” sind, da bei ihnen außer Acht
gelassen wird, daß die geringere Fehleranzahl auch mit doppelt sovielen Programmierern und damit doppelt so hohen Personalkosten einhergeht, wollen
wir uns nun den Studien widmen, die die Paare mit 2 Programmierern
oder zusätzlich angewandten Prinzipien vergleichen. Die erste Studie hierzu
sei [PuSeSa03]. Sie stellt den Paaren 2 Programmierer mit traditioneller Teamarbeit gegenüber. Da bei diesem Versuch die Zeit konstant gehalten wurde
(die Probanden hatten jeweils 2 Sitzungen für die Lösung eines der beiden
Probleme Zeit), wurde nur die Anzahl der bestandenen Tests pro Sitzung verglichen. Nachfolgend seien kurz die Ergebnisse der Studie tabellarisch aufgelistet. Anfänglich sind die Paare, die nach dem Pair Programming Prinzip
Methoden der empirischen Softwaretechnik
315
Experimente: Agile Methoden
PP
NP
PP
Wert2
NP
Wert1
Phase1
Phase2
Sitzung1 Sitzung2 Sitzung1 Sitzung2
43.5%
73.9%
18.0%
62.5%
26.3%
78.9%
0.0%
47.1%
14.9%
66.1%
2.2%
24.7%
8.0%
72.7%
0.0%
25.0%
Table 9: Paar Programmierer vs 2 Einzelprogrammierer
arbeiten, wie es scheint im Vorteil. Sie bestanden nach Ende der ersten
Sitzung 1.9 mal mehr Tests als die Paare mit traditionellem Teamwork (kurz
Teams) und 1.7 mal mehr Paare schafften es, überhaupt einen Test positiv
zu durchlaufen. Dies läßt sich noch gravierender in der ersten Sitzung der
zweiten Phase feststellen. Hier schaffte es kein Programm der Kontrollgruppe
auch nur einen Test zu bestehen, wohingegen bei 18% der Paare schon mindestens ein Test erfolgreich durchgeführt und im Durchschnitt 2.2% der Tests
bestanden wurden. Mit der zweiten Sitzung setzt allerdings eine Wende ein.
Sowohl in der ersten Phase holen die Teams deutlich auf und überflügeln die
Paare sogar leicht, wie auch in der zweiten Phase bei der Anzahl der durchschnittlich bestandenen Testfälle. Nur bei der Anzahl der Gruppen, die überhaupt ein testfähiges Programm ablieferten, sind die Paare noch im Vorteil.
Die anfängliche schwächere Leistung der Teams läßt sich wohl damit erklären,
daß sie anfänglich mehr Zeit investieren mußten, was sich aber anscheinend
nach dieser Planungsphase zu rentieren scheint. Es ist nicht auszuschließen,
daß sich bei einem so hohen Grad an Leistungszuwachs, die Teams bei längeren Programmen noch deutlicher absetzen würden. Dieses Experiment ist
daher von großem Interesse, da es aufgrund dessen, daß die gleiche Anzahl
von Programmierern in den Kontrollgruppen verwendet wurde, einen direkten Vergleich ermöglicht.
Allerdings gibt es auch die Möglichkeit, anstatt Paare mit Paaren zu vergleichen, die Einzelprogrammierer mit zusätzlichen Methoden auszustatten.
Dieser Ansatz wird in der Studie ”Are Reviews an Alternative to Pair Programming?” verfolgt. Hier sollten die Einzelprogrammierer mit Hilfe einer
Überprüfung arbeiten. Die Methode sah vor, daß der Programmierer seine
Implementierung bis dahin nicht kompilierte, sondern abwarten sollte, bis
er die Liste mit Fehlern zurückerhielt. Sobald dies geschah, stand es dem
Programmierer frei selbst zu testen und weitere Fehler zu suchen. Die
Idee hierbei ist, daß Aufgrund dieser Überprüfung, die Entwickler sich zu
mehr Sorgfalt zwingen und eine zusätzliche Kontrollinstanz vorhanden ist,
die Fehler ausmachen kann. Die interessanten Ergebnisse dieser Studie sind
316
Methoden der empirischen Softwaretechnik
2 Empirische Studien
Figure 3: Bestandene Tests in % nach der Implementierungs- und
Akzeptanzphase
vor der Akzeptanzphase zu finden, da nach dieser dennoch alle Programme
mindestens 95% des Akzeptanztests bestanden hatten und selbst beim umfangreicheren Test nicht wirklich nennenswerte Unterschiede festzustellen
waren. Aber selbst nach der reinen Implementierungsphase, ist die durchschnittliche Zuverlässigkeit der Programme, die von den Paaren erstellt wurden, nur geringfügig höher als bei den Einzelentwicklern (die Mediane weisen
sogar fast gar keine Unterschiede auf). Insgesamt ergibt sich hieraus, daß
Paar Programmierer nicht weniger Fehler produzieren als Einzelprogrammierer mit Überprüfung, allerdings kosten sie auch nicht mehr, was sich anhand derselben Studie später zeigen wird. Die letzte Studie gibt in Bezug
auf die Fehlerdichte nur wenig Aufschluß. Der einzige Wert, der in diesem
Zusammenhang genannt wird, ist die Anzahl der erneuten Einreichungen korrigierter Programme. Hierbei erweist sich das Pair Programming als leicht
effizienter wie die Abbildung 4 zeigt.
Reduzierte Entwicklungszeit: Zunächst wird mit denjenigen Studien begonnen, deren Vergleich darauf beruht, daß sie Einzelprogrammierern Paare
gegenüberstellen. In der Studie [WiKeCuJe00] wird behauptet, daß die Paare
bis zu 50% schneller seien (siehe Bild ??). Es wird sogar vermutet, daß
wenn die Einzelprogrammierer die größere Anzahl an Fehlern hätten korrigieren müssen, sie schlechter abgeschnitten hätten. Zu ähnlichen Ergebnisse, wenn auch nicht ganz so optimistisch, kommt Nosek in seiner Studie
mit professionellen Programmierern (siehe [Nosek98]). Während die Kontrollgruppen aus Einzelpersonen im Durchschnitt 42.60 Minuten mit einer
Standardabweichung von 3.361 Minuten brauchen, um das Skript für den
DBCC(database consistency check) zu implementieren, schaffen die Paare
dies in 30.20 Minuten mit einer Standardabweichung von nur 1.923 Minuten,
Methoden der empirischen Softwaretechnik
317
Experimente: Agile Methoden
Figure 4: Anzahl der Wiedereinreichungen korrigierter Programme
was ungefähr 71% der Zeit, die die Kontrollgruppe benötigte, entspricht.
Die Studien, die allerdings Paare nicht mit ”einfachen” Einzelprogrammierern vergleichen, kommen in Bezug auf Gesamtzeit zu anderen, für Pair Programming weniger günstigen Ergebnissen. Hier sei als erstes die Studie von
Nawrocki und Wojciechowski genannt ( [NawWoj01]). Zwar brauchen die
Programmierer, die nach dem PSP-Prinzip arbeiten, erkennbar länger, wobei
das letzte Programm hierbei eine Ausnahme bildet, was daran liegen kann,
daß sich der höhere Planungsaufwand erst bei Programmen eines gewissen
Umfangs auszahlt. Dagegen liegt zwischen den Paaren und den Einzelprogrammierern, die nach XP-Prinzipien arbeiten, kaum ein Unterschied. Nur
das letzte Programm fällt hier wieder aus dem Rahmen(siehe Bild 6). Da in
dieser Studie angegeben, wollen wir auch hier die Standardabweichung näher
betrachten. Wieder einmal zeigt sich, daß das Pair Programming die geringsten Abweichungen aufweist (eine Ausnahme bildet das erste Programm).
Die Studie ”Pair-Programming Effect on Developers Productivity” ( [PuSeSa03]) gibt hier keinen direkten Aufschluß über die Reduzierung der Entwicklungszeiten, da hier die Zeiten zur Implementierung der Programme
fest vorgegeben waren, um durch diesen konstanten Wert einen Vergleich der
Fehlerhäufigkeit überhaupt erstmal zu ermöglichen, wie die Autoren meinen.
Allerdings kann man auch argumentieren, daß eine höhere Fehlerrate auch zu
längeren Entwicklungszeiten führt und somit auch indirekt Aufschluß über
die Entwicklungszeiten gibt. Die groben Unterteilungen in der Auswertung
der einzelnen Studien sollen deshalb nicht als strikte logische Trennungen verstanden werden, sondern dienen nur dazu, dieser Arbeit eine gewisse Struktur zu geben. M. M. Müller dagegen verwendet in seiner Arbeit ( [Müller04])
wiederum die Zeit als variable Größe, aber er vergleicht nicht einfach die En318
Methoden der empirischen Softwaretechnik
2 Empirische Studien
Figure 5: verkürzte Entwicklungszeiten mit Pair Programming
twicklungszeiten direkt miteinander, sondern die Kosten in Arbeitsminuten.
Auch hieran läßt sich die eigentliche Entwicklungszeit ablesen. Es müssen nur
die Werte der Paare durch zwei geteilt werden. Somit erreichen die Paare ähnlich gute Ergebnisse, wie in der Studie [WiKeCuJe00], also eine Reduzierung
von 40-50% für die gesamte Aufgabe. Interessant ist hierbei allerdings, daß
die Reduzierung für die Implementierungsphase deutlich geringer ausfällt (3040%), wohingegen bei der Akzeptanzphase die Paare im Durchschnitt sogar
mehr als doppelt so schnell sind.
Ein Versuch zur Benennung einer Ursache für die unterschiedliche Arbeitszeit der Paare im Vergleich zueinander, unternahmen Müller und Padberg
in ihrer Arbeit (siehe [MülPad04]), indem sie den Durchschnitt der individuellen Programmiererfahrung pro Paar bildeten. Diese Erfahrungen pro Paar
waren trotz des Versuchs die Paare ausgewogen zu halten (die Person mit
der geringsten Erfahrung bildete mit der Person mit der meisten Erfahrung
eine Gruppe, danach der Zweiterfahrenste mit demjenigen mit der zweitgeringsten Erfahrung usw.) noch relativ weit gestreut (siehe Bild 9).
Allerdings weisen diese auf die Erfahrung der Paare bezogenen Werte keinerlei Korrelation auf , so daß die reine Programmiererfahrung nicht als beeinflussender Faktor für die Entwicklungszeit gesehen werden kann (siehe Bild
10).
2.3
Kritische Analyse
Um aus den gegebenen Daten allgemeingültige Aussagen ableiten zu können,
wollen wir uns als erstes ein Bild über die generelle Verwertbarkeit der InMethoden der empirischen Softwaretechnik
319
Experimente: Agile Methoden
Figure 6: Entwicklungszeiten von XP1, XP2 und PSP
Figure 7: Standardabweichungen bei der Entwicklungszeit von XP1, XP2
und PSP
formationen machen, indem wir den Versuchsaufbau und die Durchführung
kritisch beleuchten. Danach werde ich noch kurz auf einige allgemeine Probleme im Zusammenhang mit Experimenten eingehen.
2.3.1
Versuchsaufbau und -durchführung
Allen Experimenten ist zu Eigen, daß sie mit sehr wenigen Versuchsteilnehmern durchgeführt wurden, was die Frage aufwirft, ob die bestätigten
Hypothesen überhaupt eine Allgemeingültigkeit besitzen. Dieses Problem
wird auch von fast alle Autoren erkannt, doch sehen sie sich zum Beispiel
aufgrund des Kostenfaktors oder des Kursumfanges nicht in der Lage daran
etwas zu ändern. Ein anderer Aspekt ist die Art der Versuchsteilnehmer, bei
320
Methoden der empirischen Softwaretechnik
2 Empirische Studien
Figure 8: Kosten für Gesamtzeit, Implementierungszeit und Zeit für die
Qualitätssicherung
Figure 9: allgemeine und javabezogene Programmiererfahrungen pro Paar
in Jahren, sowie bisher erstellte LOC in Java
denen es sich außer in einer Studie ( [Nosek98])um Studenten handelt. Die
geringen Erfahrungen werfen hier wieder die Frage auf, ob die gewonnenen
Erkenntnisse auf professionelle Programmierer übertragbar sind. Zwar führte
Nosek genau aus diesem Grund einen entsprechenden Versuch durch, jedoch
kann ein Versuch nicht als Beweis für die vorher vermuteten Ergebnisse gelten. Die Einstellung der Probanden zu dem Experiment ist ebenfalls relevant
und da es sich bei vielen Versuchen um Kurse handelt, die von den Studenten
freiwillig belegt wurden, ist es fraglich ob diese eher positive Grundeinstellung gegenüber dem Thema nicht schon eine Verzerrung darstellt.Auch die
Methode des Testens und Bewertens ist gerade in den Studien von Nosek
kritisch zu betrachten. Hier wird die Fehlerhaftigkeit und Lesbarkeit eines
Programms von zwei Personen bewertet ohne automatische Tests zu verMethoden der empirischen Softwaretechnik
321
Experimente: Agile Methoden
Figure 10: Programmiererfahrung und Entwicklungszeit
wenden, was die Frage nach der Genauigkeit und Einheitlichkeit der Werte
aufkommen läßt. Sicherlich ist es gerade bei der Bewertung der Lesbarkeit
nur bedingt möglich, dies zu automatisieren, jedoch wäre es bei dem Messen
der Fehleranzahl möglich. Gerade bei Noseks zweiter Studie tritt ein Problem
auf, da hier sowohl die Zeit wie auch die Funktionalität zu messende Grössen
darstellen. Dabei stellt sich das Problem wie hier von den Programmierern
einheitlich entschieden werden konnte, wann sie fertig sind. Hier erscheinen
die Versuche sinnvoller, die nur eine der beiden Größen untersuchen ( [NawWoj01]) oder zumindest einen Akzeptanztest einführen ( [Müller04], [MülPad04]).
Die Versuchsdauer erscheint oftmals auch viel zu kurz für ein Experiment,
was so starke soziale und psychologische Faktoren beinhaltet. Es ist sicher
nicht schwer sich 45 oder 60 Minuten( [WiHoNo93] und [Nosek98]) oder auch
2-4 Sitzungen ( [PuSeSa03] und [NawWoj01]) zusammenzureißen, allerdings
wäre es doch auch von Interesse zu sehen, wie diese Zusammenarbeit sich mit
der Zeit entwickelt. Hier ist vieles vorstellbar, von dem Verlust des gegenseitigen Ansporns bis hin zur Blockade aufgrund zwischenmenschlicher Differenzen. Die Umgebung ist in fast allen Fällen entweder laborähnlich oder
die von Kursen, was wiederum zu vielerlei Verzerrungen führen kann. Der
Grad an Ablenkung durch die anderen Gruppen und deren Weiterkommen,
die Möglichkeit die Aufgaben außerhalb des eigentlichen Versuchs zu lösen,
stellen hier nur 2 Quellen der Verfälschung dar. Letzteres scheint besonders
in der Studie ”Pair Programming Effekt on Developers Productivity”( [PuSeSa03]) möglich, da hier jede Aufgabe über zwei Sitzungen gelöst wurde. Der
Studie ”Strengthening the Case for Pair-Programming” wiederum mangelt es
viel zu sehr an Informationen über den genauen Versuchsaufbau, was die
ganze Arbeit nicht sehr wissenschaftlich erscheinen läßt.
2.3.2
Allgemeine Verzerrungen bei Experimenten
Die wohl wichtigste Verzerrung stellt der Versuchsleitereffekt dar. Dieser Effekt beschreibt die Tendenz eines Versuchsleiters sein Experiment unbewußt
322
Methoden der empirischen Softwaretechnik
3 Fazit
in eine Richtung zu lenken, die seiner Vorstellung entspricht. Da die meisten Menschen bei der Auseinandersetzung mit einem Thema sich mehr oder
weniger ausgeprägt eine Meinung bilden, besteht die Gefahr, daß diese Meinung Einfluß auf den Experimentverlauf oder die Interpretation der Daten
nimmt. Ohne böswillige Absichten zu unterstellen, könnte man bei einer
Studie den Verdacht haben, daß dies hier vorliegt (siehe [WiKeCuJe00]).
Diese Arbeit weist besonders viele einseitige Zitate über die Vorteile des
Pair-Programming auf und bei näherer Betrachtung der beteiligten Personen
sieht man, daß mindestens eine von ihnen ihren Lebensunterhalt mit dem
Coaching solcher Methoden verdient. Dies entwertet die Ergebnisse nicht
automatisch, stellt aber eine potentielle Verzerrungsquelle dar, da zudem
nicht genug Daten geliefert werden, um diesen Verdacht zu entkräften.
Eine weitere Verzerrung ist unter dem Namen Hawthorne-Effekt bekannt, worunter man die Tendenz des Probanden versteht, sich allein, weil er an einem
Experiment teilnimmt, anders zu verhalten. Diese Möglichkeit sehe ich bei
allen hier vorgestellten Experimenten. Zwar wird in einigen Arbeiten explizit
darauf hingewiesen, daß den Versuchsteilnehmern klar war, daß es nicht um
ihr Können geht, trotzdem kann sich eine Art Prüfungsgefühl einstellen, weil
Fehler gemessen oder Noten vergeben werden. Besonders bei dem Versuch
in der Firmenumgebung scheint mir diese Gefahr gegeben, da die Ergebnisse
hier von der Firmenleitung mit Interesse aufgenommen wurden und dies den
Probanden im Vorfeld sicherlich bewußt war. Man könnte vermuten, daß
hiervon die Paare eher betroffen waren, da sie vielleicht das Gefühl hatten,
daß aufgrund ihrer doppelten Anzahl mehr von ihnen erwartet wird.
3
Fazit
Als Ergebnis dieser Arbeit will ich mich auf die Effekte beschränken, die als
gesichert gelten können. Da es bei allen Probanden eine Vorliebe für das PairProgramming aufgrund des Spaßfaktors zu geben scheint, nenne ich diesen
Motivationsfaktor als einen der wichtigsten Effekte. Ich denke, daß diese
Methode besonders für die Lehre geeignet ist, da so ein Lernen voneinander ermöglicht wird und niemand das Gefühl bekommt, daß er mit einem
Problem alleingelassen wird. Außerdem spielt der Kostenfaktor hierbei keine
Rolle. Für den Einsatz in der Wirtschaft sehe ich weniger Möglichkeiten.
Bei dem Versuch [PuSeSa03] wurde meines Erachtens der beste Vergleich
angestellt, da hier die Kosten für die Kontroll- und Untersuchungsgruppe
dieselben waren. Diese Arbeit zeigt aber, daß Pair Programming nicht effektiver sein muß, sondern sogar überflügelt werden kann, wenn man es nicht
nur mit Einzelprogrammierern vergleicht. Einen Vorteil scheint das Pair ProMethoden der empirischen Softwaretechnik
323
Experimente: Agile Methoden
gramming allerdings zu besitzen und dieser liegt in der schnelleren Entwicklung des Designs und erster Lösungen. Auch bei der Fehlersuche scheinen
sich vier Augen bezahlt zu machen. In diesen Entwicklungsphasen macht
Pair-Programming Sinn, allerdings nicht wenn es darum geht, das entwickelte Design zu implementieren, da sich hier schon ähnliche Qualitäten mit
Einzelprogrammierern, die mit Überprüfung arbeiten, erzielen lassen.
References
[Nosek98] J. Nosek. The case of Collaborative Programming. Communication of the ACM,41(3):105-108, März 1998
[WiKeCuJe00] L. Williams, R. Kessler, W. Cunningham und R. Jeffries.
Strengthening the Case for Pair-Programming. IEEE Software, Seiten
19-25, Juli/August 2000
[NawWoj01] J. Nawrocki und A. Wojciechowski. Experimental Evaluation
of Pair Programming. In European Software Control and Metrics (Escom), London, UK, 2001.
[PuSeSa03] S. Heiberg, U. Puus, P. Salumaa und A. Seeba. PairProgramming Effect on Developers Productivity. In XP 2003, number
2675 in LNCS, Seiten 215-224. Springer, 2003.
[Müller04] M. Müller. Are Reviews an Alternative to Pair Programming ?
Journal on Empirical Software Engineering, 9(4):335-351, Dezember
2004.
[WiHoNo93] J. Wilson, N. Hoskin und J. Nosek. The benefits of collaboration for student programmers. In SIGCSE technical symposium on
Computer science education, Seiten 160-164, 1993.
[MülPad04] M. Müller und F. Padberg. An Empirical Study about the Feelgood Factor in Pair Programming.In International Symposium on Software Metrics (Metrics), Chicago, Illinois, USA, September 2004.
324
Methoden der empirischen Softwaretechnik
Effects of Test Driven Development
An Evaluation of Empirical Studies
Philip Ritzkopf
Keywords: Test Driven Development, Test-First
1
Introduction
Test Driven Development (TDD) is known as one of the fundamental practices of the extreme programming (XP) software development process as
described in [1]. The key concept of TDD which seems to be counterintuitive at first is that programmers write low level tests before they write the
production code. This is also referred to as Test-First. The technique which
I will describe in detail in the next subsection relies on a unit testing framework such as JUnit [9] which allows for isolated and automatic tests. Other
than the name suggests TDD is not a pure testing strategy since it drives the
design process by implicitly forcing the programmer to imagine the interface
for the unwritten production code which is used by the current test case.
1.1
The Test Driven Development Workflow
Kent Beck explains in [2] that the goal is to write “clean code that works”.
The TDD cycle involves five major steps to achieve this goal, where the first
couple of steps deal with the “that works” part and the last step with the
“clean code” part of the problem. In order to keep the programmer focused
and to let him know when to stop he should maintain a to-do list during the
entire development process. The list keeps track of test cases and pending
refactorings. At all times it should be kept up to date and highlight the
current test case or refactoring which is being carried out. After the to-do
list has been initialized with the first couple of test cases a unit test that
seems to be straight forward to implement is selected. This starts the TDD
cycle:
Experimente: Agile Methoden
1. Add a little test.
When a unit test case is written first, the code will not compile since the
production code that is being tested is still missing. The compilation
errors should be resolved as quickly as possible with the least amount
of work, even if this means to fake a solution. Usually it takes only a
few minutes to get the code to compile.
2. Run all tests and fail.
Once a test case has been added all tests are run to see the new test
fail because the functionality which is being used has not been implemented, yet.
3. Make a little change.
The task is to make the failed test pass as quickly as possible. It does
not matter if the resulting production code does not comply with proper
software engineering and introduces “code smells” [5] to the project at
this point in the cycle. Just make a little change to get the test pass.
4. Run all the tests and succeed.
All tests are run to see the new test succeed. These steps make up the
already mentioned “that works” part.
5. Refactor to remove duplication.
While the first four steps only take a couple of minutes the programmer
now takes all the time he needs to refactor the production code as well
as the unit tests to eliminate duplication. It is important to complete
the TDD cycle because the first four steps will not deliver “clean code
that works” without the last step. During the refactoring phase all tests
are run frequently to ensure that a change did not break anything.
After a complete cycle, the covered test can be marked off the to-do list and
a new test is picked to initiate the next iteration. During this workflow a
programmer will most likely come across new test cases and refactorings that
need to be done. So, they are appended to the to-do list. A test case remains
on the to-do list if it is not possible to eliminate it’s duplication at the current
stage. Instead of backing up a programmer should work forward to get into
the position of refactoring the duplication eventually.
Gunjan Doshi depicts a summary of this procedure and refers to it as the
“Test-Driven Development Rhythm” [8].
326
Methoden der empirischen Softwaretechnik
1 Introduction
Figure 1: Test-Driven Development Rhythm [8]
Notice how the first four steps only take a few minutes. These steps
are done as quickly as possible in order to stay focused. Changes that
are obvious but time consuming are added to the to-do list for later iterations.
The following rules can be used as a guideline for the TDD workflow:
1. Always write a test before the production code.
2. New code is only added if there is a failing test case.
3. Don’t just run a single automated test, instead run all tests.
Methoden der empirischen Softwaretechnik
327
Experimente: Agile Methoden
4. Duplication has to be removed as far as possible before proceeding with
a new test.
5. Never write multiple failing tests.
1.2
Essential Skills for TDD
The TDD workflow consists of several steps with no fixed size which opens up
plenty of opportunities for a TDD beginner to violate this technique. Therefore it takes discipline to stick to the TDD cycle. In [2] Kent Beck disciplines
himself by pretending to slap the back of his hand with a ruler every time he
is about to break a TDD principle.
Another TDD trait is to be able to proceed in tiny steps such that the workflow can progress at a steady pace even for none trivial problems.
Test Driven Development relies on automated tests, hence mastering a unit
testing framework is essential to TDD. This does not mean to just being able
to write basic unit tests, but to know how to apply test patterns that are
appropriate for the current unit test case under development.
Since a vast amount of time is reserved for eliminating duplication to keep
the code as clean as possible, being in the position to detect duplication (i.e.
“code smells” [5]) and to apply appropriate refactorings which also implies
knowledge in the realm of design patterns are skills that should not be absent
of a programmer’s tool box.
It is crucial to realize that these skills are necessary and take time to develop. Untrained programmers who try to apply TDD might come up with
superficial test cases which tend to result in deceptive confidence in the code.
1.3
Claimed Benefits and Effects of TDD
Proponents of the Test Driven Development practice claim that TDD has
positive impacts on the software development process. Writing tests before
the production code sets the programmer’s view to be immediately concerned
with creating interfaces, leading to testable and callable code which promotes
the decoupling of system components [10].
Automated test suites produced by the TDD technique help in preventing
regression; and thus easing integration. It also narrows the gap between
decisions (i.e. design) and feedback (i.e. implemented functionality). This
increases the programmer’s confidence in the code which in turn reduces
the fear of breaking the system and allows for applying refactorings more
aggressively. Being in the position to quickly receive feedback on newly added
functionality might increase development productivity because defects can
328
Methoden der empirischen Softwaretechnik
2 Empirical Studies
be located much earlier and faster in the process, reducing debugging time.
Additionally higher quality of the end product might be a result in terms of
defect density.
The unit test cases give examples on how to use the production code and
thereby form a documentation which stays current because it is compilable
and executable. Now, it is safe to execute the documentation.
Because there are no big up front designs involved in TDD’s micro iterations,
Test Driven Development yields systems that are capable of easily adapting
to late requirement changes.
2
Empirical Studies
The results of several empirical studies in form of case studies and controlled
experiments that have been conducted in order to partially validate the anecdotal benefits of Test Driven Development will be discussed in the following
two subsections.
2.1
Case Studies
Case studies involve an in depth examination of a particular case, collecting
data, analyzing and reporting results. In turn they support a researcher in
understanding a certain phenomenon and lead to new ideas for future experiments. Rather than validating hypotheses, case studies assist in generating
hypotheses.
2.1.1
Descriptions
IBM Retail Store Solutions (RSS) conducted a case study on Test Driven Development [11] in connection with their “JavaPOS” (Java for Point of Sale)
product, which defines a library of JavaBeans for accessing point of sale devices, such as printers, cash drawers, bar code readers and the like.
The case study was motivated by the fact that after the functional verification test phase of previous JavaPOS versions, it was encountered that the
defect density was not reduced on any new revision, although the developers
were highly experienced in the JavaPOS specification and POS devices.
The applied development process consisted of iterative design, implementation and testing phases, where testing was performed as a post coding
activity. None of the unit tests where automated and apparently did not survive a succeeding release. Therefore the management was open for a change
and a different development approach was sought to overcome this problem.
A new development team consisting of nine full-time software engineers had
Methoden der empirischen Softwaretechnik
329
Experimente: Agile Methoden
the task to reimplement the JavaPOS specification using Test Driven Development. However, as potentially money was at risk several questions arose
which had to be assessed.
1. How will the defect rate be affected?
2. What will be the impact on developer productivity?
3. Will TDD lead to a more robust design?
4. Will TDD result in smoother code integration?
In order to answer these questions, the newly developed JavaPOS software
was compared to an updated legacy implementation which provided similar
functionality.
According to the following defect and test progression curve (figure 2), the
realized defect density of the legacy system was consistently higher than the
expected defect density resulting in an average of about 7.0 errors per KLOC.
Figure 2: Functional verification test defect projection - Legacy
Project [11]
In contrast, the new JavaPOS system which had been developed with TDD
resulted in 71.4 KLOC of new code and about 262 defects, averaging to 3.7
errors per KLOC (figure 3). Hence, the new team apparently experienced a
50% reduction in defect density.
330
Methoden der empirischen Softwaretechnik
2 Empirical Studies
Figure 3: Functional verification test defect projection - TDD Project [11]
The productivity rate in terms of LOC per person month for the new system
was slightly below the expected rate which was estimated by studying post
historical data of similar projects.
New POS devices had been added about two thirds of the way through the
schedule without any problems. This suggests that the evolved design was
able to adapt to late requirement changes.
Daily integration indicated the progress of the project and reduced risks,
since problems were detected much earlier.
The case study concludes that these effects were caused by employing Test
Driven Development.
However there are a couple of inconsistencies. While the new JavaPOS implementation had 71.4 KLOC, the size of the legacy system was not stated.
At the same time the total amount of defects of the new and the legacy system were 247 and 80, respectively. Therefore it is entirely unclear whether or
not the stated defect rate for the legacy system is only based on the updated
code. Also the fact that the two teams were differently experienced was ignored. This does not allow for a coherent conclusion that the effects can be
solely traced back to the fact that Test Driven Development was used.
2.1.2
Resulting Hypotheses
Even though the case study at IBM does not deliver any conclusive results
regarding Test Driven Development, the following hypotheses can be derived:
1. TDD reduces the defect rate.
Methoden der empirischen Softwaretechnik
331
Experimente: Agile Methoden
2. TDD increases programmer productivity.
3. TDD leads to more robust designs.
2.2
Controlled Experiments
In a controlled experiment, a control group can be compared to an experiment
group to demonstrate a cause and effect hypothesis. The two groups are used
to illustrate that a phenomenon occurs in the presence of an action which
is applied to the subjects and does not occur in the absence of the action.
Both groups should be identical except for the one aspect whose effect is
being tested. Thus, controlled experiments can be used to falsify or verify a
hypothesis.
2.2.1
Experiment 1: “Experiment about Test-first programming”
Description and Experimental Design In 2001, Müller and Hagner conducted a controlled experiment which compared Test-First programming to
traditional programming [12]. It involved 19 computer science graduate students, who had previously participated in an Extreme Programming practical
course. The controlled independent variable of the experiment was whether
the subjects used Test-First or a traditional (design, code, test) development
process. They divided the students into a Test-First group (TFG) consisting
of 10 programmers and a control group (CG) consisting of 9 programmers
who employed the traditional development process. In order to be able to
obtain conclusive results with respect to programmer productivity, code quality, and program understanding the dependent variables; overall development
time, program reliability and the number of reused methods were of particular interest.
Each of the 19 programmers had to solve the same problem. The main class
of a graph library had to be implemented. All method declarations and comments of the class were given, such that only the method bodies had to be
completed.
Two distinct phases had to be carried out by each subject:
1. Implementation phase IP, during which each student developed the
graph library until they thought their program would run correctly.
2. Acceptance test phase AP, during which the students had to fix any
faults that were detected by the acceptance test.
The researchers used a modified version of the JUnit framework [9] to facilitate automated testing for their analysis. The acceptance test was used
332
Methoden der empirischen Softwaretechnik
2 Empirical Studies
to ensure a minimal code quality of the delivered programs and both groups
knew about the acceptance test right from the beginning of the experiment.
Quantitative Results The measured problem solving time of both groups
showed only a small difference. It could be observed that the TFG had a
slightly increased programming effort. Therefore, as opposed to their initial
expectations the researchers concluded that TDD is not more efficient than
the traditional development process.
In order to evaluate program reliability, the portion of passed assertions over
all possible assertions was measured for the acceptance test as well as for
a random test which invoked method calls of a given implementation in a
randomized fashion. To ensure that common methods, such as the insert operation were called more frequently than less usual operations, each method
was given a corresponding weight.
For the final programs, it is remarkable that five implementations of the TFG
achieved a reliability of over 96% at the random test compared to only one
of the implementations of the CG. However, due to a large variance in the
data points it could not be inferred that the difference in the medians (i.e.
median(TFG)=91%, median(CG)=84%) suggests an advantage of TDD with
respect to reliability. Interestingly, for the first run of the acceptance test and
the random test right after the implementation phase it turned out that in
either case the programs of the TFG were less reliable than the programs of
the CG. This gives raise to the following speculative questions, which could
not be answered by this experiment:
1. Did TDD give the TFG a false sense of security, because all their tests
were running all the time without covering the major defects?
2. Did the knowledge about the acceptance test motivate the CG to test
their programs more thoroughly after the implementation?
3. Did the TFG regard the acceptance test just as another feed back loop
as they were used to from their own test cases?
4. Did the TFG did not apply the TDD technique correctly because they
were not experienced enough?
Based on these results the researchers could not conclude that TDD increases
code quality.
The analysis of code reuse in terms of the total number of reused methods
and the total number of failed method calls exhibited a negligible difference
for either group. However, the Test-First group had significantly less errors
Methoden der empirischen Softwaretechnik
333
Experimente: Agile Methoden
when reusing a method more than once. This suggests that TDD increases
the program understandability, because once a defect is detected by a unit
test case the programmer will learn how to use the method correctly by fixing
the fault before continuing with the next step in the TDD workflow.
Internal Validity Internal validity of the experiment was threatened by the
fact that the independent variable was not technically controlled. While
the members of the Test-First group were asked to use the TDD technique,
this requirement was only monitored by occasionally asking the subjects if
they managed to handle this development approach. Thus, no objective
measurement that could confirm compliance with the TDD workflow exists.
External Validity Since the computer science students were no professional
software developers and only had a limited experience with Test Driven Development, which possibly did not allow to turn the steps of the TDD process
into motor actions, yet; the drawn conclusions might not be applicable within
an industrial context. Furthermore, working environments that deviate from
the experimental setting might impact on the effectiveness of TDD, which
constricts genaralizability.
Summary Within its contextual limitations (e.g. small sample size, limited experience with TDD, partially large variance of collected data and the
discussed validity), the experiment yields the following results:
1. TDD does not increase programmer productivity when it is compared
to a traditional development process.
2. Due to the large variance of the data points, it cannot be concluded
that TDD yields higher quality programs.
3. TDD supports better program understanding with respect to code
reuse.
2.2.2
Experiment 2: “An Initial Investigation of Test Driven
Development in Industry”
Description and Experimental Design In their experiment, George and
Williams tried to assess the following hypotheses:
1. TDD leads to superior external code quality in comparison to code that
has been developed with a traditional development process.
334
Methoden der empirischen Softwaretechnik
2 Empirical Studies
2. TDD increases programmer productivity in the sense that programmers
who practice TDD will develop code faster than programmers who use
a traditional waterfall approach.
In order to do so, they arranged three TDD experimental trials with 24 professional software developers from three different companies (John Deere,
RoleModel Software, and Ericsson) [6]. Each experimental trial involved
eight randomly assigned developers, split into a TDD group and a control
group, which were asked to solve a given task using TDD and a traditional
waterfall process, respectively. Both groups used pair programming [1] to
tackle the problem which came in form of a set of requirements for a small
(approximately 200 LOC) java bowling game. As soon as the programmers
thought their implementation would meet the requirements they submitted
it for analysis.
The independent variable of this experiment was whether TDD or a waterfalllike practice was used. External code quality was measured in terms of passed
black box test cases and programmer productivity with respect to total development time.
In the initial design of the experiment, the control group was not required
to write automated tests and the researchers provided an acceptance test.
However, after the first experimental trial it turned out that some of the
delivered programs did not handle all error conditions, since the initial pairs
stopped development as soon as they passed the acceptance test. Thus, the
experimental design was adjusted for the remaining two trials, such that no
acceptance test was provided and the control group was supposed to to write
automated tests after the implementation of the game was done.
Furthermore, a survey was conducted among the developers to obtain additional qualitative results with respect to productivity, effectivity, and ease of
learning TDD.
Quantitative Results Although the experiment design had slightly changed
after the first run, the collected data of all three experimental trials was included in the analysis.
External code quality was indicated by the number of passed black box test
cases. This validated to which degree the requirement specification was met,
as well as the robustness of the implementation (i.e. error handling). The
resulting data points from all 6 TDD and 6 control pairs show, that approximately 18% more test cases were passed by the TDD pairs’ games. This
suggests that TDD increases external code quality.
Productivity was measured in terms of over all development time. Here, the
obtained data showed that on average the TDD pair took 16% more time,
Methoden der empirischen Softwaretechnik
335
Experimente: Agile Methoden
while the medians were nearly identical, which suggests that programmers
who practice TDD are not more productive. However, it is questionable
whether or not this difference was due to the fact that almost no control
pair took their time to write automated tests as they were supposed to.
The researchers also found a moderate correlation between productivity and
quality, which opens up the possibility that the higher quality was not solely
the result of TDD but also a result of the increased time. This makes the
comparison somewhat uneven. But, since all pairs submitted their programs
once they thought they would run correctly, it is remarkable that the TDD
pairs did not hand in their code until they wrote higher quality code.
Qualitative Results All 24 developers participated in a survey which consisted of nine questions. These nine questions were aimed to elicit the programmers’ opinions regarding productivity, effectiveness and how difficult
the practice is to adopt. For programmer productivity it turned out that
87.5% of the developers thought that TDD facilitates better requirement understanding and 95.8% were convinced that TDD reduces debugging time.
The average of all positive comments yields that approximately 78% of programmers believed that TDD improves programmer productivity.
Concerning effectiveness, 92% of developers thought that TDD leads to
higher code quality, 79% believed that TDD promotes simpler desing and
71% figured that the technique was noticebly effective. Thus, averaging these
scores yields that 80% thought that TDD is effective.
About 56% of the respondents thought that getting into the TDD mindset
was difficult, while only 23% thought that the missing up front design phase
was not obstructive. This exhibits that on average 40% of the professional
developers believed that the TDD approach is hard to adopt.
Internal Validity Similarly to Müller and Hagners’ experiment the independent variable was not technically controlled. This might be a potential
threat to the internal validity of the experiment since some of the professional
developers had only a three week experience in TDD, which could blur the
cause-effect relationship between the employed development technique and
the observed results of the dependent variables.
External Validity The following limitations of the experimental design restrict the generalizability of the discussed results.
The size of the programming task (200 LOC) was very small compared to a
typical business application. Thus, the obtained results might not scale for
a real world application.
336
Methoden der empirischen Softwaretechnik
2 Empirical Studies
The subjects used pair programming in addition to TDD to solve the given
problem. Hence, the results apply to the combination of TDD and pair programming.
Another threat to the validity of the experiment is the fact that the experimental design was modified after the first trial. Also the sample size with 6
TDD pairs and 6 control group pairs was rather small.
Summary Clearly, the usage of professional software developers in their
own working environment can be considered as strength of the experiment.
However, weaknesses such as the modification of the experimental design
have to be kept in mind while looking at the results. Since, TDD was not
isolated from the pair programming practice there is little evidence that the
positive results of the TDD group was solely caused by the test first technique.
This said, within its contextual limitations the following two results could be
obtained:
1. The process involving TDD yields better code quality compared to code
that was produced by a traditional waterfall like development process.
2. Programmer productivity in terms of overall development time was not
increased by the employed TDD process.
2.2.3
Experiment 3: “A Prototype Empirical Evaluation of Test
Driven Development”
Description and Experimental Design For their experiment Geras, Smith,
and Miller chose a slightly different design than the ones that were previously
discussed [12], [6]. The participants were divided into two groups (i.e. group
1 and group 2), where each subject of either group had to write two different programs. While group 1 developers implemented program A with
a Test-Last process and program B with a Test-First process, the second
group developed program A with a Test-First process and program B with
a Test-Last process. Automated tests were categorized into developer tests
and customer tests. As in the previous experiments a customized JUnit [9]
version was used for the developer tests. The researchers created a new
testing framework for the customer tests, called VBExpect. This was done
because in industry customer tests and developer tests usually take place on
different testing frameworks. Hence, in addition to writing developer tests
the programmers had to translate requirements into customer tests. This
is one aspect that was not covered by the previous experiments. Thus, the
use of Test-First versus Test-Last makes up the single controlled independent
variable of this experiment.
Methoden der empirischen Softwaretechnik
337
Experimente: Agile Methoden
Both programming tasks were primarily aimed to simulate business domain
problems. Program A was a simple command line tool that permits a user
to register a new project in a database. Program B, also a command line application, lets a user record work effort against a project task in a database.
While program A contained almost no business logic, program B involved
some business as well as data presentation logic. Therefore, program B was
slightly more complex than program A which was intended to model a relatively simple standard scenario in a business domain. Both tasks came in
form of a set of requirements.
The programmers were all professional software developers with a work experience ranging from 6 months to over 6 years. Since, participation was voluntary, there were only 14 programmers in total. In addition to the already
mentioned testing frameworks and requirements specification, each subject
was equipped with detailed descriptions for the Test-First and Test-Last process to increase experimental control. The developed solutions of both programs had to be handed in anonymously via a web portal.
The major goals of this experiment were to evaluate the effects of TDD at the
customer and developer test levels with respect to developer effort, testing,
and failure rate.
Quantitative Results Instead of just comparing the measured development
times for the Test-First development (TFD) process and the Test-Last development (TLD) process, the researches normalized the data with estimates
they had obtained from a group of industry experts. Ideal programming
hours was the unit they assigned to these time estimates with which the actual effort per ideal programming hour was calculated for each program as
shown by the following box plot diagram.
338
Methoden der empirischen Softwaretechnik
2 Empirical Studies
Figure 4: Developer effort per ideal programming hour (in minutes) [7]
From the plot, as seen in figure 4, the researchers concluded that the TFD
process does not reduce programmer productivity.
The log files of the partially modified testing frameworks delivered the data
for the testing effort analysis. Figure 5 shows that the developers who used
the test first approach tended to write more developer test cases as well as
customer tests. If there was a correlation between the number of test cases
and achieved code quality, this would mean that the test first process might
lead to higher program quality than the test last process. From the results
presented in figure 6, it seems that while the applied development process
causes hardly any difference regarding developer tests, test-first developers
seem to write more customer tests for each feature than test-last developers.
Since, customer tests directly reflect the requirements this might be another
positive effect of TDD.
The researchers also tried to answer the question whether or not TDD encourages developers to run tests more frequently than programmers who use
TLD. In their analysis they considered the number of test executions per
hour and came to the result that despite a relatively large variation of the
data points, Test-First developers tend to run tests more often than TestLast developers.
The measurement of unplanned failures was intended to shed light on the direct progression of a programmer during the development process, as a high
unplanned failure rate suggests a rather experimental programming style.
Methoden der empirischen Softwaretechnik
339
Experimente: Agile Methoden
Figure 5: Test case density
(tests per kloc) [7]
Figure 6: Test case density
(tests per ideal programming
hour) [7]
Since, planned failures are an integral part of the TDD technique as opposed
to the TLD practice, the researchers modified the testing frameworks in such
a manner, that for every test assertion the developers had to state their intent to whether or not the test condition would pass. Test conditions which
turned out to violate the stated intention were counted as an unplanned failure. From the measured values, as seen in figure 7, the researchers stated
that these results were inconclusive when considering Test-First vs. TestLast analysis. However, by inspecting developer tests versus customer tests,
they explain that the results might reflect the developer’s discomfort with
customer tests.
What remains questionable, is what side effects this modification had on the
TDD workflow, since in TDD all newly added test cases are supposed to fail
before they pass. This implies that for all assertions the initial intention has
to be revised at a later step, which might obstruct the workflow. However,
this is not the case for the TLD technique.
340
Methoden der empirischen Softwaretechnik
2 Empirical Studies
Figure 7: Unplanned failures per test case [7]
Internal Validity While Geras, Smith and Miller provided process descriptions, the professional software developers were allowed to work on their own
time in their own working environment, which opens up the possibility that
the programmers did not follow each step in those process descriptions. This
means that similarly to the previous experiments the independent variable
was not technically controlled.
External Validity External validity is jeopardized by the fact that the samples were chosen on a voluntary basis rather than randomly, which might
have introduced strong biases.
Another concern is the size of the target programs. Even though the programs model applications that stem from a business domain, they are not
truly representative for a real world business application. While the programs
mimic the learning process in early iterations by their varying complexities,
they do not model succeeding iterations.
Also the researchers did not mention how much experience the developers
had with test driven development prior to the experiment.
Summary Based on the discussed quantitative results, the researchers concluded that the Test-First practice may not require more effort than a traditional Test-Last process, but it may support developers in writing more tests
and execute them more frequently. However, they did not state whether or
not there was a correlation between the number of tests and the code quality
of the final programs.
Methoden der empirischen Softwaretechnik
341
Experimente: Agile Methoden
2.2.4
Experiment 4: “On the Effectiveness of Test-first Approach to
Programming”
Description and Experimental Design In 2003, Erdogmus, Morisio, and
Torchiano conducted a formal experiment in an academic setting with the
goal to compare Test-First programming with Test-Last programming with
respect to external quality and programmer productivity [3]. They adjusted
their experimental design to overcome some of the weaknesses of earlier studies [12], [6]. Instead of providing subjects with predefined interfaces, which
would have constrained the solution space, they used high-level requirements
that were divided into unique features for the experimental task. This alleviated the problem of subjects, who used a waterfall like development approach,
not writing any tests, since the unique features were given to them one at a
time in a specific order such that an incremental development process could
be mimicked. Thus, testing and coding activities could be easily interleaved
which helped the programmers of either group (i.e. Test-First and Test-Last
group) to write tests and therefore eliminated short-term productivity advantages for a group that would not have written any tests, otherwise. In
order to achieve their experimental goals the researchers used a two-stage
model for their hypotheses as seen in figure 8.
Figure 8: Two-stage hypotheses model [3]
Where stage 1 hypotheses were the following:
• 1T: Test-First programmers write more tests.
• 1Q: Test-First programmers produce a higher quality product.
• 1P: Test-First programmers are more productive.
342
Methoden der empirischen Softwaretechnik
2 Empirical Studies
and stage 2 hypotheses:
• 2Q: Higher number of tests implies higher quality product.
• 2P: Higher number of tests implies higher productivity.
Again, the independent variable was whether a Test-First or a Test-Last
technique was applied. The main dependent variables of the experiment
were code quality, programmer productivity, and the number of tests per
unit effort, which was also used as an intermediate variable. While stage 1
hypotheses assumed a direct effect between the independent variable and the
dependent variables, stage 2 hypotheses involved the intermediate variable
to detect causal relationships that were triggered by a chain effect. Namely,
if hypotheses 1T and 2Q were accepted, one could infer that TDD leads to
better quality because it caused programmers to write more tests. Hypotheses 1T and 2P behave analogously.
The experiment was carried out during a third year undergraduate computer
science course on object oriented programming. A prequestionnaire assessed
the experience and skills of the participants to stratify the subjects with
respect to their skill level before they were randomly assigned to one of the
two groups. Before they started to work on the experiment task, both groups
were trained in the corresponding development technique during concurrent
sessions. The programming task was the same Java bowling game as George
and Williams had previously used in their TDD study [6]. However, this time
the requirements were split up into separate stories which were building on
one another, requiring the students to incrementally implement the stories
one at a time in a specific order. This had the advantage that even partially
completed programs could be evaluated, since the researchers provided black
box acceptance tests for each story. All tests (acceptance tests and developer
tests) were created with the JUnit [9] testing framework. While the subjects
knew about the goals of the experiment (comparison of Test-First vs. TestLast with respect to productivity and quality), neither the acceptance tests
nor the hypotheses were revealed to them.
Quantitative Results The researchers analyzed the data of 24 subjects, 11
were in the Test-First group (TFG) and 13 in the Test-Last group (TLG).
The number of programmer tests written by a subject were measured per
unit of programming effort. Ineffective test cases were filtered out through
visual inspection. Since, no dead line for the final programs were issued,
the variation in total programming effort was large, such that the number of
tests had to be normalized by the total programming effort. As can be seen
in figure 9, both the median (dot on horizontal line) and the mean (floating
Methoden der empirischen Softwaretechnik
343
Experimente: Agile Methoden
dot) of the tests were considerably higher for the TFG than for the TLG.
Also, the 25% and 75% limits were both higher for the Test-First group. In
their analysis the researchers found these results to be statistically significant
and therefore accepted hypothesis 1T.
Program quality was based on the number of failed assertions per story, where
only delivered stories were considered. A story was counted as delivered if it
passed at least 50% of the corresponding acceptance test assertions. Since,
the stories had different difficulty levels, they were weighted by the number
of assertions, such that the achieved quality was given by the weighted average over all delivered stories. The corresponding box plot in figure 9 shows
that, while the means were very close, the median for the TLG was approximately 10% higher than for the TFG. Also, both quantiles were lower for
the TFG, thus suggesting a slight quality advantage for the test last group.
After further statistical tests, the researchers could not accept hypothesis 1Q
and concluded that there were no significant quality differences between the
two groups.
The productivity measure was obtained by normalizing the number of delivered stories by total programming effort. The associated box plot representation of the collected productivity data in figure 9 shows that both, median
and mean are higher for the Test-First group. However, while the 75% limit
is much higher for the TFG, the 25% quantile is slightly below the one of the
TLG. The researchers could not accept hypothesis 1P at this point because
the results turned out to be not statistically significant. Because of the remarkable differences between the means and the 75% limits, the stage two
hypotheses were used for further investigations.
Interestingly the researchers found a linear relationship between the number
of tests and productivity and accepted hypothesis 2P.
Hypothesis 2Q could not be accepted because the obtained data did not
predict a linear relationship between the number of tests and quality.
Figure 9: Boxplots for number of tests, productivity and quality [3]
344
Methoden der empirischen Softwaretechnik
3 Suggestions for Future Experiments
Internal Validity A major threat to internal validity was the degree to
which the subjects deviated from the prescribed development process. Therefore the researchers enlightened the subjects about the importance of precisely following the assigned technique. They also tried to narrow down this
threat by assessing process conformance through a postquestionnaire as well
as neglecting subjects that had not written any tests for at least half the
stories.
Another threat to internal validity stemmed from the use of small stories,
which apparently tend to increase the overhead of testing. If the development techniques had different impacts on this testing overhead, the results
might not be as meaningful.
External Validity As the researchers used the same programming task as
George and Williams [6], the same threats to external validity apply with
respect to application size, as previously discussed in subsection 2.2.2.
The generalizability of the results could be limited by the fact that the subjects were undergraduate students and not professional software developers.
However, the authors argue that this might even be an advantage, because
effective application of TDD requires high skills and discipline and since students were able to effectively apply the technique, professional developers
should be able to achieve even more dramatic improvements.
Summary The main result of the experiment yields that Test-First programmers write more tests per unit of programming effort and that a higher
number of programmer tests leads to a higher level of productivity. Therefore, the researchers concluded that through a chain effect, TDD seems to
improve productivity.
However, Test-First programming did not result in higher quality on average,
but independent of the employed technique, more tests appeared to improve
the minimum quality achievable and to decrease the variation. Again, the
observations were limited within its context (e.g. incremental development
process, undergraduate students).
3
Suggestions for Future Experiments
All four controlled experiments [12], [6], [7], [3] showed weaknesses regarding
process conformance. Future experiments could be improved by introducing
a software tool that measures to which degree subjects follow a prescribed
development process. Since, most experiment tasks had to be implemented
in java, and since the Eclipse IDE [4] is widely used for java projects in
Methoden der empirischen Softwaretechnik
345
Experimente: Agile Methoden
industry as well as in academic settings, such a tool could be realized as
an Eclipse plug-in. The plug-in could for example visualize which step the
programmer is currently carrying out and log all programmer activities (e.g.
writing production code, running unit tests, running the application etc.).
On completion of a process step, the programmer would interact with the
tool to advance to the next possible step. Thus, the plug-in would not only
be able to check programmer activities for a specific step, but also guide the
programmer through the development process. This might even assimilate
programmer skills with respect to the employed technique.
Another aspect, that is not discussed in any of these experiments is the effect
of Test Driven Development on the design and structure of the resulting programs which may have serious effects on long term productivity and quality.
This is particularly important, considering that a large portion of software development costs are caused by maintenance issues. While Erdogmus, Morisio,
and Torchiano divide the programming task into separate stories, that apparently emulate late requirement changes [3], they do not make any explicit
statements on how well TDD manages to handle these changes. Therefore,
the experiment could be extended such that the evolving design of the delivered stories is measured in terms of software metrics.
Since, the sample size in the experiments tended to be rather small, future
experiments should acquire more subjects in order to decrease the sampling
error.
4
Conclusion
From the discussed empirical studies it becomes clear, that it is quite difficult to isolate a single aspect of a software development process in order to
attribute certain observations solely to this aspect. It is also very difficult to
estimate what effects potential flaws in an experimental design have on the
inferred results.
Experimental weaknesses regarding programming tasks, correctness, effects
and process conformance cannot be ignored, when viewing the outcome of
these studies. Thus, the main results of all five studies (Table 1) have to
be seen within the limitations of their contexts. However, it is interesting
to see how the later studies adjusted their designs in oder to overcome some
of the weaknesses of earlier experiments. This is especially true for the last
empirical study [3].
While these empirical studies do not deliver a complete evaluation of Test
Driven Development at this point, they support some of the benefits that
TDD proponents claim. From most of these studies it could be observed
346
Methoden der empirischen Softwaretechnik
References
that Test-First programmers in comparison to Test-Last programmers tend
to write more test cases. There were also some promising attempts on relating the number of test cases to the claimed benefits. What remains unclear
is how the effectiveness of TDD depends on the individual skill level and
how long it takes to master this technique. Therefore, these studies should
encourage researchers to extend experiments for further investigations and
in turn support them to revise the theories on TDD.
Study
Type
Results
Müller and Hagner 2002
Experiment
TDD does neither improve quality nor
productivity, but improves program
understanding.
Maximilien and Williams 2003
Case Study
TDD improves quality, but there is
hardly any difference in productivity.
George and Williams 2003
Experiment
While TDD improves quality, it does
not produce better productivity.
Geras, Smith, Miller 2004
Experiment
There is no difference in productivity, but TDD encourages developers to
write more test cases and to execute
them more frequently.
Erdogmus, Morisio, Torchiano 2005
Experiment
TDD encourages programmers to write
more tests and a higher number of tests
leads to higher productivity. TDD
does not improve quality on average,
but with the higher number of tests
it increases the minimum achievable
quality.
Table 1: Results of empirical studies on TDD
References
[1] Beck, K., Extreme Programming Explained:
Addison-Wesley, 1999.
Embrace Change.:
[2] Beck, K., Test-Driven Development: By Example.: Addison-Wesley,
2003.
[3] Erdogmus, H., Morisio, M., and Torchiano, M., “On the Effectiveness of
the Test-first Approach to Programming,” IEEE Transactions on Software Engineering, Vol. 31, No. 1, 2005.
[4] http://www.eclipse.org
[5] Fowler, M., Refactoring: Improving the Design of Existing Code.:
Addison-Wesley, 1999.
Methoden der empirischen Softwaretechnik
347
Experimente: Agile Methoden
[6] George, B. and Williams, L., “An Initial Investigation of Test Driven
Development in Industry,” presented at ACM Symposium on Applied
Computing, Melbourne, Florida, 2003.
[7] Geras, A., Smith, M. and Miller, J., “A Prototype Empirical Evaluation of Test Driven Development,” Proceedings of the 10th International
Symposium on Software Metrics, Chicago, Illinois, 2004.
[8] http://www.gunjandoshi.com
[9] http://www.junit.org
[10] Martin, R. C., Agile Software Development: Principles, Patterns, and
Practices.: Prentice Hall 2002.
[11] Maximilien, E. M. and Williams, L., “Assessing Test-Driven Development at IBM,” Proceedings of the 25th International Conference on
Software Engineering, 2003.
[12] Müller, M. and Hagner, O., “Experiment about Test-first programming,”
presented at Conference on Empirical Assessment In Software Engineering, Keele, 2002.
348
Methoden der empirischen Softwaretechnik