www.wikidata.de-de.nina.az
Unter Code Smell kurz Smell engl schlechter Geruch oder deutsch ubelriechender Code versteht man in der Programmierung ein Konstrukt das eine Uberarbeitung des Programm Quelltextes nahelegt Dem Vernehmen nach stammt die Metapher Smell von Kent Beck und erlangte weite Verbreitung durch das Buch Refactoring von Martin Fowler Unter dem Begriff sollten handfestere Kriterien fur Refactoring beschrieben werden als das durch den vagen Hinweis auf Programmasthetik geschehen wurde Bei Code Smell geht es nicht um Programm oder gar Syntaxfehler sondern um funktionierenden Programmcode der aber schlecht strukturiert ist Das grosste Problem liegt darin dass der Code fur den Programmierer schwer verstandlich ist so dass sich bei Korrekturen und Erweiterungen haufig wieder neue Fehler einschleichen Code Smell kann auch auf ein tieferes Problem hinweisen das in der schlechten Struktur verborgen liegt und erst durch eine Uberarbeitung erkannt wird Inhaltsverzeichnis 1 Verbreitete Smells 1 1 Weitere Smells und Programmierungs Anti Pattern 2 Architektur Smells 3 Siehe auch 4 Literatur 5 Weblinks 6 EinzelnachweiseVerbreitete Smells BearbeitenDie folgenden von Martin Fowler und Kent Beck beschriebenen Smells 1 beziehen sich auf die objektorientierte Programmierung haben aber naheliegende Entsprechungen unter anderen Programmier Paradigmen Code Duplizierung Der gleiche Code kommt an verschiedenen Stellen vor Lange Methode Eine Methode Funktion Prozedur ist zu lang Grosse Klasse Eine Klasse ist zu umfangreich umfasst zu viele Instanzvariablen und duplizierten Code Siehe auch Gottobjekt Lange Parameterliste Anstatt ein Objekt an eine Methode zu ubergeben werden Objekt Attribute extrahiert und der Methode als lange Parameterliste ubergeben Divergierende Anderungen Fur eine Anderung muss eine Klasse an mehreren Stellen angepasst werden Schrotkugeln herausoperieren engl Shotgun Surgery Dieser Smell ist noch gravierender als divergierende Anderungen Fur eine Anderung mussen weitere Anderungen an vielen Klassen durchgefuhrt werden Neid engl Feature Envy Eine Methode interessiert sich mehr fur die Eigenschaften insbesondere die Daten einer anderen Klasse als fur jene ihrer eigenen Klasse Datenklumpen Eine Gruppe von Objekten kommt haufig zusammen vor als Felder in einigen Klassen und als Parameter vieler Methoden Neigung zu elementaren Typen engl Primitive Obsession Elementare Typen werden benutzt obwohl auch fur einfache Aufgaben Klassen und Objekte aussagekraftiger sind Case Anweisungen in objektorientiertem Code Switch Case Anweisungen werden benutzt obwohl Polymorphismus sie weitgehend uberflussig macht und das damit zusammenhangende Problem des duplizierten Codes lost Parallele Vererbungshierarchien Zu jeder Unterklasse in der einen Hierarchie gibt es immer auch eine Unterklasse in einer anderen Hierarchie Faule Klasse Eine Klasse leistet zu wenig um ihre Existenz zu rechtfertigen Spekulative Allgemeinheit Es wurden alle moglichen Spezialfalle vorgesehen die gar nicht benotigt werden solch allgemeiner Code braucht Aufwand in der Pflege ohne dass er etwas nutzt Temporare Felder Ein Objekt verwendet eine Variable nur unter bestimmten Umstanden der Code ist schwer zu verstehen und zu debuggen weil das Feld scheinbar nicht verwendet wird Nachrichtenketten Das Gesetz von Demeter wird verletzt Middle Man Vermittler Eine Klasse delegiert alle Methodenaufrufe an eine andere Klasse Unangebrachte Intimitat Zwei Klassen haben zu enge Verflechtungen miteinander Alternative Klassen mit verschiedenen Schnittstellen Zwei Klassen machen das gleiche verwenden hierfur aber unterschiedliche Schnittstellen Inkomplette Bibliotheksklasse Eine Klasse einer Programmbibliothek benotigt Erweiterungen um in einem fur sie geeigneten Bereich verwendet werden zu konnen Datenklasse Klassen mit Feldern und Zugriffsmethoden ohne Funktionalitat Ausgeschlagenes Erbe engl Refused Bequest Unterklassen brauchen die Methoden und Daten gar nicht die sie von den Oberklassen erben siehe auch Liskovsches Substitutionsprinzip Kommentare Kommentare erleichtern im Allgemeinen die Verstandlichkeit Kommentare erscheinen jedoch haufig genau dort notwendig zu sein wo der Code schlecht ist Kommentare konnen somit ein Hinweis auf schlechten Code sein Weitere Smells und Programmierungs Anti Pattern Bearbeiten Neben den von Fowler erwahnte Smells gibt es noch eine Reihe von Code Smells die oft auch unter Programmierungs Anti Pattern erwahnt werden Nichtssagender Name engl Uncommunicative Name Name der nichts uber Eigenschaften oder Verwendung des Benannten aussagt Aussagekraftige Namen sind wesentlich fur das Verstandnis von Programmcode Redundanter Code Ein Stuck Code das nicht mehr verwendet wird Exhibitionismus engl Indecent Exposure Interne Details einer Klasse sind unnotigerweise Teil ihrer Schnittstelle nach aussen Contrived complexity engl Erzwungene Verwendung von Entwurfsmustern wo einfacheres Design ausreichen wurde Zu lange Namen Insbesondere die Verwendung von Architektur oder Designbestandteilen in den Namen von Klassen oder Methoden Zu kurze Namen Die Verwendung von x i oder Abkurzungen Der Name einer Variable sollte ihre Funktion beschreiben Uber Callback Ein Callback der versucht alles zu tun Komplexe Verzweigungen Verzweigungen die eine Menge von Bedingungen abprufen die mit der Funktionalitat des Codeblocks nichts zu tun haben Tiefe Verschachtelungen Verschachtelte if else for do while Statements Sie machen den Code unlesbar Architektur Smells BearbeitenNeben den von Beck und Fowler adressierten Smells im Quelltext von Anwendungen treten Smells auch in der Architektur von Softwaresystemen auf Diese wurden von Stefan Roock und Martin Lippert beschrieben Zu den Architektur Smells zahlen unter anderem Zyklische Benutzungsbeziehungen zwischen Paketen Schichten und Subsystemen Grosse und Aufteilung der Pakete oder SubsystemeSiehe auch BearbeitenSoftwareerosionLiteratur BearbeitenMartin Fowler Refactoring Wie Sie das Design vorhandener Software verbessern Addison Wesley Munchen 2000 ISBN 3 8273 1630 8 S 67 82 englisch Refactoring Improving The Design Of Existing Code Ubersetzt von Bernd Kahlbrandt Weblinks BearbeitenRefactoring Eine Uberblicksarbeit die im Abschnitt 2 3 unter dem Titel Bad Smells einige wichtige Smells erklart Einzelnachweise Bearbeiten Martin Fowler Refactoring Wie Sie das Design vorhandener Software verbessern Addison Wesley Munchen 2000 ISBN 3 8273 1630 8 S 67 82 englisch Refactoring Improving The Design Of Existing Code Ubersetzt von Bernd Kahlbrandt Abgerufen von https de wikipedia org w index php title Code Smell amp oldid 215425036