Anti-Patterns Zuverlässige Software SS2009 Friedrich Gensicke
Gliederung 1. Einführung Was sind Anti Patterns? Unterschiede Design Pattern Anti Pattern Grundursachen Klassifizierung 2. Anti Patterns in der Software-Entwicklung 3. In der Software-Architektur 4. Im Projektmanagement 5. Zusammenfassung Anti-Pattern Friedrich Gensicke 2
Was sind Anti-Patterns? Einführung und Motivation Wie sollte man es nicht machen? Beschreibt eine Lösung zu einem Problem, die negative Folgen hat Gründe: zu wenig Wissen, geringe Erfahrung, falsches Muster, Besteht aus: Symptome, Konsequenzen, Lösungsvorschlag Anti-Pattern Friedrich Gensicke 3
Unterschiede zu Design-Pattern Einführung und Motivation Design Patterns geben Lösung zu Problem an Anti Patterns geben bessere Lösung zu geg. Lösung an Anti-Pattern Friedrich Gensicke 4
Grundursachen Einführung und Motivation Liegen in der Natur des Menschen Eile Teilnahmslosigkeit Engstirnigkeit Faulheit Geiz Ignoranz Hochmut Anti-Pattern Friedrich Gensicke 5
Klassifikation Einführung und Motivation Grundlage sind unterschiedliche Sichtweisen Entwickler: Programmierung Architekt: Struktur des Systems Manager: Organisation der Entwicklung Anti-Pattern Friedrich Gensicke 6
Anti-Patterns in der Software-Entwicklung Anti-Pattern Friedrich Gensicke 7
Cut-And-Paste Programming Starke Verbreitung Ähnlicher Code überall in Software zu finden Wenig erfahrene Programmierer Effiziente Code-Produktion Schlechte Dokumentation wieder verwendbarer Komponenten Neue Technologien Anti-Pattern Friedrich Gensicke 8
Cut-And-Paste Programming Konsequenzen Fehlerverteilung durch Cut-And-Paste Aufblähung von Reviews Keine Standardlösung zur Fehlerbehebung extreme Steigerung der Wartungskosten Anti-Pattern Friedrich Gensicke 9
Cut-And-Paste Programming Lösungsvorschlag Organisation des Codes in Bibliotheken Schritte des Refactoring: 1. Aufsuchen der ähnlichen Code-Segmente 2. Erstellen einer Standardversion 3. Einführung Konfigurationsmanagement Vorbeugende Maßnahmen Anti-Pattern Friedrich Gensicke 10
TheBlob Die Gott-Klasse Funktionalität liegt bei EINER Klasse Klassendiagramm: Eher bei prozeduralem Design auftretend Häufig Konsequenz iterativer Entwicklung Ungenutzter Code Lava-Flow AP Hauptgrund: fehlende OO-Architektur Anti-Pattern Friedrich Gensicke 11
TheBlob Die Gott-Klasse Konsequenzen Klasse ist Ansammlung verschiedenartiger Funktionen und Attribute geringe Kohäsion Fehlendes OO-Design: Klasse enthält main- Loop und sämtliche Funktionalität Zu komplex für Wiederverwendung und Testen Speicherplatzverschwendung Anti-Pattern Friedrich Gensicke 12
TheBlob Die Gott-Klasse Lösungsvorschlag Funktionalität auslagern kleine Klassen einbeziehen 1. Identifizieren und Katalogisieren der Funktionen 2. Ermitteln der richtigen Position und Klasse 3. Indirekte Assoziationen zwischen Klassen entfernen Anti-Pattern Friedrich Gensicke 13
Lava Flow Code Leichen Lava-ähnliche Entwicklungsstränge, die im System verbleiben Hauptsächlich in Forschungsprojekten Oft keine Erinnerung bei Entwicklern Teuer zu analysieren, Ressourcen verschwendend Anti-Pattern Friedrich Gensicke 14
Lava Flow Code Leichen Gründe Code aus F&E ohne Konfigurationsmanagement übernommen Einzelne Entwickler schreiben den Code Keine Architektur-getriebene Entwicklung Unkontrollierte Verteilung von unfertigem Code Anti-Pattern Friedrich Gensicke 15
Lava Flow Code Leichen Konsequenzen Undokumentierte, komplexe, wichtig aussehende Funktionen und Klassen Auskommentierter Code, to be replaced Ungenutzter Code Nicht möglich zu dokumentieren oder zu verstehen Anti-Pattern Friedrich Gensicke 16
Lava Flow Code Leichen Lösungsvorschlag Erstellung einer Architektur vor Implementierung (keine Änderungen) Überwachung der Umsetzung Versionskontrollsysteme Reengineering der Systemarchitektur Grundlage für Analyse Anti-Pattern Friedrich Gensicke 17
Anti-Patterns in der Software-Architektur Anti-Pattern Friedrich Gensicke 18
Architecture-By-Implication Fehlende Architektur bei Systemen unter Entwicklung Verzicht auf Grund von erfahrenen Architekten Architekturdefinitionen fehlen häufig in allen Bereichen Refactoring nach der Entwicklung Anti-Pattern Friedrich Gensicke 19
Architecture-By-Implication Konsequenzen Versteckte Risiken in Größe, Technologie und Komplexität Probleme erst spät im Projekt Mögliches Scheitern durch Schlechte Performanz Ausschweifende Komplexität Missverstandene Anforderungen Unkenntnis von neuen Technologien Anti-Pattern Friedrich Gensicke 20
Architecture-By-Implication Lösungsvorschlag Erstelle eine Architekturdefinition! Autor empfiehlt Methode nach GQM iterativer Prozess Vor allem bei neuen Technologien und Anforderungen Ständige Verfeinerung auch während der Entwicklung Anti-Pattern Friedrich Gensicke 21
Anti-Patterns im Software-Projektmanagement Anti-Pattern Friedrich Gensicke 22
Corncob - Quertreiber Corncob nach OMG allgemein schwierige Menschen Destruktives Verhalten Machtspielchen, Mobbing Nicht an der eigentlichen Arbeit interessiert Management unterstützt Corncobs unbewusst Verhärtete Fronten Anti-Pattern Friedrich Gensicke 23
Corncob Quertreiber Symptome und Konsequenzen Keine Entwicklungsfortschritte Corncob oftmals im Projektteam niemandem direkt untergeordnet Fehlender Entscheidungsfindungsprozess Anti-Pattern Friedrich Gensicke 24
Corncob Quertreiber Lösungsvorschlag Taktische Lösungen: Verantwortlichkeit verteilen Operative Lösungen: Individuelles Interview Freundliche Versetzung Strategische Lösungen: Die Corncob-Gruppe Leere Abteilung Rauswurf Anti-Pattern Friedrich Gensicke 25
Zusammenfassung und Bewertung Möglichkeit Probleme anhand der geg. Symptome zu entdecken Ursache der Probleme meist unbekannt Liefern dazu passende Lösungen durch Refactoring Können Scheitern von Software-Projekten verhindern Kenntnisse über Anti Patterns können Probleme vorbeugen Sensibilisierung Anti-Pattern Friedrich Gensicke 26
Literatur AntiPatterns Refactoring Software, Architectures and Projects in Crisis William J. Brown et al., 1998 Entwurfsmuster Elemente wiederverwendbarer objektorientierter Software Erich Gamma et al., 2004 Anti-Pattern Friedrich Gensicke 27
Vielen Dank für die Aufmerksamkeit! Anti-Pattern Friedrich Gensicke 28