Suche

Wie sich das Fette-Finger-Syndrom auf verschiedene Programmiersprachen auswirkt

Judith Lungstraß

Sind die Finger zu dick, hat man sich schnell mal vertippt. So wird aus einem Punkt ein Komma, public verwandelt sich in poublivc, eine Klasse wird nunmehr mit flass gekennzeichnet. Was als Fette-Finger-Syndrom bekannt geworden ist, kann aber natürlich auch andere Gründe haben. Besonders in Sprachen wie C oder C++ können automatische Refactorings schief gehen, komplexe Befehle rufen manchmal ungewollte Konsequenzen hervor und auch das Suchen-und-Ersetzen funktioniert nicht immer reibungslos.

Ganz egal, aus welchem Grund wir uns vertippt haben, eines steht fest: Fehler im Code können verheerende Auswirkungen haben. Doch sind sie eigentlich bei jeder Programmiersprache gleich schlimm oder gibt es Unterschiede von Sprache zu Sprache? Wie wirkt sich das Konstrukt einer Programmiersprache auf die Wahrscheinlichkeit und die Konsequenzen von Tippfehlern aus?

Mit dieser Forschungsfrage sind Diomidis Spinellis, Vassilios Karakoidas und Panagiotis Louridas von der University of Economics and Business in Athen an ihr Projekt heran gegangen, das letztendlich die Veröffentlichung Comparative Language Fuzz Testing: Programming Languages vs. Fat Fingers hervor gebracht hat. Sie haben willkürlich Tippfehler in ähnliche Programme verschiedener Sprachen eingebaut und untersucht, wie der Compiler und das Laufzeitsystem auf diese reagieren bzw. ob sie trotzdem korrekten Output ausgeben. Die wissenschaftliche Untersuchung erfolgte in drei Schritten:

  1. Zuerst haben die Forscher zehn populäre Programmiersprachen ausgewählt: Ruby, Python, Perl, PHP, JavaScript, Java, Haskell, C#, C++ und C. Mit Hilfe des Rosetta Code Wiki haben sie in allen zehn Sprachen Quellcode-Fragmente erstellt, die denselben Task ausführen.
  2. Anschließend machten sie sich an die Konstruktion eines Quellcode-Verzerrers, dessen einzige Aufgabe darin besteht, willkürlich Störungen in den Code einzubauen. Identifier wurden ausgetauscht, einzelne Zeichen verändert, Elemente durch ähnliche oder beliebige ersetzt.
  3. Zuletzt untersuchte das Forscher-Trio, wie sich der nun fehlerhafte Code beim Kompilieren und zur Laufzeit verhält, ob die Fehler identifiziert wurden und ob der fehlerhafte Quellcode auch fehlerhafte Ergebnisse produziert.

Wie zu erwarten, machten sich die Fehler im Code deutlich bemerkbar. Nur 32 Prozent aller gestörten Programme wurden überhaupt kompiliert oder durchliefen den Syntax-Check ohne Probleme. 67 Prozent davon (also 23 Prozent insgesamt) wurden erfolgreich abgeschlossen. 70 Prozent aller ausführbaren Programme (also 16 Prozent der Gesamt-Programme) erzeugten allerdings fehlerhaften Output.

Doch betrachten wir das Ganze einmal sprachenspezifisch: Bei welchen Programmiersprachen ging die Kompilierung besonders häufig schief, welche erzeugten das größte Ausmaß an inkorrektem Output?

Hier die Rangfolge der Sprachen, bei denen der Kompiliervorgang am erfolgreichsten war:

  1. Ruby
  2. JavaScript
  3. PHP
  4. Perl
  5. Python
  6. C
  7. C++
  8. Haskell
  9. C#
  10. Java

Die Rangliste der Sprachen, die nach dem Kompilieren dann aber die meisten falschen Outputs lieferten, sieht schon anders aus:

  1. PHP
  2. Perl
  3. JavaScript
  4. Ruby
  5. Python
  6. Haskell
  7. Java
  8. C
  9. C#
  10. C++

Auffällig ist, dass Sprachen mit statischer Typisierung wie Java, Haskell oder C++ beim Kompilieren häufiger Fehler warfen als die mit dynamischer bzw. schwacher Typisierung wie Ruby, Python, Perl, PHP und JavaScript. Klingt logisch, immerhin wird der Variablentyp im Falle der statischen Typisierung bereits während der Kompilierung festgelegt, und wo mehr geschieht, kann eben auch mehr schief gehen.

So kam es bei schwacher Typisierung häufiger vor, dass der Code ausgeführt werden konnte als bei der starken Typisierung. Erwartungsgemäß resultierte der fehlerhaft ausgeführte Code dann aber häufiger in inkorrektem Output. Dieses Ergebnis gibt Aufschluss über die Qualitäten und Schwachstellen der dynamisch typisierten Sprachen: Sie verfügen zwar über zahlreiche Usability-Vorteile, jedoch müssen diese in Hinblick auf die hohe Risikoanfälligkeit der besagten Programmiersprachen abgewogen werden.

Wer sich nun abschließend erhoffte, in irgendeiner Sprache Absolution für seine fetten Finger oder sein unsauberes Arbeiten erteilt zu bekommen, muss leider enttäuscht werden, denn Tippfehler sind in keiner der untersuchten Sprachen unproblematisch. Früher oder später finden die gemachten Fehler immer zu einem zurück – fragt sich nur wann.

Geschrieben von
Judith Lungstraß
Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.