Anti-Pattern

aus Wikipedia, der freien Enzyklopädie

Wechseln zu: Navigation, Suche

Anti-Pattern (deutsch: Antimuster) bezeichnet in der Softwareentwicklung einen häufig anzutreffenden schlechten Lösungsansatz für ein bestimmtes Problem. Es bildet damit das Gegenstück zu den Mustern (Entwurfsmuster, Analysemuster, Architekturmuster...), welche allgemein übliche und bewährte Problemlösungsansätze beschreiben.

Muster wurden vor allem durch die Entwurfsmuster aus dem Buch Design Patterns der Viererbande bekannt. Diese Entwurfsmuster umfassen jeweils eine Beschreibung der Problemsituation und einen Vorschlag, wie das Problem gelöst werden kann. Nachdem bei der Softwareentwicklung immer mehr von positiven Erfahrungen von erfolgreich abgeschlossenen Aufgabenstellungen profitiert wurde, konzentrierte man sich auch darauf, die Negativbeispiele, also wiederkehrende Fehler bei der Softwareentwicklung, zu identifizieren, zu dokumentieren und Maßnahmen aufzuzeigen, wie sie behoben werden können.

Mithilfe solcher Dokumentationen können bereits manifestierte Antimuster gefunden und behoben werden. Außerdem hilft das Kennen dieser Antimuster, solche Fehler von Vornherein zu vermeiden.

In der Regel entstehen Anti-Patterns wider besseres Wissen, durch mangelnde Erfahrung oder fehlende Qualifikation. Zu beobachten ist allerdings auch die bewusste Verfolgung in bestimmten Szenarien, um einen bestimmten Zweck zu erreichen. Auswirkungen von Anti-Patterns reichen von marginal bis unternehmenskritisch.

Inhaltsverzeichnis

[Bearbeiten] 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 Refactorings entfernt werden können), bei Architektur und Design, beim Projektmanagement, bei Unternehmensprozessen, bei der Unternehmensorganisation und Management. 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.

[Bearbeiten] Projektmanagement-Anti-Patterns

Blendwerk: Nicht fertige Funktionen werden als fertig vorgetäuscht (englisch Smoke and mirrors).

Aufgeblähte Software: Jede neue Version benötigt mehr Ressourcen (englisch Software bloat).

Erschleichung von Funktionalität: 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. Dies 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äßigen wachsen. Bei schwergewichtigen Prozessen sehr gefährlich, bei leichtgewichtigen wie XP müssen bei allen Beteiligten die Konsequenzen klar sein. Ein systematisches Anforderungsmanagement und Änderungsmanagement sind 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 (englisch Feature creep).

Erschleichung weiterer Anwendungsbereiche: Wie Erschleichung von Funktionalität, jedoch 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 (englisch Scope creep).

Brookssches Gesetz: Mitarbeiter zu einem verspäteten Softwareprojekt hinzuzufügen, verzögert das Projekt nur noch weiter, weil die neuen Mitarbeiter Zeit benötigen, um sich einzuarbeiten. (englisch: Adding manpower to a late software project makes it later, siehe Frederick Brooks)

Death Sprint: Überhitzter Projektplan. Software wird iterativ bereitgestellt, allerdings in einer viel zu kurzen Zeitspanne. Nach außen sieht das Projekt zunächst sehr erfolgreich aus: immer wieder neue Versionen mit neuen Eigenschaften werden abgeschlossen. Allerdings leidet die Qualität des Produktes sowohl nach außen sichtbar, wie auch technisch, was allerdings nur der Entwickler erkennt. Die Qualität nimmt ab mit jeder „erfolgreichen“ neuen Iteration. Gegenteil von Death March.

Death March: das Gegenteil von Death Sprint. Ein Death-March-Projekt zieht sich ewig hin. In einem optimalen Fall werden zwar Vorabversionen bereitgestellt, welche aber von schlechter Qualität sind. Der Misserfolg ist objektiv sichtbar. Es können keine Meilensteine gehalten werden bzw. es existieren gar keine. Schlimmstenfalls kann eine Konsequenz daraus sein, dass das Projekt kein Projekt mehr ist, sondern nur eine zeitlich nicht abgeschlossene Aneinanderreihung von Aktivitäten. Es fehlen konkrete Zusagen für Termine und Lieferung von Eigenschaften. Kann auch bewusst in Kauf genommen werden, um von Defiziten in der Organisation abzulenken und Entwicklungen zu verschleppen (so lange an etwas entwickeln bis eine nicht genau spezifizierte Eigenschaft in irgendeiner Form subjektiv funktioniert). Wenn sowohl Anforderungsmanagement als auch Änderungsmanagement nicht vorhanden sind und das Projekt kein Projekt mehr ist, so schlenkert das Entwicklungsprodukt orientiertungslos umher und dessen Qualität nimmt stetig ab. Kann interessanterweise auch mit Death Sprint kombiniert werden, um nach außen von Planungslosigkeit und Defiziten bei Organisation und Technik abzulenken. Es wird dann Funktionalität als neu bereitgestellt, die bereits lange existiert oder es existiert keine Kontrollinstanz, welche Notwendigkeit, Relevanz, Form, Korrektheit und Wichtigkeit von bereitgestellter Funktionalität bewertet (Beispiel: Neuanforderungen von gestern sind (nicht beinhalten!) die Bugs von morgen). Kommt häufig vor, wenn es keine Stakeholder gibt, die Interesse an dem Produkt haben, oder wenn der in das Produkt einfließende Aufwand oder sogar das ganze Produkt letztendlich keine Bedeutung/Wichtigkeit hat. In diesem Fall beschäftigt sich die Unternehmung oder die Entwicklungsabteilung nicht selten (mit sich) selbst.

[Bearbeiten] Architektur- bzw. Design-Anti-Patterns

Außerirdische Spinnen: Ein Design, das den Namen nicht verdient. Sehr gesprächige, kommunikative Objekte, die sich alle gegenseitig kennen. Überhaupt keine Nutzung von Entwurfsmustern. Bei n Objekten gibt es n*(n-1)/2 Kommunikationspaare (englisch Alien spiders).

Gasfabrik: Eine Gasfabrik ist ein unnötig komplexes Systemdesign für eine recht einfache Aufgabenstellung. Beispielhafte Nutzung: „Ich wollte eine Softwarelösung haben, keine Gasfabrik.“ (englisch Gas factory)

Gottobjekt: Ein Objekt, das zu viel weiß 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 (englisch God object).

Innere Plattform-Effekt: Ein System besitzt derartig weitreichende Konfigurationsmöglichkeiten, dass es letztlich zu einer schwachen Kopie der Plattform wird, mittels der es gebaut wurde. Ein Beispiel sind "flexible" Datenmodelle, die auf konkrete (anwendungsbezogene) Datenbanktabellen verzichten und statt dessen mittels allgemeiner Tabellen eine eigene Verwaltungsschicht für die Datenstruktur implementieren. Derartige Systeme sind typischerweise schwer zu beherrschen und leiden unter erheblichen Performanceproblemen. (englisch Inner platform effect)

Spaghetti-Code: Eine sehr kompakte Systemstruktur, deren Kontrollfluss einem Topf Spaghetti ähnelt.

Sumo-Hochzeit: Ein Fat Client ist unnatürlich stark abhängig von der Datenbank. In der Datenbank ist sehr viel Logik in Form der datenbankeigenen Programmiersprache positioniert, in Oracle zum Beispiel mit PL/SQL. Die ganze Architektur ist sehr unflexibel. Soll die Anwendung zu einer Internet-Anwendung migriert oder die Datenbank gewechselt werden, so müssen auf beiden Schichten (Client und Datenhaltung) viele Bereiche neu entwickelt werden. Die Systeme sind nicht entkoppelt (englisch Sumo Marriage).

[Bearbeiten] Programmierungs-Anti-Patterns

Double-Checked Locking in Java
Double-Checked Locking in Java
Magic Value und Switch-Statement in Java
Magic Value und Switch-Statement in Java

Doppelt überprüfte Sperrung (double-checked locking): Eine doppelte Überprüfung, bevor eine Sperrung durchgeführt wird. Wird häufig von unerfahrenen Programmierern genutzt, die von der Problematik des Lockings wissen, aber die falschen Schlüsse ziehen. Obwohl mit Java 5 unter einer neuen Semantik des Schlüsselwortes volatile das double-checked locking thread-safe realisiert werden kann, gilt es immer noch als Anti-Pattern, da es zu umständlich und ineffizient ist. Das beigefügte Beispiel zeigt die Problematik in der getHelper()-Methode, in der für jedes Foo-Objekt genau ein Helper-Objekt lazy erzeugt werden soll (das Interface IHelper wird genutzt, um außerhalb eines Foo-Objektes auf dem Helper-Objekt arbeiten zu können). Ein weiteres Beispiel für eine Nutzung ist die Erstellung und Bereitstellung eines Einzelstücks (Singleton), um von einer Klasse genau eine Instanz zu erzeugen. Es wird gewöhnlich das Initialization On Demand Holder Idiom genutzt, um eine Instanz zu erzeugen, welche vollständig lazy, effizient und thread-safe geladen wird und eine verständliche Implementierung besitzt (englisch double-checked locking).

Zwiebel: 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 (englisch Onion).

Programmierung mittels Copy & Paste: Der Programmierer entwickelt den Code nicht neu, sondern bedient sich bereits existenter Quelltexte, aus denen er Passagen herauskopiert. Die Gefahr ist sehr groß, dass er Fehler mitkopiert oder die Kopie für den neuen Bereich nicht optimal einsatzbereit ist. Der Entwickler reflektiert weniger über sein Programm, als wenn er jede Zeile selbst entwickeln würde. Fehleranfälliges Vorgehen, wenn der Entwickler nicht weiß, was er eigentlich macht. Weit verbreitet (englisch Copy And Paste Programming). Dieses Vorgehen ist auch unter dem Begriff „Verteile und beherrsche nicht“ (als zynische Anspielung auf das informatische Konzept des "divide and conquer" / divide et impera / Teile und herrsche) bekannt.

Lavafluss: Beschreibt den Umstand, dass in einer Anwendung immer mehr „toter Quelltext“ herumliegt. Dieser wird nicht mehr genutzt. Statt ihn zu löschen, werden im Programm immer mehr Verzweigungen eingebaut, die um den besagten Quelltext herumlaufen oder auf ihn aufbauen (englisch Lava flow).

Switch-Statement in Java: Verhalten von Objekten gemäß ihrem Status (state) sollten mit Statusobjekten und dem state-Pattern gesteuert werden, nicht mit konditionalem Code.

Magic Values: Hierbei handelt es sich um Daten (Literale) mit besonderer Bedeutung. Sie sind hartkodiert (hardcoded) und nur mit besonderem Wissen über die konkrete Verwendung zu verstehen. Werte sollten zentral als Variable definiert werden, optimalerweise als typsicheres Objekt (typesafe).

Reservierte Wörter: Die Verwendung von reservierten Wörtern in SQL-Anweisungen kann zu schwer zu findenden Fehlern führen. Ein Austausch der Datenbank eines Herstellers gegen ein anderes Produkt kann dazu führen, dass weitere Namen als reserviert betrachtet werden müssen.

[Bearbeiten] Organisations-, Management- bzw. Prozess-Anti-Patterns

Wunderwaffe: Ein bevorzugter Lösungsweg wird als universell anwendbar angesehen (englisch Golden hammer).

Das Rad neu erfinden: Stetige Neuerstellung von Software ohne bestehende Lösungen oder Rahmenwerke zu nutzen. Keine Wiederverwendung, was zu instabiler, unreifer, teurer Software führt (englisch Reinventing the wheel).

Das quadratische Rad neu erfinden: 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 (englisch Reinventing the square wheel).

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 effektiven, effizienten vorzieht. Auch bekannt als Empire building.

Empire building: Durch sachlich nicht nachvollziehbare, nicht konstruktive Maßnahmen versucht ein einzelner seine Macht auszubauen bzw. zu erhalten. Dies kann Body ballooning sein, aber auch das ständige Beschuldigen anderer, gerade derer, die nicht mehr für die Unternehmung arbeiten, die Ausführung von pathologischer Politik, Diskreditierung, Mobbing und sonstige Facetten, die nur darauf abzielen die eigene Position zu stärken bzw. den eigenen Status zu halten. Dieses Muster kennzeichnet sich auch dadurch aus, dass die Person es vermeidet, Verantwortung zu übernehmen, und schriftliche Beweise für Vorkommnisse und Entscheidungen zu verhindern weiß. Somit muss er sich an diesen nicht messen lassen, was es auch einfacher macht, bei Misslingen eines Projektes die Verantwortung an einen anderen einfach weiter zu delegieren. Hier wird auch gerne jemand genommen, der faktisch nur die Entscheidungen umgesetzt hat (wie ein Programmierer die Entscheidungen des Vorgesetzten oder ein Projektleiter die Anforderungen des Kunden umsetzt).

Warmer Körper: 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 (englisch Warm body).

Single head of knowledge: Ein Individuum besitzt zu einer Software, zu einem Werkzeug oder einem anderen 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). Das Muster kann durch Maßnahmen verhindert werden, z. B. durch Entwicklung nach XP und Teambuilding-Events 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 finden kaum statt. Die Analogie der Belegschaft zu einem Pilzfeld zeichnet sich dadurch aus, dass die Mitarbeiter bildlich mit Mist bedeckt und im Dunkeln gehalten werden, und, wenn sie zu groß 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. Häufig ist auch zu beobachten, dass das Management die individuellen Fähigkeiten, Stärken, Schwächen und Rollen der Teammitglieder nicht kennt und manchmal sogar auch nicht kennen will (Personen werden gleichgeschaltet: Zugeben, dass jemand mehr kann als die anderen macht ihn mächtiger, was vermieden werden soll).

Noch ein Meeting mehr wird es lösen: Ein Meeting einzuberufen in einem verspäteten Projekt (ein Projekt mit Verzug) erhöht nur noch mehr den Verzug (englisch Yet Another Meeting Will Solve It).

Net Negative Producing Programmer: Einen unperformanten, unproduktiven Entwickler aus einem Team zu entfernen kann die Projektproduktivität mehr erhöhen, als einen guten Entwickler hinzuzufügen (und den unproduktiven zu belassen).

Management nach Zahlen: Übermäßiger Schwerpunkt auf quantitativem Management, also Fokus auf Kosten und vernachlässigen anderer Faktoren wie Qualität. Hier werden Programmierer gerne als „Gebrauchsgut“ (englisch commodity) gesehen und als austauschbar betrachtet. Sehr kurzfristige Denkweise welche außen vor lässt, dass fehlende Mitarbeitermotivation und/oder Mitarbeiterfluktuation dem Unternehmen mittel- bis langfristig wesentlich teurer kommt, als eine kurzfristige Investition in diese. Hier ist auch der Begriff der Softwarefabrik (Software Factory) anzuführen, der Versuch die Softwareentwicklung zu automatisieren und den Programmierer als austauschbaren Produktionsfaktor zu betrachten. Dies berücksichtigt allerdings nur unzureichend, dass die Softwareentwicklung zu einem großen Teil ein kreativer, künstlerischer Prozess ist, der Freiraum und optimalerweise auch hohe Entfaltungsmöglichkeit sowie (optimalerweise intrinsische) Motivation des Entwicklers voraussetzt. Ferner gilt es zu bedenken, dass Mitarbeiter über die Zeit viel Erfahrung bei der Arbeit an einem Produkt aufbauen, welche dem Unternehmen zu einem großen Teil verloren geht, wenn denn die Person die Unternehmung verlässt. Eine weitere Dimension ist die Unterscheidung zwischen Management nach „englischer Theorie“ und Management nach „spanischer Theorie“. Beim „englischen Führungsstil“ geht das Management davon aus es gäbe nur eine feste Menge von Werten. Beim „spanischen Ansatz“ geht man davon aus, dass Werte durch Genialität und Technologie geschaffen werden können. Die Analogie dieser beiden Wertetheorien beruht auf Beobachtungen wie die ehemaligen Kolonialmächte England und Spanien mit Ihren Kolonien umgingen, um maximalen Profit zu erlangen (die Spanier haben erkannt, dass ihr Vorgehen zu mehr Profit führt). Dem Muster kann durch einen Balanced Scorecard-Ansatz oder Management nach „spanischer Wertetheorie“ begegnet werden (englisch Management by numbers).

Angst vor Erfolg: Oder auch: „Atmosphäre der Angst“: das Management sorgt für eine verängstigte, defensive Atmosphäre (wie ein Fußballteam welches nur das eigene Tor verteidigt ohne Bestrebungen zu haben, selbst ein Tor zu schießen). In einer Kultur voller Angst kann kaum etwas Konstruktives entstehen. Auch etwas Gutes erstellende Personen brechen ihr Vorhaben ab, weil sie davon ausgehen, sie verlieren sowieso oder die gute Lösung wird nicht honoriert bzw. als schlecht dargestellt. Unternehmen unter Angst wirken gelähmt und versäumen es, neue Märkte und Lösungen aktiv anzugehen. Sowohl ganze Unternehmungen als auch Abteilungen oder einzelne Personen verlieren so ihre Wettbewerbsfähigkeit. Angst durch Erfolge aufzufallen und so den Argwohn der Kollegen oder des Managements auf sich zu ziehen (nicht selten sehen schlechte Manager in sehr guten Angestellten eine Gefahr, eine Konkurrenz auf ihre Position) verhindert ebenfalls, dass Mitarbeiter und Unternehmungen ihre volle Leistungsfähigkeit abrufen. Typische Aussage: „Ich mache das heimlich. Es ist zwar die beste Lösung, ich will aber nicht, dass der Chef davon erfährt.“ (englisch Fear Of Success)

Falscher System-Architekt: Das Management erkennt, dass es bei den Fähigkeiten der Programmierer große Unterschiede gibt. Es sucht sich eine Person aus, die vermeintlich überwältigende Fähigkeiten hat, sowohl bei der Software-Entwicklung als auch beim Umgang mit Leuten, gerade mit Personen, deren Qualifikation unterdurchschnittlich ist. Die Person wird mit einer hohen Erwartungshaltung des Managements eingesetzt, und ist häufig ein Architekt, oft aber auch ein anderer fachlicher Vorgesetzter. Bei der Auswahl werden interne Spezialisten nicht gefragt, das Management entscheidet selbst und alleine, obwohl es nur schwer selbst entscheiden kann, ob jemand ein guter Software-Entwickler ist. Lange Zeit läuft dies auch recht gut, da sich der vermeintliche Experte recht gut verkaufen kann, und sich auch verbal sehr geschickt auszudrücken weiß. Über die Zeit wird aber immer deutlicher, einerseits an der nicht eingetretenen Verbesserung der Software oder der gleichbleibenden schlechten Qualität der schlechten Programmierer, andererseits an einer Unzufriedenheit der guten Programmierer, dass die Erwartungen an den Architekten zu hoch waren. Er kann die blumigen, fast blinden Erwartungen in ihn nicht erfüllen (englisch Faux System Architects).

Crocodile Management: Projektleiter ist nur teilweise im Projekt anwesend und kümmert sich nur um Details die der Projektmitarbeiter nicht erledigt hat. Auftauchen, Maul aufreissen, Abtauchen

[Bearbeiten] Meta-Patterns

Programmer Experience Clumping: Unerfahrene Programmierer sind meistens bereit für eine relativ geringe Vergütung für eine Unternehmung zu arbeiten (z. B. aus Unwissenheit oder um dort Erfahrung zu sammeln). Häufig werden in solchen Unternehmungen die Programmierer vom Management nicht geschätzt (meistens in Firmen wo Management by numbers vorherrscht). Es liegen schlechte Arbeitsbedingungen vor. Die unerfahrenen Programmierer können sich nicht weiterentwickeln. Erfahrene Spezialisten sehen was passiert und können dies objektiv und kritisch einschätzen. Diese werden den Arbeitsplatz wechseln, um eine Herausforderung anzunehmen, in der die Programmierung besser verstanden und gute Arbeit gewürdigt wird. Dies produziert einen Gruppierungseffekt, in dem sich unerfahrene Programmierer in der Unternehmung gruppieren bzw. dort verbleiben, und die erfahrenen Leute sich woanders gruppieren. Es kommt zu einer hohen Fluktuation, bei der immer mehr gute Leute das Unternehmen verlassen. Ohne die Führung der erfahrenen Kollegen können die unerfahrenen Entwickler oder neu eingestellte Rookies sich nicht verbessern. Ein Teufelskreis entsteht, der auch dadurch verstärkt wird, dass der Arbeitgeber seine (vermeintlich weniger loyalen) Angestellten zu immer weniger Schulungen schickt, da er Angst hat, die Personen verlassen die Unternehmung sowieso und das Geld wäre fehlinvestiert. Irgendwann weiß niemand im Unternehmen mehr, wie ein erfahrener, guter Entwickler aussieht bzw. es fehlt der Benchmark: die unerfahrenen Entwickler merken immer weniger, dass sie eigentlich unerfahren sind. Programmer Experience Clumping ist nicht auf Programmierer beschränkt, auch IT-fremde Fachabteilungen können betroffen sein. Ein Derivat des Anti-Pattern ist, dass die guten Leute aus Bequemlichkeit oder anderen persönlichen Gründen zwar in der Unternehmung verbleiben, ihre enorme Leistungsfähigkeit allerdings so drosseln, dass sie nur noch ein kleines Stück besser sind als die schlechten Mitarbeiter. Da dies ausreicht, um sich abzugrenzen und die Position zu sichern, schöpfen die guten Mitarbeiter bei weitem ihr Potential nicht aus. Dies ist letztendlich für alle Beteiligten, vor allem aber für die Unternehmung, sehr bedenklich.

Zersetzung: Gewollte oder ungewollte Nutzung einer Vielzahl von Anti-Pattern 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 einer anderen involvierten Partei schaden möchte (englisch Corrosion).

[Bearbeiten] Literatur

  • Frederick P. Brooks: Vom Mythos des Mann-Monats: Essays über Software-Engineering. mitp, Bonn 2003, ISBN 3-8266-1355-4.
  • William J. Brown et al.: Anti-patterns. Refactoring Software, Architecture and Projects in Crisis. John Wiley & Sons, New York 1998, ISBN 0471197130.
  • Martin Fowler: Refactoring: Improving the Design of Existing Code. Addison-Wesley, Reading/Massachusetts 1999, ISBN 0201485672.
  • Joshua Kerievsky: Refactoring to Patterns. Addison-Wesley, Boston 2004, ISBN 0321213351.
  • Bruce A. Tate: Bitter Java. Manning, Greenwich/Connecticut 2002, ISBN 193011043X.
  • Bruce A. Tate et al.: Bitter EJB. Manning, Greenwich/Connecticut 2003, ISBN 1930110952.
  • Gerald M. Weinberg: Psychologie des Programmierers. mitp, Bonn 2004, ISBN 3-8266-1465-8.

[Bearbeiten] Weblinks

Persönliche Werkzeuge