Den Begriff „Code Smell“ prägte Kent Beck, der Urheber des Extreme Programming, als aussagekräftige Metapher. Wie in der realen Welt ist ein Geruch im Falle von Code ein Hinweis darauf, dass Handlungsbedarf besteht.
Wer einen Code Smell frühzeitig wahrnimmt, kann auf lange Sicht sogar Bugs verhindern,
Fast jedem unangenehmen Geruch liegt ein Problem zugrunde – und so bezog sich Kent Beck mit dem Begriff „Code Smell“ auch auf den Geruch einer vollen Windel. Wie eine volle Windel zeigt so mancher Code am unangenehmen Code Smell mehr oder weniger subtil an, dass etwas ausgetauscht, gewechselt oder grundlegend verändert werden muss.
Anders als bei klar festgesetzten Begriffen wird die Benutzung einer Metapher etwas legerer gehandhabt. Klare Richtlinien, wann es sich bei einem schlecht optimierten Quellcode um einen Code Smell handelt und wann nicht, gibt es folglich nicht. Sowohl in den Programmiersprachen als auch für einzelne Developer scheiden sich da die Geister.
In der agilen Entwicklung wird Code Smell aber besonders häufig genutzt, deswegen lohnt sich ein tieferes Verständnis. Der Code Smell hat seinen Ursprung zumeist in einem Konflikt mit den klassischen Designprinzipien von Code und verstößt gegen einige grundlegende Regeln. Die Folge ist aber kein Programmfehler oder Systemausfall, sondern eine schlechtere Optimierung oder Wartbarkeit.
Nun ließe sich also argumentieren, so schlecht sei ein Code Smell ja nicht, da das Programm dennoch irgendwie lauffähig ist. Im agile Development ist diese Herangehensweise aber fatal, da folgende Iterationen und Wartungen nicht mehr so leicht durchgeführt werden können wie mit optimiertem Code.
Woher kommt der „stinkige“ Code?
Der Grund für einen Code Smell kann daher beispielsweise eine schnelle Fehlerbehebung sein. Dadurch wird ein Programm irgendwie lauffähig gemacht und der eigentliche Fehler überbrückt. Wird weiter auf diesem wackeligen Fundament gebaut, wird die Wartung und Kontrolle von Version zu Version aufwendiger.
Der Druck, der häufig auf Programmierer*innen lastet, schnell neue Versionen zu liefern oder Updates lauffähig zu machen, sorgt für unsauberen Code. Für die Kund*innen ist der Unterschied zunächst nicht bemerkbar und so ist die Priorisierung von Time-to-Market über einer eleganten Lösung für den Code häufig die Ursache für Probleme beim Code.
Refaktorisierung – Lösungen für Code Smells
In der Regel werden Code Smells durch Refactoring in kurzen Feedbackzyklen (ideal also für agile Development) aufgelöst. Durch kleine und kontrollierte Arbeitsschritte und eine gezielte Isolation bei der Refaktorisierung kann der Code Smell entfernt werden.
Allerdings entsteht hierbei ein interessanter Feedbackloop. Denn Refactoring löst auf der einen Seite Code Smells auf, auf der anderen Seite ist es gerade der Code Smell, der entscheidende Hinweise für das Refactoring gibt. Welche Teile eines Codes refaktorisiert werden müssen und welche Techniken hierfür zum Einsatz kommen, ist maßgeblich vom Code Smell abhängig.
Ohne passendes Problem keine passende Lösung.
Grob werden Code Smells in unterschiedliche Kategorien eingeteilt. Die Application Level Smells, die Class Level Smells und die Method Level Smells. Je nach Stufe äußern Code Smells sich unterschiedlich.
Beispiele auf dem Application Level:
Funktionen, Module oder Klassen, die nicht korrekt benannt sind, was ihre Funktion unkenntlich macht
Duplizierter Code
Identische Veränderungen an mehreren Klassen gleichzeitig (Shotgun Surgery)
Beispiele auf dem Class Level:
Eine Klasse, die zu wenig macht (Freeloader)
Eine Gruppe von Variablen, die gemeinsam durch mehrere Teile einer Applikation gereicht werden (Data Clump), ohne dass sie zu einem Objekt gemacht wurden
Eine abgeleitete Klasse, die die Methoden einer Basisklasse bricht und damit Design by Contract verletzt
Beispiele auf dem Method Level:
Eine übergroße Methode (Long Method), die besser geteilt werden sollte und schwer lesbar ist
Eine überlange Codezeile, die nur schwer zu lesen, refaktorisieren oder zu verstehen ist (God Line)
Eine exzessive Rückgabe von Daten, die mehr Daten bereit stellt als benötigt/angefordert
Darum sollten üble Gerüche beim Coden vermieden und beseitigt werden
Wie bereits erwähnt, muss ein Code Smell noch lange nicht in einem nicht lauffähigen oder eingeschränkten Programm enden. Tatsächlich sind die Ursachen für Code Smells tatsächlich eher darin zu finden, dass eine Applikation noch mit allen Mitteln lauffähig gemacht wurde. Auch Robert C. Martins Ansicht, man finde in den Code Smells ein Wertesystem für die handwerklichen Fertigkeiten von Programmiererinnen und Programmierern, wirkt hier übermäßig wertend.
Die Wahrheit ist, dass ein Code Smell in der Theorie durchaus vermeidbar ist, die praktischen Erfordernisse der Softwareauslieferung aber oftmals Code Gerüche mit sich bringen. Dennoch sollten Smells im Code schnell ausgeräumt werden, da sie die perfekte Nährgrundlage für zukünftige Bugs liefern und das Risiko erhöhen, dass spätere Versionen Probleme bekommen. Sauberer Code durch Reviews und Refaktorisierung ist das beste Mittel gegen Code Smell und für einen simplen und optimierten Code.
Stand: 08.12.2025
Es ist für uns eine Selbstverständlichkeit, dass wir verantwortungsvoll mit Ihren personenbezogenen Daten umgehen. Sofern wir personenbezogene Daten von Ihnen erheben, verarbeiten wir diese unter Beachtung der geltenden Datenschutzvorschriften. Detaillierte Informationen finden Sie in unserer Datenschutzerklärung.
Einwilligung in die Verwendung von Daten zu Werbezwecken
Ich bin damit einverstanden, dass die Vogel IT-Medien GmbH, Max-Josef-Metzger-Straße 21, 86157 Augsburg, einschließlich aller mit ihr im Sinne der §§ 15 ff. AktG verbundenen Unternehmen (im weiteren: Vogel Communications Group) meine E-Mail-Adresse für die Zusendung von Newslettern und Werbung nutzt. Auflistungen der jeweils zugehörigen Unternehmen können hier abgerufen werden.
Der Newsletterinhalt erstreckt sich dabei auf Produkte und Dienstleistungen aller zuvor genannten Unternehmen, darunter beispielsweise Fachzeitschriften und Fachbücher, Veranstaltungen und Messen sowie veranstaltungsbezogene Produkte und Dienstleistungen, Print- und Digital-Mediaangebote und Services wie weitere (redaktionelle) Newsletter, Gewinnspiele, Lead-Kampagnen, Marktforschung im Online- und Offline-Bereich, fachspezifische Webportale und E-Learning-Angebote. Wenn auch meine persönliche Telefonnummer erhoben wurde, darf diese für die Unterbreitung von Angeboten der vorgenannten Produkte und Dienstleistungen der vorgenannten Unternehmen und Marktforschung genutzt werden.
Meine Einwilligung umfasst zudem die Verarbeitung meiner E-Mail-Adresse und Telefonnummer für den Datenabgleich zu Marketingzwecken mit ausgewählten Werbepartnern wie z.B. LinkedIN, Google und Meta. Hierfür darf die Vogel Communications Group die genannten Daten gehasht an Werbepartner übermitteln, die diese Daten dann nutzen, um feststellen zu können, ob ich ebenfalls Mitglied auf den besagten Werbepartnerportalen bin. Die Vogel Communications Group nutzt diese Funktion zu Zwecken des Retargeting (Upselling, Crossselling und Kundenbindung), der Generierung von sog. Lookalike Audiences zur Neukundengewinnung und als Ausschlussgrundlage für laufende Werbekampagnen. Weitere Informationen kann ich dem Abschnitt „Datenabgleich zu Marketingzwecken“ in der Datenschutzerklärung entnehmen.
Falls ich im Internet auf Portalen der Vogel Communications Group einschließlich deren mit ihr im Sinne der §§ 15 ff. AktG verbundenen Unternehmen geschützte Inhalte abrufe, muss ich mich mit weiteren Daten für den Zugang zu diesen Inhalten registrieren. Im Gegenzug für diesen gebührenlosen Zugang zu redaktionellen Inhalten dürfen meine Daten im Sinne dieser Einwilligung für die hier genannten Zwecke verwendet werden. Dies gilt nicht für den Datenabgleich zu Marketingzwecken.
Recht auf Widerruf
Mir ist bewusst, dass ich diese Einwilligung jederzeit für die Zukunft widerrufen kann. Durch meinen Widerruf wird die Rechtmäßigkeit der aufgrund meiner Einwilligung bis zum Widerruf erfolgten Verarbeitung nicht berührt. Um meinen Widerruf zu erklären, kann ich als eine Möglichkeit das unter https://contact.vogel.de abrufbare Kontaktformular nutzen. Sofern ich einzelne von mir abonnierte Newsletter nicht mehr erhalten möchte, kann ich darüber hinaus auch den am Ende eines Newsletters eingebundenen Abmeldelink anklicken. Weitere Informationen zu meinem Widerrufsrecht und dessen Ausübung sowie zu den Folgen meines Widerrufs finde ich in der Datenschutzerklärung.