Zum Inhalt springen

Anti-Pattern

aus Wikipedia, der freien Enzyklopädie
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 9. Mai 2006 um 18:06 Uhr durch Michael Hüttermann (Diskussion | Beiträge) ([[Organisation]]s- bzw. [[Prozess]]-Anti-Patterns). Sie kann sich erheblich von der aktuellen Version unterscheiden.

Während Entwurfsmuster in der Software-Entwicklung allgemein übliche und bekannte Lösungsansätze sind, um Probleme zu lösen, sind Anti-Patterns Negativ-Beispiele von bereits durchgeführten Lösungen, die Hinweise geben, wie die Aufgabenstellung besser gelöst werden könnte und sollte.


Einordnung

Entwurfsmuster wurden der Allgemeinheit vor allem durch das Buch Design Patterns der Viererbande bekannt. Nachdem bei der Software-Entwicklung immer mehr von positiven Erfahrungen von erfolgreich abgeschlossenen Aufgabenstellungen profitiert wurde, konzentrierte man sich auch darauf die Negativbeispiele, also wiederkehrende Fehler bei der Software-Entwicklung, zu identifizieren und zu dokumentieren. Bereits manifestierte Anti-Pattern können durch geschickte Maßnahmen behoben werden.

Kategorisierung

Mittlerweile werden Anwendungsbereiche der Anti-Patterns immer feiner unterschieden. So unterscheidet man Anti-Patterns bei der reinen Programmierung (hier spricht man auch von Code smells, die bei Existenz und Identifikation durch Refaktorisierungen entfernt werden können), beim Design, beim Projekt-Management und bei Unternehmensprozessen. Darüber hinaus können in der Praxis immer mehr sogenannte Meta-Patterns identifiziert werden. Diese vereinen einzelne Patterns zu einem neuen, abstrakteren Pattern oder führen eine weitere Dimension oder abstraktere Kategorisierung ein.

Projektmanagement-Anti-Patterns

  • „Rauch und Spiegel“ (englisch Smoke and mirrors): Nicht fertige Funktionen werden als fertig vorgetäuscht.
  • „Aufgeblähte Software“ (englisch Software bloat): Jede neue Version benötigt mehr Resourcen
  • „Erschleichung von Funktionalität“ (englisch Feature creep): Der Umfang der zu entwickelnden Funktionalität wird in einem Projektplan festgehalten. Der Kunde versucht nach der Erstellung des Projektplanes weitere Funktionalität in die Version mit unterzubringen. Führt zu Problemen wenn die in Arbeit befindliche Version nicht das notwendige Design aufweist, Termine nicht eingehalten werden können oder die Kosten über die planmässigen wachsen. Bei schwergewichten Prozessen sehr gefährlich, bei leichtgewichtigen wie XP müssen bei allen Beteiligten die Konsequenzen klar sein. Ein systematisches Anforderungsmanagement ist obligatorisch. Extreme, böswillige und grob fahrlässige Anwendung dieses Musters kann dadurch motiviert sein, dass der Auftragsteller, der immer neue Funktionalität fordert, das Produkt boykottieren möchte und dessen Abschluss zu verhindern sucht.
  • „Erschleichung weiterer Anwendungsbereiche“ (englisch Scope creep): wie Erschleichung von Funktionalität nur nicht auf Funktionalität bezogen sondern auf den Anwendungsbereich. Auch hier zeichnet sich der Auftraggeber dadurch aus, dass er geschickt und versteckt den Umfang der Software nachträglich erweitern möchte ohne dass er dies explizit zugibt. Beispiel: nicht diskutierte Anwendungsbereiche sind plötzlich sehr wichtig bzw. das Fehlen eines Bereiches wird sogar als Fehler dargestellt, der dringendst behoben werden muss.

Design-Anti-Patterns

  • „Außerirdische Spinnen“ (englisch Alien spiders): ein Design, welches den Namen nicht verdient. Sehr gesprächige, kommunikative Objekte, welche sich alle gegenseitig kennen. Überhaupt keine Nutzung von Entwurfsmuster. Bei n Objekten gibt es n*(n-1)/2 Kommunikationspaare.
  • „Gas-Fabrik“ (englisch Gas factory): Eine Gas-Fabrik ist ein unnötig komplexes System-Design für eine recht einfache Aufgabenstellung. Beispielhafte Nutzung: „Ich wollte eine Software Lösung haben, keine Gas Fabrik.“
  • „Gottobjekt“ (englisch God object): Ein Objekt welches zu viel weiss respektive zu viel macht. Aufteilung nach Verantwortlichkeiten, Kapselung und Einhaltung von Entwurfsmustern helfen diesem Muster zu begegnen. Auch als Gottklasse (God class) und Blob bekannt.

Programmierungs-Anti-Patterns

  • „Doppelt überprüfte Sperrung“ (englisch doubled-checked locking): eine doppelte Überprüfung bevor eine Sperrung durchgeführt wird. Beispiel: in der Java-Welt, um ein Einzelstück (Singleton) zu erstellen. Wird hier häufig von fortgeschrittenen Novizen genutzt.
  • „Zwiebel“ (englisch Onion): neue Funktionalität wird um (oder über) die alte gelegt. Häufig zu beobachten, wenn ein Entwickler ein Programm erweitern soll welches er nicht geschrieben hat. Der Entwickler möchte oder kann die bereits existente Lösung nicht komplett verstehen, und setzt seine neue Lösung einfach drüber. Dies führt mit einer Vielzahl von Versionen und unterschiedlichen Entwicklern über die Jahre zu einem Zwiebel-System.

Organisations- bzw. Prozess-Anti-Patterns

  • „Goldener Hammer“ (englisch Golden hammer): Ein bevorzugter Lösungsweg wird als universell anwendbar angesehen.
  • „Das Rad neu erfinden“ (englisch Reinventing the wheel): stetige Neuerstellung von Software ohne bestehende Lösungen oder Rahmenwerke zu nutzen. Keine Wiederverwendung, was zu unstabiler, unreifer, teurer Software führt.
  • „Das Quadratische Rad neu erfinden“ (englisch Reinventing the square wheel): eine schlechte Lösung bereitstellen wenn eine gute bereits existiert. Beispiel aus der Java Welt: eigene Entwicklung einer Persistenz-Schicht, obwohl es hier reife, verbreitete, durchgetestete de facto Standards gibt wie Hibernate.
  • Body ballooning: der Vorgesetzte handelt ausschließlich aus der Bestrebung heraus, seine Machtposition auszubauen, die sich entweder aus der Unternehmensstruktur oder auch rein subjektiv, aus der Anzahl der Mitarbeiter unter sich definiert. Dies kann dazu führen, dass er bewusst arbeitsintensivere Lösungen und Arbeitstechniken den effektiveren, effizienteren vorzieht.
  • „Warmer Körper“ (englisch Warm body): Eine Person welche einen zweifelhaften oder keinen Beitrag zu einem Projekt leistet. Beispiel: in frühen Entwicklungsphasen sollten wenige Spezialisten das System entwerfen, erst anschließend können mehr Entwickler in einer größeren Anzahl das System umsetzen. Zuviele Entwickler in frühen Phasen sind warme Körper.
  • Single head of knowledge: Ein Individuum besitzt zu einer Software, zu einem Werkzeug oder ein anderes eingesetzten Medium als einziger unternehmensweit das Wissen. Zeugt häufig von fehlendem Wissensmanagement, mangelndem Austausch zwischen den Kollegen oder rudimentären Defiziten in der Organisation kann aber auch von dem Individuum bewusst angestrebt worden sein. Wenn das Individuum die Unternehmung verlässt nimmt er bildlich gesprochen das Wissen mit was für die Unternehmung sehr gefährlich ist, es blutet förmlich aus (bleeding). Muster kann durch Maßnahmen verhindert werden, z.B. durch Entwicklung nach XP zusammen mit Mitarbeiterbindung, -Motivation und Förderung der Identifikation mit der Unternehmung, um die Fluktuation zu minimieren.
  • Mushroom management: Mitarbeiter werden uninformiert und klein gehalten. Entfaltung und Selbstverwirklichung findet kaum statt. Die Analogie der Belegschaft zu einem Pilzfeld kennzeichnet sich dadurch aus, dass die Mitarbeiter bildlich mit Mist bedeckt und im Dunkeln gehalten werden, und, wenn sie zu gross geworden sind (zu viel Erfahrung, zu gute Leistungen), klein gemacht, unter Druck gesetzt oder gar entlassen werden. Diese Assoziation beinhaltet ferner die These, dass die Führung Entscheidungen fällt ohne die Spezialisten zu konsultieren bzw. die Belegschaft über diese Entscheidungen nicht informiert.
  • „Noch ein Meeting wird es lösen“ (englisch Yet Another Meeting Will Solve It): Ein Meeting einzuberufen in einem verspäteten Projekt (ein Projekt mit Zeitverzug) erhöht nur noch mehr den Zeitverzug.
  • Net Negative Producing Programmer: Einen unperformanten, unproduktiven Entwickler aus einem Team zu entfernen kann die Projektproduktivität mehr erhöhen als einen guten Entwickler hinzufügen (und den unproduktiven belassen).
  • „Angst vor Erfolg“ (englisch Fear Of Success): das Management sorgt für eine verängstigte, defensive Umgebung (wie ein Fussballteam welches nur das eigene Tor verteidigt ohne Bestrebungen zu haben ein eigenes Tor zu schiessen). In einer Kultur voller Angst kann kaum etwas Konstruktives entstehen. Auch Personen, die etwas Gutes erstellen brechen ihr Vorhaben ab, weil sie davon aus gehen sie verlieren sowieso oder die gute Lösung wird nicht honoriert bzw. als schlechte dargestellt. Unternehmen unter Angst wirken gelähmt und versäumen es neue Märkte und Lösungen aktiv anzugehen. Sie verlieren ihre Wettbewerbsfähigkeit.

Meta-Patterns

  • „Verklumpung erfahrener Programmierer“ (englisch Programmer Experience Clumping): Unerfahrene Programmierer sind bereit für eine relativ geringe Vergütung für eine Unternehmung zu arbeiten, um dort Erfahrung zu sammeln während erfahrene Spezialisten sehen was passiert, können dies objekt, kritisch einschätzen, und den Arbeitsplatz wechseln, um eine Herausforderung anzunehmen, in der die Programmierung besser verstanden und gute Arbeit gewürdigt wird. Dies produziert ein Gruppierungseffekt wo sich unerfahrene Programmierer in einer Unternehmung gruppieren bzw. dort verbleiben, und die erfahrenen Leute sich woanders gruppieren.
  • „Zersetzung“ (englisch Corrosion): gewollte oder ungewollte Nutzung einer Vielzahl von Anti-Patterns aus allen Bereichen. Geht einher mit konsequenter Verteidigung des Vorgehens. Meist unsachlich und brachial, ohne Diskussion. Führt unweigerlich zu der Vermutung, der Anwendende möchte der Unternehmung oder dem Softwareprodukt grob fahrlässig Schaden zufügen bzw. dessen erfolgreiche, kostengünstige Einführung verhindern. Kann auch dadurch motiviert sein, dass der Anwendende eine andere involvierte Partei schaden möchte.

Literatur

  • Fowler, Martin (1999). Refactoring. Improving the Design of Existing Code. Addison-Wesley. ISBN 0201485672.
  • Kerievsky, Joshua (2004). Refactoring to Patterns. Addison-Wesley. ISBN 0321213351.
  • Tate, Bruce A. (2002). Bitter Java. Manning. ISBN 193011043X.
  • Tate, Bruce A. et al. (2003). Bitter EJB. Manning. ISBN 1930110952.