Spaghetticode

Spaghetticode
Ein Teller Spaghetti sieht verworren und unübersichtlich aus. Von diesem Aussehen leitet sich der Name Spaghetticode ab.

Spaghetticode ist ein abwertender Begriff für Software-Quellcode, der komplexe und verworrene Kontrollstrukturen aufweist. Insbesondere die häufige Verwendung von GOTO-Anweisungen ist ein Indiz für Spaghetticode, allerdings keine zwingende Voraussetzung dafür. Jedes verworrene und auch für erfahrene Programmierer schlecht nachvollziehbare Stück Quellcode kann als Spaghetticode bezeichnet werden.

Spaghetticode kann unterschiedliche Ursachen haben. Oft neigen unerfahrene Programmierer dazu, Spaghetticode zu schreiben. Auch die häufige Erweiterung des Quellcodes, ohne dass ein Refactoring durchgeführt wird, kann zu Spaghetticode führen.

Verglichen mit klar strukturiertem Quellcode weist Spaghetticode eine deutlich schlechtere Wartbarkeit, also auch erhöhte Wartungskosten, auf. Zudem kann Spaghetticode bei ähnlichen Anforderungen an ein weiteres Programm in der Regel wesentlich schlechter wiederverwendet werden.

Beispiel

Das nachfolgende simple Basic-Programm gibt die Zahlen 1 bis 10 zusammen mit dem jeweiligen Quadrat auf dem Bildschirm aus. Die verworrenen GOTO-Anweisungen machen es schwierig, den Ablauf des Programms nachzuvollziehen. In der Praxis ist Spaghetticode meist erheblich komplexer, allein aufgrund der Größe der Programme und der Häufigkeit von GOTO-Anweisungen.

10 i = 0
20 i = i + 1
30 PRINT i; " squared = "; i * i
40 IF i >= 10 THEN GOTO 60
50 GOTO 20
60 PRINT "Program Completed."
70 END

Das folgende Programm ist deutlich strukturierter und führt dieselbe Funktion aus:

10 FOR i = 1 TO 10
20 PRINT i; " squared = "; i * i
30 NEXT i
40 PRINT "Program Completed."
50 END

Es gibt aber noch weitere Anzeichen von Spaghetticode. Der GOTO-Sprung im ersten Programm ist noch im Rahmen, kann aber zu folgendem verleiten:

10 CLS
20 i = 0
30 i = i + 1
40 PRINT i; " squared = "; i * i
50 IF i >= 10 THEN GOTO 70
60 GOTO 30
70 PRINT "Program Completed."
80 INPUT "Do it Again (j)"; sel$
90 IF sel$ = "j" THEN GOTO 10
100 END

Diese Nutzung von GOTO führt meist dazu, dass man zwischen Programmblöcken hin und her springt, und damit ein richtiges Spaghetticode-Chaos anrichtet. Das gilt nicht nur für die GOTO-Anweisungen. Gerne wird auch mit IF-Blöcken, die in sich mehrere Blöcke mit IF, FOR oder anderen Unterprozeduren enthalten, ein „Klammerchaos“ verursacht, wie das folgende Programm anhand von IF, FOR und GOTO verdeutlicht:

10 FOR ia = 1 TO 10
20 IF ia = 5 THEN
30 FOR ib = 1 TO 10
40 PRINT "LOOP:";ia;" SUB LOOP:";ib
50 IF ib = 8 THEN GOTO 80
60 NEXT ib
70 END IF
80 PRINT "SUB LOOP:";ia;" END"
90 NEXT ia
100 END

Dieses Beispiel ist auch noch überschaubar, sollte man aber größere Sprünge in mehreren Ebenen machen, endet man bei einem Quellcode, der irgendwann auch vom Schreiber selbst nicht mehr durchschaubar ist.

Die größte Gefahr, selbst als Programmierer Spaghetticode zu produzieren, entsteht, wenn man eine Programmiersprache verwendet, die man noch nicht überblickt, oder der Befehle zur einfachen Schleifensteuerung fehlen, z.B. Assembler. In diesen Sprachen ist es unerlässlich, mit Sprungbefehlen zu arbeiten, daher kann man schnell den Überblick verlieren. Bestes Beispiel für reinste Sprünge ist ein endlicher Automat.

Generell wird empfohlen klare Kommentare im Quelltext zugunsten einer besseren Gliederung zu verwenden.

Weblinks


Wikimedia Foundation.

Игры ⚽ Нужно сделать НИР?

Schlagen Sie auch in anderen Wörterbüchern nach:

  • Spaghetticode — Spaghetticode,   saloppe Bezeichnung für den Quellcode eines Programms, der durch übermäßigen Gebrauch von Sprunganweisungen (Sprung) sehr verworren und schwer zu lesen ist (»so übersichtlich wie ein Teller Spaghetti«) …   Universal-Lexikon

  • GOTO — Eine Sprunganweisung oder ein Sprungbefehl dient in Programmiersprachen von Computerprogrammen dazu, die Ausführung an anderer Stelle fortzuführen, also Programmteile zu überspringen. Bei einem Rücksprung wird das Programm an einer Stelle… …   Deutsch Wikipedia

  • Rücksprung — Eine Sprunganweisung oder ein Sprungbefehl dient in Programmiersprachen von Computerprogrammen dazu, die Ausführung an anderer Stelle fortzuführen, also Programmteile zu überspringen. Bei einem Rücksprung wird das Programm an einer Stelle… …   Deutsch Wikipedia

  • Sprunganweisung — Eine Sprunganweisung oder ein Sprungbefehl dient in Programmiersprachen von Computerprogrammen dazu, die Ausführung an anderer Stelle fortzuführen, also Programmteile zu überspringen. Bei einem Rücksprung wird das Programm an einer Stelle… …   Deutsch Wikipedia

  • Sprungbefehl — Eine Sprunganweisung oder ein Sprungbefehl dient in Programmiersprachen von Computerprogrammen dazu, die Ausführung an anderer Stelle fortzuführen, also Programmteile zu überspringen. Bei einem Rücksprung wird das Programm an einer Stelle… …   Deutsch Wikipedia

  • Sprungbefehle — Eine Sprunganweisung oder ein Sprungbefehl dient in Programmiersprachen von Computerprogrammen dazu, die Ausführung an anderer Stelle fortzuführen, also Programmteile zu überspringen. Bei einem Rücksprung wird das Programm an einer Stelle… …   Deutsch Wikipedia

  • Anti-Pattern — (deutsch: Antimuster) bezeichnet in der Softwareentwicklung einen häufig anzutreffenden schlechten Lösungsansatz für ein bestimmtes Problem. Es bildet damit das Gegenstück zu den Mustern (Entwurfsmuster, Analysemuster, Architekturmuster...),… …   Deutsch Wikipedia

  • BASIC — Ausschnitt aus einem BASIC Listing BASIC ist eine der am weitesten verbreiteten imperativen Programmiersprachen. Sie wurde 1964 von John George Kemeny und Thomas Eugene Kurtz am Dartmouth College entwickelt und verfügte in ihrer damaligen Form… …   Deutsch Wikipedia

  • CrackMe — Ein CrackMe ist ein Computerprogramm, das ausschließlich dazu gedacht ist, dass dessen Zugriffssperre geknackt wird. Das CrackMe fragt – meist direkt beim Start – ein Passwort oder eine Seriennummer ab. Ziel ist es nun, diesen Schutzmechanismus… …   Deutsch Wikipedia

  • GW-BASIC — Entwickler Microsoft Corporation Aktuelle Version 3.23 (1988) Betriebssystem MS DOS Kategorie BASIC Interpreter und Entwicklungsumgebung …   Deutsch Wikipedia

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”