Code-Smell

Wissen kompakt: Code-Smell bezeichnet funktionierenden, aber schlecht strukturierten, im übertragenen Sinne übelriechenden Quellcode.

Code-Smell – schlecht strukturierter Quellcode

Der Begriff Code-Smell geht auf das Buch „Refactoring – Improving the Design of Existing Code“¹ von Martin Fowler und eine in diesem Buch verwendete Metapher von Kent Beck, dem Erfinder des Extreme Programmings, zurück. Mit „If it stinks, change it“ zitierte Beck seine Großmutter, die über das Wickeln von Babys sprach.

Code-Smells bezeichnen funktionierenden, aber schlecht strukturierten Quellcode. Sie  deklarieren Konstrukte in der Programmierung, die ein Refactoring nahelegen. Im übertragenen Sinne handelt es sich um übelriechenden Code.

Das große Problem von Code-Smells – alternativ auch einfach Smells oder Bad Smells genannt – liegt im Code-Verständnis der Entwickler: Ist die Struktur einer Software schwer zu verstehen, schleichen sich bei Adaptionen oder Erweiterungen leicht Fehler ein. Zusätzlich wird die Wartbarkeit einer Software erschwert. Grundsätzlich lassen sich zwei Kategorien von Code-Smells unterscheiden: klasseninterne und klassenübergreifende Smells.

Klasseninterne Code-Smells

Folgende Konstrukte gibt es oftmals bei klasseninternen Code-Smells:

  • Code-Duplikate: Als Code-Duplikat wird Quellcode verstanden, der in identischer oder ähnlicher Form mehrfach innerhalb einer Software verwendet wird.
  • lange Methoden: Je länger eine Methode ist, desto fehleranfälliger ist sie. Zusätzlich erschweren lange Methoden die Wiederverwendung. Gerne wird auch von Spaghetti-Code gesprochen.
  • umfangreiche Parameterlisten: Sie erschweren das Verständnis von Methodenaufrufen, da Attribute von Objekten als Parameterliste übergeben werden, anstatt das Objekt an die Methode zu übergeben.
  • viele Änderungen an einer Klasse: Werden Klassen zu umfangreich, muss für eine Änderung eine Klasse häufig an mehreren Stellen angepasst werden.
  • temporäre Felder: Felder einer Klasse beschreiben die Zustände ihrer Objekte, wobei ein Objekt ein Feld nur unter bestimmten Umständen bzw. temporär verwendet, so dass der Code schwer zu verstehen ist.
  • wiederholende Switch-Anweisungen: Sie werden an mehreren Codestellen verwendet, obwohl es besser wäre, sie als eigene Methode zu extrahieren.
  • Kommentare: An sich sind Kommentare zwar gut, sie können aber auch Hinweise auf schlechten Code liefern, der durch den Kommentar verständlicher werden soll.

Klassenübergreifende Code-Smells

Neben den klasseninternen gibt es häufig auch klassenübergreifende Code-Smells wie u.a. große Klassen, alternative Klassen (die das gleiche machen, aber unterschiedliche Schnittstellen verwenden), faule Klassen, Nachrichtenketten, Datenklumpen, parallele Vererbungshierarchien oder Unterklassen, die vererbte Methoden und Daten nicht benötigen.

Grundsätzlich gibt es auch weitere Code-Smells, die ebenfalls die Lesbarkeit und damit das Verständnis des Codes erschweren wie bspw. nichtssagende, zu kurze oder zu lange Namen, redundanter Code, die erzwungene Verwendung von Entwurfsmustern, komplexe Verzweigungen und tiefe Verschachtelungen.

Code Smell

Was macht t2informatik?

Was macht t2informatik? Kleiner Tipp: Es hat etwas mit Softwareentwicklung zu tun!
Impuls zum Diskutieren:

Es gibt Meinungen, die halten den Ausdruck Code-Smell für erniedrigend, herablassend und selbstgefällig. Wie sehen Sie das?

Hinweise:

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

[1] Für einen vollständigen Überblick über Code-Smells empfiehlt sich der Blick in das Werk von Martin Fowler.

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

Hier finden Sie ergänzende Informationen aus unserer Rubrik Wissen kompakt:

Wissen kompakt: Was ist eine Code-Kata?

Was ist eine Code-Kata?

Wissen kompakt: Was ist Dead Code?

Was ist Dead Code?