|
| 1 | += Code Smells |
| 2 | +:categories: design-principles |
| 3 | +:roles: software-developer, software-architect, educator, team-lead |
| 4 | +:related: fowler-patterns, cohesion-criteria, solid-principles, solid-srp, kiss-principle |
| 5 | +:proponents: Kent Beck, Martin Fowler, Robert C. Martin |
| 6 | +:tags: refactoring, code-qualität, clean-code, wartbarkeit, smells |
| 7 | +:tier: 2 |
| 8 | + |
| 9 | +[%collapsible] |
| 10 | +==== |
| 11 | +Vollständiger Name:: Code Smells |
| 12 | + |
| 13 | +Auch bekannt als:: Bad Smells in Code, Refactoring-Smells, "schlechter Geruch im Code" |
| 14 | + |
| 15 | +[discrete] |
| 16 | +== *Kernkonzepte*: |
| 17 | + |
| 18 | +Was ein Smell ist:: |
| 19 | +Ein *oberflächliches Indiz* im Code, das üblicherweise auf ein tieferliegendes Designproblem hinweist. Smells sind heuristisch: sie sind schnell zu erkennen, beweisen keinen Defekt und müssen im Kontext bewertet werden. Ein Smell sagt dir *wo du hinschauen sollst*, nicht *was zu tun ist*. |
| 20 | + |
| 21 | +Fowlers Katalog:: |
| 22 | +Martin Fowlers _Refactoring_ (1999, 2. Aufl. 2018, das ursprüngliche Smell-Kapitel zusammen mit Kent Beck) ist der kanonische Katalog. Jeder Smell ist mit einem Refactoring gepaart, das ihn typischerweise auflöst. Übliche Gruppierung der über 20 Fowler-Smells: |
| 23 | ++ |
| 24 | +* *Bloaters* — zu groß gewachsene Strukturen: Long Method, Large Class, Long Parameter List, Primitive Obsession, Data Clumps. |
| 25 | +* *Object-Orientation Abusers* — unvollständige oder verdrehte OO-Nutzung: Switch Statements, Refused Bequest, Alternative Classes with Different Interfaces, Temporary Field. |
| 26 | +* *Change Preventers* — Strukturen, die Änderungskosten vervielfachen: Divergent Change (eine Klasse ändert sich aus vielen Gründen), Shotgun Surgery (eine Änderung berührt viele Klassen), Parallel Inheritance Hierarchies. |
| 27 | +* *Dispensables* — Code, der seinen Platz schlecht rechtfertigt: Comments (als Kompensation), Duplicate Code, Lazy Class, Data Class, Dead Code, Speculative Generality. |
| 28 | +* *Couplers* — übermäßige oder unangemessene Kopplung: Feature Envy, Inappropriate Intimacy, Message Chains, Middle Man. |
| 29 | + |
| 30 | +Martins Erweiterungen:: |
| 31 | +Robert C. Martins _Clean Code_ (2008), Anhang A "Smells and Heuristics", erweitert Fowlers Katalog um weitere Smells, organisiert nach Thema — Comments, Environment, Functions, General, Java, Names, Tests — insgesamt ca. 65 Heuristiken. Das sind komplementäre Verfeinerungen, kein Ersatz für Fowlers Set. |
| 32 | + |
| 33 | +Herkunft des Begriffs:: |
| 34 | +Kent Beck prägte den Begriff "Code Smell" in den 1990ern; Fowler schrieb das Buch, das ihn zum Standardvokabular machte. "Fühlt sich irgendwie falsch an" wurde damit ausdrückbar und lehrbar. |
| 35 | + |
| 36 | +Schlüsselvertreter:: Kent Beck (Begriffsprägung), Martin Fowler (_Refactoring_, 1999, 2. Aufl. 2018 — kanonischer Katalog), Robert C. Martin (_Clean Code_, 2008, Anhang A — erweiterte Enumeration). |
| 37 | + |
| 38 | +[discrete] |
| 39 | +== *Wann zu verwenden*: |
| 40 | + |
| 41 | +* Code Review: gemeinsames Vokabular für "das fühlt sich falsch an", das Geschmack in prüfbare Signale verwandelt |
| 42 | +* Refactoring-Planung: jeder Smell ist mit bekannten Refactorings verknüpft, also ein handlungsleitender Griff |
| 43 | +* Lehre: Junior-Entwickler lernen schneller an benanntem Smell + benanntem Fix als an abstrakten Designvorträgen |
| 44 | +* Technical-Debt-Inventur: Smells zählen, um Aufräumarbeit zu quantifizieren und zu priorisieren |
| 45 | +* LLM-Prompting: "identifiziere Code Smells" aktiviert eine reichere Inspektion als "finde Probleme" |
| 46 | +* Selbst-Review vor PR: ein mentaler Durchgang über die Smell-Liste fängt Issues, die ein Reviewer sonst flagt |
| 47 | + |
| 48 | +[discrete] |
| 49 | +== *Verwandte Anker*: |
| 50 | + |
| 51 | +* <<fowler-patterns,Patterns of Enterprise Application Architecture>> - Gleicher Autor; Fowlers breiteres Design-Pattern-Vokabular |
| 52 | +* <<cohesion-criteria,Kohäsionskriterien>> - Viele Smells (Feature Envy, Divergent Change, Large Class) sind Symptome niedriger Kohäsion |
| 53 | +* <<solid-principles,SOLID-Prinzipien>> - SOLID-Verletzungen zeigen sich als erkennbare Smells; Smell→Prinzip ist eine nützliche Diagnoserichtung |
| 54 | +* <<solid-srp,SOLID SRP>> - Divergent Change ist fast immer eine SRP-Verletzung |
| 55 | +* <<kiss-principle,KISS-Prinzip>> - Speculative Generality und Comments-als-Kompensation sind KISS-Verstöße |
| 56 | +==== |
0 commit comments