Spaghetticode![]() Spaghetticode ist ein abwertender Begriff für Software-Quellcode, der verworrene Kontrollstrukturen aufweist. Ein Indiz dafür kann etwa die Verwendung von Sprunganweisungen (wie Spaghetticode kann unterschiedliche Ursachen haben. Oft neigen unerfahrene Programmierer dazu, „einfach drauf los zu programmieren“, wodurch zwangsläufig Spaghetticode entsteht. Auch die wiederholte spätere Erweiterung des Quellcodes, ohne dass ein Refactoring durchgeführt wird, kann zu Durcheinander und damit zu Spaghetticode führen. ProgrammierbeispielDas nachfolgende, in der Programmsprache BASIC erstellte Programm gibt die Zahlen 1 bis 10 zusammen mit dem jeweiligen Quadrat der Zahl auf dem Bildschirm aus. Die beiden aufeinander folgenden 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 Fully Completed."
70 END
Im Klartext sagt das Programm: Fang' bei 0 an, danach erhöhe immer um eine 1. Bringe das Ergebnis auf den Bildschirm, zusammen mit seinem Quadrat. Wenn die Zahl größer oder gleich 10 ist, spring nach unten. Ansonsten spring an den Anfang. Fertig. Das folgende Programm leistet dasselbe, kommt aber ohne die beiden Sprünge aus. Es ist zudem kürzer und damit eleganter. Paraphrasiert funktioniert es so: Fange bei 1 an und gehe bis 10, bringe die jeweilige Zahl auf den Bildschirm, zusammen mit ihrem Quadrat. Hol' die nächste Zahl aus dem Pool. Fertig. 10 FOR i = 1 TO 10
20 PRINT i; " squared = "; i * i
30 NEXT i
40 PRINT "Program Fully Completed."
50 END
Es gibt aber noch weitere Anzeichen für Spaghetticode. Der 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 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, als Programmierer selbst Spaghetticode zu produzieren entsteht, wenn man eine Programmiersprache verwendet, die man noch nicht überblickt, oder der Befehle zur einfachen Schleifensteuerung fehlen, z. B. in vielen Assemblersprachen. Dann ist es unerlässlich, mit Sprungbefehlen zu arbeiten, wobei man schnell den Überblick verlieren kann. Bestes Beispiel für reinste Sprünge ist ein endlicher Automat. Generell wird empfohlen, den Code in kleine, überschaubare Einheiten (Methoden, Funktionen) zu teilen und gleiche Teile wiederzuverwenden. Es kann deshalb von Vorteil sein, auf Papier die Ideen zu der Programmierung zu skizzieren und anschließend den Quellcode zu erstellen. ProgrammierparadigmenUnterschiedliche Programmierparadigmen bieten unterschiedliche Mittel, um Spaghetticode zu vermeiden. Die Objektorientierte Programmierung bietet beispielsweise verschiedene Möglichkeiten, um Code innerhalb von Klassen und über Klassengrenzen hinweg zu verteilen und wiederzuverwenden. Jedoch kann nur mittels konsequenter Einhaltung der Paradigmen der objektorientierten Programmierung Spaghetticode vermieden werden. Insbesondere die Einhaltung der Prinzipien objektorientierten Designs, korrekte Benutzung von Entwurfsmustern und Domain-driven Design verhindern Spaghetticode. Siehe auch
Weblinks
Historisch
|
Portal di Ensiklopedia Dunia