Refactoring ist eine unverzichtbare Praxis in der Webentwicklung. Sie bildet die Grundlage für die langfristige Stabilität und Wartbarkeit deines Projekts.
Code zu schreiben ist nur der Anfang des Prozesses. Dein Code muss im Laufe der Zeit ständig gepflegt, erweitert und angepasst werden. Gerade in der Zusammenarbeit mit anderen Entwickler:innen, ist das von entscheidender Bedeutung. Ohne Refactoring wird der Code im Laufe der Zeit unübersichtlich, schwer verständlich und zunehmend fehleranfällig.
Refactoring hilft dir dabei, den bestehenden Code zu optimieren, Funktionen schneller hinzuzufügen und Fehler leichter zu beheben.
Egal, ob du erst mit dem Coden begonnen hast oder bereits viele Jahre Erfahrung gesammelt hast, Refactoring ist eine Fähigkeit, die wir alle erlernen und kontinuierlich verbessern können.
Eine praktische Übung, die dir auf unterhaltsame Weise zeigt, wie du diese Fähigkeit trainieren kannst, ist die Gilded Rose Kata.
Best Practices für Refactoring
Bevor du dich in die Gilded Rose Kata stürzt, solltest du ein paar bewährte Praktiken für das Refactoring verinnerlichen:
- Kontinuität: Überarbeite deinen Code regelmäßig, nicht erst, wenn etwas kaputtgegangen ist. Kontinuierliches Refactoring hilft, Codepflege zur Gewohnheit zu machen.
- Sorgfältige Planung: Plane dein Refactoring im Voraus und kalkuliere ausreichend Zeit ein. Vermeide überhastete Änderungen, die zu Fehlern führen könnten.
- Kleine Schritte: Breche das Refactoring in kleine, gut getestete Schritte auf. Dies minimiert das Risiko von Fehlern und erleichtert die Nachverfolgung der Änderungen.
- Code Reviews: Lasse deine Änderungen von deinen Kolleg:innen überprüfen. Ein frischer Blick kann dazu beitragen, Fehler oder Verbesserungspotenziale aufzudecken.
- Dokumentation: Aktualisiere die Dokumentation, um sicherzustellen, dass sie den aktuellen Code widerspiegelt. Kommentiere Änderungen, um anderen Entwickler:innen zu helfen, deine Entscheidungen nachzuvollziehen.
- Versionskontrolle: Nutze Versionskontrollsysteme wie Git, um deine Änderungen nachzuverfolgen. Dies ermöglicht es dir, zu früheren Versionen zurückzukehren, falls etwas schiefgeht.
Gilded Rose Kata
Die Gilded Rose Kata wurde von Terry Hughes entwickelt. Sie simuliert ein Szenario, in dem ein Shop eine Liste von Produkten mit verschiedenen Verfallsdaten und Qualitäten verwaltet.
Deine Aufgabe ist es, den Code so anzupassen, dass Du neue Produkte hinzufügen kannst. Das soll geschehen, ohne die bestehenden Produkte zu beeinträchtigen.
Über das öffentliche GitHub Repository von Emily Bache, kannst du den Code einsehen und ihn lokal ablegen. Dieses Repository enthält die Gilded Rose Kata in den unterschiedlichsten Programmiersprachen.
Du kannst auswählen, ob du sie in deiner Programmiersprache bearbeiten oder die Herausforderung annimmst und sie in einer – noch – unbekannten Sprache absolvieren möchtest.
Die Ausgangssituation
Lies dir zuerst die README.md und die GildedRoseRequirements.txt durch. Die Requirements dienen dir als Grundlage für deine Tests. Entscheide dich danach für eine Programmiersprache und öffne den entsprechenden Ordner.
Schaue dir nun den Ausgangscode der Gilded Rose Kata an.
Der Code ist komplex, schwer verständlich und wenig wartbar. Dies ist ein typisches Beispiel für Code, der dringend refactored werden muss. Ähnliches kann dir passieren, wenn du bestehenden Programmcode von anderen Teams übernimmst oder auf Legacy Code stößt.
Den Begriff Legacy Code verwenden wir, um existierenden Code zu beschreiben, der schwer verständlich und schwer zu warten ist. Gründe hierfür können das Alter, mangelnde Dokumentation, unzureichende Tests oder eine komplexe Struktur sein. Manchmal auch alles zusammen. Legacy Code bringt in der Softwareentwicklung oft Herausforderungen mit sich.
Refactoring-Schritte
Das Refactoring der Gilded Rose Kata erfolgt in mehreren Schritten:
- Verständnis des bestehenden Codes: Analysiere den ursprünglichen Code und verstehe, wie er funktioniert. Du kannst Kommentare hinzufügen, die dir beim Zurechtfinden helfen.
- Testgetriebene Entwicklung (TDD): Schreibe Tests, um sicherzustellen, dass Deine Änderungen keine unerwünschten Nebeneffekte haben. Nutze hierfür die GildedRoseRequirements.txt als Grundlage.
- Schrittweise Verbesserungen: Refaktorisiere den Code in kleinen, überschaubaren Schritten. Stelle sicher, dass der Code nach jedem Schritt immer noch korrekt funktioniert. Lasse deine Tests regelmäßig durchlaufen.
- Benennung und Kommentierung: Verbessere die Benennung von Variablen und füge Kommentare hinzu, um den Code verständlicher zu machen.
- Füge das neue Produkt zum Sortiment: Sobald der Code verständlich und übersichtlich strukturiert ist, kannst du das neue Produkt hinzufügen (siehe GildedRoseRequirements.txt). Vergiss nicht, den Test dafür zu erstellen.
- Schaue dir andere Lösungen an: Wenn du mit dem Refactoring zufrieden bist, schaue dir Lösungen von anderen Entwickler:innen an. Du erweiterst dein Blickfeld, kannst andere Lösungen kritisch hinterfragen und dir das ein oder andere abschauen.
- Wenn möglich, hole dir Feedback ein: Frage andere Entwickler:innen nach ihrer Meinung zu deiner Lösung. Passe deinen Code gegebenenfalls an.
- Bonus Aufgabe: Führe die Übung in einer anderen Sprache aus, nachdem du sie in deiner Sprache absolviert hast. Du wirst überrascht sein, wie viel du dabei lernen wirst. Zudem bereitet dich das auf die Situation vor, bei der Arbeit Programmcode in einer unbekannten Sprache bearbeiten zu müssen.
Fazit
Das Refactoring ist eine Kunst, die Zeit und Übung erfordert. Mit der Gilded Rose Kata kannst du diese Fähigkeiten entwickeln und verfeinern.
Nutze die Möglichkeit, die dir diese Übung bietet und füge das Refactoring zu deinem Repertoire hinzu. Du wirst sehen, wie dein zukünftiger Programmcode immer besser wird.