next up previous contents
Next: 3.7 Weitergehende Information Up: 3. Softwaretechnik-Forschung Previous: 3.5 Beispiel: N-Versions-Programmierung

Unterabschnitte

3.6 Beispiel: Pseudokode versus Flußdiagramm

Zum Abschluß wollen wir auch noch ein Beispiel für mißlungene experimentelle Forschung vorstellen. Und zwar nicht mißlungen in dem Sinne, daß die erwünschten oder erwarteten Resultate beim Experiment ausgeblieben wären, sondern in dem Sinne, daß der Entwurf des Experiments diese Resultate weitgehend irrelevant macht. Es handelt sich um eine Arbeit von Scanlan [Sca89].

3.6.1 Forschungsfrage

Scanlan untersucht die Verständlichkeit von Flußdiagrammen im Vergleich zu Pseudokode. Im einzelnen stellt er die folgenden Hypothesen auf:

1.
Flußdiagramme erzeugen weniger Verständnisfehler.
2.
Flußdiagramme geben Studenten mehr Zutrauen in ihr Verständnis eines Algorithmus.
3.
Flußdiagramme verringern die Zeit, die zur Beantwortung von Fragen über einen Algorithmus benötigt wird.
4.
Flußdiagramme verringern die Anzahl von Malen, die auf den Algorithmus geblickt werden muß.
Alle diese Hypothesen werden für Algorithmen kleiner, mittlerer und hoher Komplexität getestet, um die zusätzliche Hypothese zu prüfen, daß die Nützlichkeit von Flußdiagrammen mit steigender Komplexität zunimmt.

Der vorliegenden Arbeit vorangegangen war eine Serie von Experimenten von Shneiderman, Mayer, McKay und Heller [SMMH77], die die Nützlichkeit von Flußdiagrammen als Hilfe bei verschiedenen Arbeitsvorgängen untersuchten: Programmentwicklung, -verstehen, -modifikation und Fehlersuche. Die Experimente fanden keine statistisch signifikanten Unterschiede in der Leistung zwischen Gruppen, die mit Flußdiagrammen arbeiteten und solchen, die das nicht taten, sondern nur Fortran-Quellcode benutzten.

Scanlan führt dies auf Schwächen im Experimentaufbau zurück: zu kleine Gruppen (je 10 bis 30 Versuchspersonen), zu einfache Algorithmen in den Aufgaben, Fragen nach exakten Ausgabeformaten, welche im Flußdiagramm nicht ersichtlich waren, und vor allem fehlende Zeitmessung, sondern Beurteilung nur nach Korrektheit.

3.6.2 Experimentidee

Gebe einen einfachen, einen mittleren und einen komplexen Algorithmus in Pseudokode und äquivalent als Flußdiagramm an. Stelle für jeden Algorithmus einen Katalog von Verständnisfragen auf. Stelle eine Experimentiervorrichtung her, die es erlaubt, die Anzahl und Dauer der Blicke auf die Algorithmen zu messen und die Antworten auf die Fragen sowie das Zutrauen der Versuchspersonen in diese Antworten festzuhalten.

Wende dann diesen Versuchsaufbau auf viele Versuchspersonen an und prüfe anhand der Beobachtungen die Hypothesen statistisch.

3.6.3 Experimentaufbau

Am Experiment nehmen 82 Versuchspersonen teil, deren Herkunft, Ausbildung, Alter etc. Scanlan genau dokumentiert.

Scanlan tut alles nur denkbare, um keine unkontrollierten Variablen in seinem Experimentaufbau übrigzulassen. Die Algorithmen werden nur ihrem Kontrollfluß nach festgelegt (ELSE-IF-Ketten) und dann im Zufallsverfahren mit Bedingungen aus einer festen Bedingungsmenge und Anweisungen aus einer festen Anweisungsmenge gefüllt, um sicherzustellen, daß keine der Versuchspersonen bereits mit einem der Algorithmen einmal in Kontakt gewesen ist.

Von jedem Algorithmus werden zwei Versionen A und B erzeugt und der Versuchsperson entweder in der Reihenfolge A als Flußdiagramm, dann B als Pseudokode oder umgekehrt B als Flußdiagramm, dann A als Pseudokode vorgelegt, um Lerneffekte zu vermeiden. Die Auswahl zwischen den Reihenfolgen wird ebenfalls zufällig vorgenommen.

Die Flußdiagramme verwenden in ihren Beschriftungen dieselbe Schriftart und -größe wie der Pseudokode, um Unterschiede in der Lesbarkeit auszuschließen.

Die Experimentdurchführung wurde komplett von einem Computer gesteuert, der mittels einer Spezialvorrichtung die auf Papier gedruckten Flußdiagramme oder Pseudokodes sichtbar und unsichtbar machen konnte, um die Messung der Betrachtungszeit und -häufigkeit zu erlauben. Die Fragen wurden auf dem Bildschirm angezeigt, Antworten wurden über die Tastatur eingegeben. Die Versuchsperson konnte mit einem Knopf steuern, ob sie die nächste Frage sehen und die Antwort eingeben wollte, oder den Pseudokode bzw. das Flußdiagramm betrachten; beides zugleich war nicht möglich. Dadurch sollte der Zeitaufwand für diese beiden zeitlichen Teile der Bearbeitung der Aufgaben klar erfaßbar werden.

Um ungleiche Behandlung der Versuchspersonen zu vermeiden, wurden alle Anweisungen in den Übungsphasen vor Experimentbeginn mittels eines Sprachausgabegeräts ebenfalls direkt vom Computer gegeben. Das Experiment fand ferner in einem tageslichtlosen, schallgedämmten Raum statt.

Um die Varianz der Versuchspersonen im Hinblick auf das Verständnis der Experimentalprozedur zu reduzieren, wurde jeder Versuchsperson einige Tage zuvor eine sechsseitige Beschreibung ausgehändigt und zum Experiment nur solche Personen zugelassen, die im ersten oder zweiten Versuch eines Tests mit 10 Fragen über das Experiment mindestens 9 richtig hatten.

Hier ist zur Veranschaulichung der Pseudokode des Algorithmus mittlerer Komplexität in derselben Form, die im Experiment benutzt wurde. Der Gegenstand des Algorithmus sind Behandlungsvorschriften für Gemüse:

PROC
  IF GREEN
    THEN
      IF CRISPY
        THEN
          STEAM
        ELSE
          CHOP
      ENDIF
    ELSE
      FRY
      IF LEAFY
        THEN
          IF HARD
            THEN
              GRILL
            ELSE
              BOIL
          ENDIF
        ELSE
          BAKE
      ENDIF
  ENDIF
END PROC
dieses Programm enthält 4 Tests (Adjektive) und 6 Anweisungen (Verben). Das einfache Programm ist genau analog aufgebaut und enthält 2 Tests und 4 Anweisungen, das ,,komplexe`` ist ebenfalls analog und enthält 6 Tests und 8 Anweisungen. Keines der Programme enthält eine Schleife, einen Test, dessen Bedingung aus mehr als einem Wort besteht, oder eine Anweisung, die aus mehr als einem Wort besteht. Das Layout des Pseudokodes war jeweils wie oben.

Zu diesen Programmen hatten die Versuchspersonen Fragen zu beantworten und zwar 12 über das einfache Programm, 36 über das mittlere und 60 über das komplexe. Die Fragen hatten zum Beispiel die folgende Form: ,,What are the values (true/false/unknown) at all decisions in the algorithm when the vegetable is boiled¿`

3.6.4 Ergebnis

Alle Hypothesen konnten bestätigt werden:

1.
Die mittlere Zahl richtig beantworteter Fragen war bei Flußdiagrammen stets signifikant höher als bei Pseudokode, z.B. beim komplexen Algorithmus 98.7% gegenüber 91.7%. Die Konfidenz liegt in allen drei Fällen über 99.6%.
2.
Das mittlere subjektive Zutrauen der Versuchspersonen in ihre Antworten liegt ebenfalls bei Flußdiagrammen stets signifikant höher als bei Pseudokode, z.B. beim komplexen Algorithmus bei 3.94 Punkte gegenüber 3.71 Punkten. Die Konfidenz für diese Unterschiede liegt in allen drei Fällen über 99.9%.
3.
Die mittlere Zeit zur Beantwortung der Fragen liegt bei Flußdiagrammen signifikant niedriger. Beim mittleren Algorithmus mit 6.8 gegen 7.5 Sekunden mit Konfidenz 97% und beim komplexen mit 7.3 gegen 8.7 Sekunden mit Konfidenz 99.98%. Beim einfachen Algorithmus ist der Unterschied nicht signifikant.
4.
Die mittlere Anzahl von Betrachtungen des Algorithmus pro Frage ist bei Flußdiagrammen ebenfalls signifikant niedriger, z.B. beim komplexen Algorithmus 0.72 mal gegenüber 0.82 mal. Die Konfidenz liegt in allen drei Fällen über 99.5%.
5.
Die Konfidenz in die Überlegenheit der Flußdiagramme ist für den komplexen Algorithmus stets höher als für den einfachen. Also nimmt die relative Nützlichkeit von Flußdiagrammen mit steigender Komplexität zu.

3.6.5 Diskussion

Trotz seines handwerklich so sauberen Aufbaus ist das Experiment ein furchtbarer Mist. Das Problem besteht darin, daß die konkreten Aufgabenstellungen so grotesk unrealistisch sind, daß die Ergebnisse einfach gar nichts aussagen. Hier die Probleme im einzelnen:

1.
Die Algorithmen sind allesamt sehr kurz; selbst der ,,komplexe`` hat nur 14 elementare Einzelteile.
2.
Ein Programmstück, das keine Schleife aufweist, stellt allenfalls ein sehr simples Beispiel für einen Algorithmus dar, ist aber jedenfalls atypisch.
3.
Der Sinn von Pseudokode besteht darin, ein intuitives Verständnis (mit dem ,,gesunden Menschenverstand``) für die Arbeitsweise des Algorithmus zu ermöglichen. Bei zufälliger und dementsprechend sinnloser Herstellung der Algorithmen wie in diesem Experiment ist das gar nicht möglich.
4.
Welchen Sinn hat überhaupt das Programmverstehen, wenn das Programm selbst keinen Sinn hat?
5.
Die gestellten Fragen scheinen alle nur ein mechanistisches Verständnis für die Arbeitsweise des Algorithmus zu verlangen. Die eigentliche Herausforderung beim Programmverstehen besteht aber im Erkennen tieferer Zusammenhänge, die den Zweck einer Anweisung betreffen anstatt nur den rohen Effekt. Entsprechende Fragen fehlten im Experiment -- was kein Wunder ist, denn die benutzten Algorithmen lassen solche Fragen überhaupt nicht zu.
6.
Die Fragenkataloge waren viel zu umfangreich, z.B. 60 Fragen für ein Programm mit nur 14 Einzelteilen. Am Ende der Bearbeitung kannten die Versuchspersonen das Programm vermutlich auswendig. Ein Indiz dafür ist die Tatsache, daß zur Beantwortung jeder Frage im Mittel weniger als einmal auf das Programm geschaut wurde! Dies ist vollkommen unrealistisch.
Bitte sowas nicht nachmachen.

../Calvin/find_disturbing.gif


next up previous contents
Next: 3.7 Weitergehende Information Up: 3. Softwaretechnik-Forschung Previous: 3.5 Beispiel: N-Versions-Programmierung
Lutz Prechelt
1999-04-13