www.wikidata.de-de.nina.az
Spaghetticode ist ein abwertender Begriff fur Software Quellcode der verworrene Kontrollstrukturen aufweist Ein Indiz dafur kann etwa die Verwendung von Sprunganweisungen wie GOTO sein wobei man zum gleichen Ziel auch ohne Sprunge gelangen wurde Jedes verworrene und auch fur erfahrene Programmierer schlecht nachvollziehbare Stuck Quellcode kann als Spaghetticode bezeichnet werden Eine so geschriebene Software muss nicht schlecht funktionieren auch bedeutet Spaghetticode nicht zwingend eine mangelhafte Kommentierung der einzelnen Programmierschritte Ein Teller Spaghetti sieht verworren und unubersichtlich aus Von diesem Aussehen leitet sich der Name Spaghetticode ab Spaghetticode kann unterschiedliche Ursachen haben Oft neigen unerfahrene Programmierer dazu einfach drauf los zu programmieren wodurch zwangslaufig Spaghetticode entsteht Auch die wiederholte spatere Erweiterung des Quellcodes ohne dass ein Refactoring durchgefuhrt wird kann zu Durcheinander und damit zu Spaghetticode fuhren Verglichen mit klar strukturiertem Quellcode weist Spaghetticode eine deutlich schlechtere Wartbarkeit also auch erhohte Test und Wartungskosten auf Zudem kann Spaghetticode bei ahnlichen Anforderungen in der Regel wesentlich schlechter oder nur mit hohem Aufwand wiederverwendet werden Inhaltsverzeichnis 1 Programmierbeispiel 2 Programmierparadigmen 3 Siehe auch 4 Weblinks 5 HistorischProgrammierbeispiel BearbeitenDas 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 GOTO Anweisungen machen den Spaghetticode aus Sie sind im Allgemeinen nicht notig und sie erschweren die Lesbarkeit fur Interessierte die den Code nachvollziehen wollen In der Praxis ist Spaghetticode oft erheblich komplexer 10 i 0 20 i i 1 30 PRINT i squared i i 40 IF i gt 10 THEN GOTO 60 50 GOTO 20 60 PRINT Program Fully Completed 70 END Im Klartext sagt das Programm Fang bei 0 an danach erhohe immer um eine 1 Bringe das Ergebnis auf den Bildschirm zusammen mit seinem Quadrat Wenn die Zahl grosser oder gleich 10 ist spring nach unten Ansonsten spring an den Anfang Fertig Das folgende Programm leistet dasselbe kommt aber ohne die beiden Sprunge aus Es ist zudem kurzer 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 nachste 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 fur 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 gt 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 fuhrt meist dazu dass man zwischen Programmblocken hin und her springt und damit ein richtiges Spaghetticode Chaos anrichtet Das gilt nicht nur fur die GOTO Anweisungen Gerne wird auch mit IF Blocken die in sich mehrere Blocke 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 uberschaubar sollte man aber grossere Sprunge in mehreren Ebenen machen endet man bei einem Quellcode der irgendwann auch vom Schreiber selbst nicht mehr durchschaubar ist Die grosste Gefahr als Programmierer selbst Spaghetticode zu produzieren entsteht wenn man eine Programmiersprache verwendet die man noch nicht uberblickt oder der Befehle zur einfachen Schleifensteuerung fehlen z B in vielen Assemblersprachen Dann ist es unerlasslich mit Sprungbefehlen zu arbeiten wobei man schnell den Uberblick verlieren kann Bestes Beispiel fur reinste Sprunge ist ein endlicher Automat Generell wird empfohlen den Code in kleine uberschaubare 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 anschliessend den Quellcode zu erstellen Programmierparadigmen BearbeitenUnterschiedliche Programmierparadigmen bieten unterschiedliche Mittel um Spaghetticode zu vermeiden Die Objektorientierte Programmierung bietet beispielsweise verschiedene Moglichkeiten um Code innerhalb von Klassen und uber 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 BearbeitenMcCabe Metrik eine Metrik die Spaghetticode aufzeigen kann Big Ball of Mud Architektur Anti Pattern ahnlich Spaghetticode Technische SchuldWeblinks BearbeitenSoftware Development AntiPatterns Spaghetti Code englisch Spaghetticode im Portland Pattern Repository Spaghetti Code Detangling Life and Work with Programmer Wisdom English Edition Historisch BearbeitenUS Army Programmierer Eheman bei der Neuverdrahtung eines Programms einer IBM 407 im Jahre 1955 Computerlehrgang aus derselben Zeit an der Columbia University Abgerufen von https de wikipedia org w index php title Spaghetticode amp oldid 176864477