Codierung von Katas zum Üben des Refactorings von Legacy-Code

123

Ich habe mich in den letzten Monaten sehr für das Codieren von Katas interessiert. Ich glaube, sie sind eine großartige Möglichkeit, meine Programmierkenntnisse zu verbessern und die Qualität des Codes zu verbessern, den ich im Job schreibe.

Es gibt zahlreiche Orte, an denen Katas zu finden ist. mögen..

http://codekata.pragprog.com/

http://schuchert.wikispaces.com/Katas

http://www.codingdojo.org/

Ich habe festgestellt, dass dies ausgezeichnete Aufbewahrungsorte für Katas sind ... meine Versuche, einige von ihnen zu besuchen, waren immens lohnend.

Ich habe jedoch das Gefühl, dass alle Kata, die ich bisher gesehen habe, ein kurzes Kommen haben. Keiner von ihnen scheint mir zu erlauben, das Refactoring von schlechtem Code zu üben. Es ist großartig zu lernen, wie man beim ersten Mal sauberen Code schreibt ... aber in meinem aktuellen Job habe ich nicht allzu viele Möglichkeiten, neuen Code zu schreiben. Vielmehr kämpfe ich oft gegen Legacy-Code und versuche herauszufinden, wie man Module umgestaltet, Abhängigkeiten beseitigt und die Kopplung verringert.

Daher bin ich auf der Suche nach ein paar Katas, mit denen ich meine Fähigkeiten verbessern kann, Legacy-Code umzugestalten und in sauberen Code umzuwandeln.

Kennt jemand etwas, das bereits existiert? Ich weiß, dass ich während meiner Arbeit viel Übung darin habe ... aber ich möchte meine Fähigkeiten so verbessern, dass ich schnell erkennen kann, wie man Abhängigkeiten aufteilt und Bedenken in Klassen voneinander trennt viel zu viel tun.

Mezoid
quelle
+1 nette Frage, mit nützlichen Informationen zur Verfügung gestellt
KLE
Ich wünschte, ich könnte mehr als +1 geben :) Tolle Frage. Ich habe noch nie über diese Art der Programmierpraxis
nachgedacht
Ich würde gerne jemanden sehen, der tatsächlich ein kleines System speziell für das Refactoring von Legacy-Code veröffentlicht ... etwas, das Teile enthält, in denen die Refactorings der Michael Feathers glänzen würden. Ich habe nach so etwas mehr als einer Woche gesucht. jemand? jemand? :)
Derick Bailey
Gute Frage. Sie können üben, was @Ryan in seiner Antwort erwähnt hat. Ich schlage vor, ein Giithub-Repository zu erstellen: github.com/garora/TDD-Katas Sie können in die Geschichte eingehen und überprüfen, wie diese Katas überarbeitet werden.
Gaurav Aroraa

Antworten:

92

Ich kenne keine Site, die sie direkt katalogisiert, aber eine Strategie, die ich gelegentlich angewendet habe, ist folgende:

  1. Finden Sie auf sourceforge ein altes, kleines, nicht gepflegtes Open Source-Projekt
  2. Laden Sie es herunter und lassen Sie es kompilieren / erstellen / ausführen
  3. Lesen Sie die Dokumentation und machen Sie sich ein Bild vom Code
  4. Verwenden Sie die Techniken in Effektiv mit Legacy-Code arbeiten , um einen Teil davon zu testen
  5. Refactor dieses Stück, vielleicht Fehler beheben und Funktionen auf dem Weg hinzufügen
  6. Wiederholen Sie die Schritte 4 bis 6

Wenn Sie ein Teil finden, das besonders herausfordernd war, werfen Sie Ihre Arbeit weg und wiederholen Sie sie einige Male, um Ihre Fähigkeiten zu stärken.

Hiermit wird nicht nur das Refactoring geübt, sondern auch andere Fähigkeiten wie das Lesen, Testen und Behandeln von Build-Prozessen.

Das schwierigste Problem besteht darin, ein Projekt zu finden, an dem Sie interessiert sind, um weiterarbeiten zu können. Das letzte, an dem ich gearbeitet habe, war eine Python-Bibliothek für die genetische Programmierung, und das aktuelle, an dem ich arbeite, ist eine IRC-Bibliothek für Java.

Ryan
quelle
4
+1 sehr interessanter Vorschlag. Wie Sie sagten, ist es schwierig, ein geeignetes Projekt zu finden. Ich werde diesem eine Menge Aufmerksamkeit schenken. Vielleicht, wenn ich oder andere einige finden, die sehr nützlich sind, könnte es irgendwo als Kata gespeichert und dokumentiert werden ...
Mezoid
3
"Umgang mit Legacy-Code" - meinen Sie "Effektiv mit Legacy-Code arbeiten"? amazon.com/Working-Effectively-Legacy-Michael-Feathers/dp/…
TrueWill
1
Ja, ich meine "Effektiv mit Legacy-Code arbeiten". Danke für den Fang!
Ryan
21

Ich fühle mich wie ein Nekromant, der auf einen so alten Thread antwortet, aber es gibt eine Sache, die für eine würdige Ergänzung sorgen würde - Legacy Code Retreat .

Die Idee ist, ein Code-Retreat mit Legacy-Code durchzuführen und zu versuchen, genau die Techniken für den Umgang mit solchen zu üben, aber ich kann nichts sehen, was Sie daran hindern würde, den Code einfach zu verwenden und selbst damit zu üben. Wenn Sie es nur zum Erstellen eines Goldenen Meisters verwenden, erhalten Sie eine Stunde Arbeit, und Sie können noch viel mehr tun. Wenn Ihre Kata normalerweise ungefähr 2 Stunden dauert, würde ich sagen, wenn Sie das, was normalerweise bei LCR passiert, in Kata aufteilen, erhalten Sie vier verschiedene Dinge, an denen Sie arbeiten können.

Es gibt ein GitHub-Repository des Autors der Idee, JB Rainsberger, das ein einfaches Legacy-System enthält, mit dem Sie arbeiten sollen, Trivia Game.

Aus meiner Erfahrung als Organisator / Teilnehmer haben die Leute das wirklich gemocht und es war aufschlussreich zu sehen, was ein Problem in einem Legacy-Code sein kann und wohin Ihr Refactoring Sie in die Irre führen kann (und wie!). Hier ist noch ein Bericht von Andreas Leidig, wie es aussieht .

LAFK sagt Reinstate Monica
quelle
20

Emily Bache hat ein Github-Repository mit einigen Refactoring-Katas: Emily Baches Refactoring Kata Repo . Es gibt Varianten von KataYahtzee und KataTennis zum Refactor. Außerdem hat sie eine Variante der Gilded Rose Kata, die als Refactoring-Kata konzipiert wurde.

Außerdem hat sie den Rennwagen Katas in ihrem Repo: Rennwagen Kata . Die Race Car Katas beinhalten auch gute Übungen zum Refactoring.

Diese Kata haben den Code in mehreren Sprachen:

  • C ++
  • C #
  • Java
  • Javascript
  • Python
  • Rubin
Steve Clanton
quelle
4
Emily hat auch das Buch The Coding Dojo Handbook veröffentlicht, in dem die Katas aufgelistet sind und beschrieben wird, wie Sie Ihre eigenen Coding-Dojos starten und ausführen. Ich kann das Buch nur empfehlen: leanpub.com/codingdojohandbook
Christian Maslen
1
Ich habe ihr Buch verwendet, um Dojos zu betreiben, und ich stimme zu, dass es eine ausgezeichnete Ressource ist. Emily hat auch einen verwandten Kurs unter pluralsight.com/courses/the-coding-dojo.
Steve Clanton