<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Spaghetticode</id>
	<title>Spaghetticode - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Spaghetticode"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Spaghetticode&amp;action=history"/>
	<updated>2026-05-27T07:25:53Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Wikipedia (Deutsch) – Lokale Kopie</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki-de.moshellshocker.dns64.de/index.php?title=Spaghetticode&amp;diff=1692829&amp;oldid=prev</id>
		<title>imported&gt;Trustable: Kleinigkeiten verbessert</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Spaghetticode&amp;diff=1692829&amp;oldid=prev"/>
		<updated>2025-07-30T23:18:50Z</updated>

		<summary type="html">&lt;p&gt;Kleinigkeiten verbessert&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[[Datei:Spaghetti.jpg|mini|Ein Teller [[Spaghetti]] sieht verworren und unübersichtlich aus. Von diesem Aussehen leitet sich der Name &amp;#039;&amp;#039;Spaghetticode&amp;#039;&amp;#039; ab.]]&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Spaghetticode&amp;#039;&amp;#039;&amp;#039; ist ein abwertender Begriff für [[Software]]-[[Quellcode]], der verworrene [[Kontrollstruktur]]en aufweist. Ein Indiz dafür kann etwa die Verwendung von [[Sprunganweisung]]en (wie &amp;lt;code&amp;gt;GOTO&amp;lt;/code&amp;gt;) sein, wobei man zum gleichen Ziel auch ohne Sprunganweisung gelangen würde. Jedes verworrene und auch für erfahrene Programmierer schlecht nachvollziehbare Stück 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, allerdings führt Spaghetticode auf Grund der schlechten Nachvollziehbarkeit zu erhöhtem [[Softwarewartung#Wartungsaufwand|Wartungsaufwand]]. Zudem kann Spaghetticode bei ähnlichen Anforderungen in der Regel wesentlich schlechter oder nur mit hohem Aufwand wiederverwendet werden.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Programmierbeispiel ==&lt;br /&gt;
Das nachfolgende, in der Programmsprache [[BASIC]] erstellte Programm gibt die Zahlen 1 bis 10 zusammen mit dem jeweiligen [[Quadrat (Mathematik)|Quadrat der Zahl]] auf dem Bildschirm aus. Die beiden aufeinander folgenden &amp;lt;code&amp;gt;GOTO&amp;lt;/code&amp;gt;-Anweisungen machen den Spaghetticode aus: Sie sind im Allgemeinen nicht nötig, und sie erschweren die Lesbarkeit für Interessierte, die den Code nachvollziehen wollen. In der Praxis ist Spaghetticode oft erheblich komplexer.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;qbasic&amp;quot;&amp;gt;&lt;br /&gt;
10 i = 0&lt;br /&gt;
20 i = i + 1&lt;br /&gt;
30 PRINT i; &amp;quot; squared = &amp;quot;; i * i&lt;br /&gt;
40 IF i &amp;gt;= 10 THEN GOTO 60&lt;br /&gt;
50 GOTO 20&lt;br /&gt;
60 PRINT &amp;quot;Program Fully Completed.&amp;quot;&lt;br /&gt;
70 END&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im Klartext sagt das Programm: Fang&amp;#039; 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, &amp;#039;&amp;#039;spring&amp;#039;&amp;#039; nach unten. Ansonsten &amp;#039;&amp;#039;spring&amp;#039;&amp;#039; an den Anfang. Fertig.&lt;br /&gt;
&lt;br /&gt;
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&amp;#039; die nächste Zahl aus dem Pool. Fertig.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;qbasic&amp;quot;&amp;gt;&lt;br /&gt;
10 FOR i = 1 TO 10&lt;br /&gt;
20 PRINT i; &amp;quot; squared = &amp;quot;; i * i&lt;br /&gt;
30 NEXT i&lt;br /&gt;
40 PRINT &amp;quot;Program Fully Completed.&amp;quot;&lt;br /&gt;
50 END&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es gibt aber noch weitere Anzeichen für Spaghetticode. Der &amp;lt;code&amp;gt;GOTO&amp;lt;/code&amp;gt;-Sprung im ersten Programm ist noch im Rahmen, kann aber zu Folgendem verleiten:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;qbasic&amp;quot;&amp;gt;&lt;br /&gt;
10 CLS&lt;br /&gt;
20 i = 0&lt;br /&gt;
30 i = i + 1&lt;br /&gt;
40 PRINT i; &amp;quot; squared = &amp;quot;; i * i&lt;br /&gt;
50 IF i &amp;gt;= 10 THEN GOTO 70&lt;br /&gt;
60 GOTO 30&lt;br /&gt;
70 PRINT &amp;quot;Program Completed.&amp;quot;&lt;br /&gt;
80 INPUT &amp;quot;Do it Again (j)&amp;quot;; sel$&lt;br /&gt;
90 IF sel$ = &amp;quot;j&amp;quot; THEN GOTO 10&lt;br /&gt;
100 END&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Nutzung von &amp;lt;code&amp;gt;GOTO&amp;lt;/code&amp;gt; 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 &amp;lt;code&amp;gt;GOTO&amp;lt;/code&amp;gt;-Anweisungen. Gerne wird auch mit &amp;lt;code&amp;gt;IF&amp;lt;/code&amp;gt;-Blöcken, die in sich mehrere Blöcke mit &amp;lt;code&amp;gt;IF&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;FOR&amp;lt;/code&amp;gt; oder anderen Unterprozeduren enthalten, ein „Klammerchaos“ verursacht, wie das folgende Programm anhand von &amp;lt;code&amp;gt;IF&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;FOR&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;GOTO&amp;lt;/code&amp;gt; verdeutlicht:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;qbasic&amp;quot;&amp;gt;&lt;br /&gt;
10 FOR ia = 1 TO 10&lt;br /&gt;
20 IF ia = 5 THEN&lt;br /&gt;
30 FOR ib = 1 TO 10&lt;br /&gt;
40 PRINT &amp;quot;LOOP:&amp;quot;;ia;&amp;quot; SUB LOOP:&amp;quot;;ib&lt;br /&gt;
50 IF ib = 8 THEN GOTO 80&lt;br /&gt;
60 NEXT ib&lt;br /&gt;
70 END IF&lt;br /&gt;
80 PRINT &amp;quot;SUB LOOP:&amp;quot;;ia;&amp;quot; END&amp;quot;&lt;br /&gt;
90 NEXT ia&lt;br /&gt;
100 END&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&amp;amp;nbsp;B. in vielen [[Assemblersprache]]n. Dann ist es unerlässlich, mit Sprungbefehlen zu arbeiten, wobei man schnell den Überblick verlieren kann.&lt;br /&gt;
Bestes Beispiel für reinste Sprünge ist ein [[endlicher Automat]].&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Programmierparadigmen ==&lt;br /&gt;
Unterschiedliche [[Programmierparadigma|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 [[Entwurfsmuster]]n und [[Domain-driven Design]] verhindern Spaghetticode.&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* [[McCabe-Metrik]] – eine Metrik, die Spaghetticode aufzeigen kann&lt;br /&gt;
* [[Big Ball of Mud]] – Architektur Anti-Pattern ähnlich Spaghetticode&lt;br /&gt;
* [[Technische Schulden]]&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* [http://sourcemaking.com/antipatterns/spaghetti-code Software Development AntiPatterns: Spaghetti Code] (englisch)&lt;br /&gt;
* [http://c2.com/cgi/wiki?SpaghettiCode Spaghetticode] im [[Portland Pattern Repository]]&lt;br /&gt;
* [http://spaghetticodebook.com Spaghetti Code: Detangling Life and Work with Programmer Wisdom (English Edition)]&lt;br /&gt;
&lt;br /&gt;
Historisch:&lt;br /&gt;
* [http://www.columbia.edu/cu/computinghistory/407.html#patchboard US-Army-Programmierer] Eheman bei der Neuverdrahtung eines Programms einer IBM 407 im Jahr 1955.&lt;br /&gt;
* [http://www.columbia.edu/cu/computinghistory/course.html Computerlehrgang] aus derselben Zeit an der Columbia-University.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Anti-Pattern]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Trustable</name></author>
	</entry>
</feed>