Selbst bei fundierter Designplanung ist es schwierig, die Codequalität einer Anwendung bei fortschreitendem Lebenszyklus zu halten. Wachsende und sich ändernde Anforderungen verwässern das Design. In der Praxis sind viele Programme von Anfang an auf einem eher schwachen Design-Fundament aufgebaut, vorwiegend mangels Erfahrung bei den Designverantwortlichen. Refactoring ist eine Technik, die dabei hilft, die Qualität bestehenden Sourcecodes zu verbessern. Dabei spielen Aspekte wie strukturelle Integrität, Verantwortlichkeit, Einbeziehung des Compilers und Performanz eine wichtige Rolle. Refactoring bezeichnet einen Katalog von Massnahmen, die dabei helfen, den Code einer Applikation so umzustrukturieren, dass ein gutes und robustes Anwendungs-Design erreicht werden kann. Im Gegensatz zu Design-Patterns, die bereits vor der Implementierung gewinnbringend eingesetzt werden können, setzt Refactoring auf der Code-Basis auf. Insbesondere im Java-Umfeld existieren Werkzeuge und/oder Entwicklungsumgebungen, die den Programmierer bei der Tätigkeit des Umstruktierens unterstützen.
Anmerkung: Ausgewählte Refactorings werden in der Schulung diskutiert und beispielhaft implementiert. Anhand einer Fallstudie wird ein kleines Programm schrittweise von einem zweifelhaften in ein gutes Design überführt. In Gruppenübungen ist es Aufgabe der Teilnehmer, zu typischen Problemstellungen passende Refactorings zu finden.Für die Durchführung der Übung steht Ihnen eclipse zur Verfügung
Voraussetzung
Erfahrung mit objektorientierter Programmierung unbedingt erforderlich. Ein Besuch der Schulung über Design Patterns oder vergleichbares Wissen ist hilfreich.
Inhalt
- Refactoring im Software-Entwicklungsprozess: Vorgehen, Organisation, Code Ownership, Unit-Tests, Ausblick auf Extreme Programming, Toolunterstützung
- Bad Smells in Code
- Bad Smells in UML-Diagrams
- Typische Refactorings:
- Change Association
- Replace Conditionals with Polymorphism
- Decompose Conditional
- Convert Procedural Design to Objects
- Extract -Class, -Interface, -Method
- Introduce -Parameter Object, -Assertion, -Foreign Method
- Move -Field, -Method
- Replace Constructor with Factory Method
- Replace Inheritance with Delegation
- Replace Method with Method Object
- Replace Nested Conditional with Guard Clauses
- Angriffspunkte von Refactorings, Vergleich mit Design Patterns
- Reengineering Patterns:
- Most Valuable First
- Fix Problems, not Symptoms
- Keep it Simple
- Tie Code and Questions
- Write Tests to enable Evolution
- Grow your Test Base Incrementally
- Always have a running version
- Regression Test after every Change
- Distinguish Public from Published Interfaces
- Move Behaviour Close to Data
- Eliminate Navigation Code
- Code Metriken
- Ausblick: Refactorings für verteilte Systeme
Zielgruppe
Projektleiter, Designer, Softwareentwickler
Dauer
2 Tage
Teilnehmer
4 bis 10 Personen