t2informatik » Wissen kompakt » Code-Smell

Code-Smell

Schlecht strukturierter Quellcode

Code-Smell bezeichnet funktionierenden, aber schlecht struktuierten Quellcode. Der Begriff 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 Programming, zurück. Mit „If it stinks, change it“ zitierte Beck seine Großmuter, die über das Wickeln von Babys sprach. Code-Smell deklariert Konstrukte in der Programmierung, die ein Refactoring nahelegen. Es handelt sich im übertragenen Sinne um riechenden bzw. schlecht oder ü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.
 

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 Parameterliste: 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.

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. 

Hinweis:

Für einen vollständigen Überblick über Code-Smells empfiehlt sich der Blick in das Werk von Martin Fowler. Informationen dazu finden Sie hier  »

“Das Fachwissen zu Softwarearchitekturen, die Expertise in der Softwareentwicklung und die sehr flexible Arbeitsweise waren ideal für uns.“

„Ich brauche Freiheit und Vertrauen. Und ich möchte Verantwortung übernehmen und dabei Spaß haben!“

Share This