1. Startseite
  2. Wissen kompakt
  3. Spaghetti-Code

Spaghetti-Code

Wissen kompakt: Spaghetti-Code bezeichnet schlecht strukturierten, übermäßig komplexen und schwer zu verstehenden Programmcode, der verworren wirkt.

Spaghetti-Code – schlecht strukturiert und nur bedingt zu genießen

Code so zu gestalten, dass er leicht lesbar, änderbar, erweiterbar und wartbar ist, ist ein zentrales Ziel der Clean-Code-Softwareentwicklung. Spaghetti-Code ist genau das Gegenteil davon.

Spaghetti-Code¹ ist ein abschätziger Begriff für Programmiercode oder Teile eines Programmiercodes, der
  • schlecht strukturiert,
  • übermäßig komplex und
  • schwer zu verstehen, zu pflegen und zu ändern ist.

Namensgebend sind Spaghetti, die auf einem Teller liegend verworren und verwirrend wirken. Oft ist Spaghetti-Code das Ergebnis von

  • Eile oder isoliert arbeitenden Programmierern,
  • fehlenden objektorientierten Entwurfstechnologien,
  • mangelnder Planung und Voraussicht,
  • unzureichenden Kenntnissen und Erfahrungen der Programmierer,
  • fehlenden Mentorings sowie
  • ineffektiver Code-Reviews.

Spaghetti-Code-Beispiel

Hier ist ein Beispiel für einen Spaghetti-Code in Java, der die Fakultät einer gegebenen Zahl berechnet:

public class SpaghettiCode {
    public static void main(String[] args) {
        int num = 5, i = 1, result = 1;
        while (i <= num) {
            result = result * i;
            i++;
        }
        System.out.println("Factorial of " + num + " is: " + result);
    }
}

Und hier ist derselbe Code umstrukturiert, um Spaghetti-Code zu vermeiden:

public class CleanCode {
    public static int factorial(int num) {
        int result = 1;
        for (int i = 1; i <= num; i++) {
            result *= i;
        }
        return result;
    }
    public static void main(String[] args) {
        int num = 5;
        int result = factorial(num);
        System.out.println("Factorial of " + num + " is: " + result);
    }
}
Zu erkennen ist die Berechnung der Fakultät in einer eigenen Funktion “factorial”, was die Lesbarkeit und das Verständnis des Codes erleichtert. Die Verwendung einer “for-Schleife” macht auch die Logik der Berechnung klarer. Außerdem verwendet der Code aussagekräftige Variablennamen, was es einfacher macht, die Logik zu verfolgen und mögliche Probleme zu erkennen.

Kritik am Begriff Spaghetti-Code

Spaghetti-Code als Begriff² wird von Programmieren immer wieder kritisiert, da er impliziert, dass der Code verworren und unordentlich wie ein Teller Spaghetti ist, dies aber nicht die eigentliche Ursache des Problems adressiert. Das Problem ist nicht unbedingt das Aussehen des Codes, sondern fehlende Modularität, schlechtes Design oder ggf. unzureichende Tests, die sowohl Wartung als auch Anpassungen erschweren.

Darüber hinaus wird der Begriff als übermäßig hart und unprofessionell empfunden, da er impliziert, dass der Programmierer, der den Code geschrieben hat, inkompetent ist, während er in Wirklichkeit vielleicht unter Zeitdruck stand, mit veralteten Technologien arbeiten musste oder ihm einfach nur die Erfahrung fehlte.

Zudem empfinden manche Softwareentwickler den Begriff als irreführend, weil es schwierig sein kann, zu bestimmen, was Spaghetti-Code ist. Programmierer können unterschiedliche Meinungen darüber haben, was guten Code ausmacht. Was für den einen ein sauberer, gut organisierter Code ist, kann für den anderen ein Durcheinander sein.

Aus diesen Gründen ziehen es viele Entwickler vor, neutralere Begriffe wie “unstrukturierter Code” oder “schlecht gestalteter Code” zu verwenden, wenn sie sich auf Code beziehen, der schwer zu warten und zu ändern ist.

Nachteile von Spaghetti-Code

Spaghetti-Code hat u. a. folgende Nachteile:

  • Er ist oft übermäßig komplex, was es schwierig macht, die Logik eines Programms zu verstehen. Diese Komplexität macht es schwierig, den Code zu pflegen und zu ändern. Zudem macht es auch häufig den Prozess des Debuggens zeitaufwändiger, da es schwierig ist, die Quelle eines Problems ausfindig zu machen.
  • Redundanter oder unnötige Code kann zu erhöhtem Speicherverbrauch bei gleichzeitig geringerer Leistung beitragen.
  • Er lässt sich oft nur schwer skalieren und erweitern, insbesondere wenn er nicht modular strukturiert ist und das Hinzufügen neuer Funktionen den Code immer komplexer macht. Die Wiederverwendung des Codes sollte daher besser nicht in Betracht gezogen werden.
  • Er ist anfällig für Fehler und wenig zuverlässig. Je länger bspw. eine Methode ist, desto fehleranfälliger ist sie. Zudem ist es schwierig sicherzustellen, dass der Code korrekt funktioniert.

Kurzum: Unternehmen tun gut daran, solchen Code zu vermeiden. Stattdessen sollten sie die Entwicklung von Clean Code anstreben.

Ansätze zur Vermeidung von Spaghetti-Code

Nachfolgende finden Sie einige Ansätze, die helfen können, Spaghetticode zu vermeiden:

  • Die Aufteilung des Codes in kleinere, modulare Teile kann helfen, Spaghetti-Code zu vermeiden und ihn leichter zu verstehen, zu testen und zu ändern.
  • Regelmäßige Code-Reviews können dabei helfen, Bereiche des Codes zu identifizieren, die übermäßig komplex oder schwer zu pflegen sind, und bieten Möglichkeiten zur Umstrukturierung oder Verbesserung des Codes.
  • Das Hinzufügen von beschreibenden Kommentaren zum Code kann helfen, die Logik zu erklären und ihn leichter zu verstehen.
  • Gründliche Tests können dazu beitragen, Fehler frühzeitig zu erkennen und zu beheben, um zu verhindern, dass Spaghetti-Code noch komplexer und schwieriger zu pflegen wird.
  • Durch die Festlegung von Codierungsstandards und -konventionen kann sichergestellt werden, dass der Code auf konsistente Weise geschrieben wird, wodurch er leichter zu verstehen und zu pflegen ist.
  • Die Verwendung von Entwurfsmustern kann helfen, den Code zu strukturieren und einfacher zu pflegen.
  • Regelmäßiges Refactoring von Code zur Verbesserung seiner Struktur, Lesbarkeit und Wartbarkeit kann verhindern, dass Spaghetti-Code mit der Zeit immer komplexer wird.
  • Die McCabe-Metrik kann bei der Identifizierung komplexer und potenziell fehleranfälliger Codebereiche hilfreich sein, die Gefahr laufen, zu Spaghetti-Code zu werden.³
  • Die regelmäßige Bewertung der Codequalität und die kontinuierliche Verbesserung der Entwicklungsprozesse können dazu beitragen, dass Spaghetti-Code gar nicht erst geschrieben wird.

Durch die Befolgung dieser Good Practices können Entwickler sauberen, wartbaren Code schreiben, der leicht zu verstehen, zu ändern und zu erweitern ist, wodurch das Risiko von Spaghetti-Code verringert wird.

Spaghetti-Code - schlecht strukturierter und nur bedingt zu genießender Code

Impuls zum Diskutieren:

Wann lohnt es sich, Spaghetti-Code zu beseitigen, und wann ist es sinnvoller, entsprechende Teile einer Programmierung gänzlich neu zu implementieren?

Was macht t2informatik?

Was macht t2informatik? Kleiner Tipp: Es hat etwas mit Softwareentwicklung zu tun!
Hinweise:

Die Inhalte auf dieser Seite dürfen Sie gerne teilen oder verlinken.

[1] In manchen Publikationen wird auch von Spaghetti-Code als Anti-Pattern geschrieben.
[2] Der Ursprung des Begriffs ist unklar, und es ist nicht bekannt, wer ihn zuerst geprägt hat. Der Begriff wird in der Softwareentwicklungsbranche seit mehreren Jahrzehnten verwendet und wurde wahrscheinlich von einem Programmierer oder einer Gruppe von Programmierern kreiert, die frustriert waren, weil sie versuchten, übermäßig komplexen und schwer verständlichen Code zu pflegen und zu ändern.
[3] Die McCabe-Metrik, auch bekannt als McCabe-Komplexitätsmetrik, ist ein Maß für die sogenannte zyklomatische Komplexität eines Programms. Da es möglich ist, gut strukturierten, wartbaren Code mit einer hohen McCabe-Metrik, und Spaghetti-Code mit einer niedrigen McCabe-Metrik zu haben, ist es ratsam, die McCabe-Metrik als ein Teil einer umfassenderen Codequalitätsbewertung zusammen mit anderen Metriken wie Code-Lesbarkeit, Testabdeckung und Wartbarkeit sowie manuellen Code-Reviews zu verwenden.

Übrigens: Wir suchen Softwareentwickler. Berufseinsteigerinnen, Entwickler mit einigen und Expertinnen mit vielen Jahren Erfahrung.

Hier finden Sie ein Video: What is “spaghetti” code?

Und hier finden Sie ergänzende Informationen aus unserem t2informatik Blog:

t2informatik Blog: Softwareentwicklung leicht gemacht

Softwareentwicklung leicht gemacht

t2informatik Blog: Dokumentation im Code - Pro und Contra

Dokumentation im Code – Pro und Contra