Spaghetticode

unprofessioneller Softwarequelltext
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 25. Juni 2009 um 10:33 Uhr durch IGEL (Diskussion | Beiträge) (Weitgehende Übersetzung von en:Spaghetti code, ursprüngliche Autoren siehe dort.). Sie kann sich erheblich von der aktuellen Version unterscheiden.
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)

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

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

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

Verglichen mit klar strukturiertem Quellcode weißt 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

Unten steht ein einfaches Beispiel von Spaghetticode, welcher in BASIC geschrieben wurde. Das 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 komplexer.

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 die selbe Funktionalität aus:

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