Mais conteúdo relacionado

Último(20)

Refactoring: Mythen & Fakten

  1. .NET User Group Bern Johnny Graber http://www.JGraber.ch JG@JGraber.ch Follow dnugbe on twitter http://www.dnug-bern.ch/rss.aspx
  2. DNUG Bern Regionalsponsoren
  3. DNUG Bern Sachsponsoren
  4. Heutiges Twitter-Hashtag #dnugbemix
  5. Über Johnny Graber • SW Ingenieur @ FMH, Bern – E-Logbuch und Fortbildungsplattform • Web: http://www.JGraber.ch • Twitter: @j_graber Hinweis: Verwendung für eigene Präsentationen nur mit Einverständnis des Autors
  6. Agenda • Mythen & Fakten • Praxisbeispiel • Ressourcen
  7. MYTHEN & FAKTEN
  8. Mythen • Refactoring ist unnötig da der «Big Rewrite» unsere Probleme lösen wird • Wenn es nicht defekt ist macht es keinen Sinn es zu reparieren • Planlos entwickeln ist kein Problem da Refactoring meinen Code verbessern wird • Refactoring geht auch ohne Tests • Refactoring ist immer angebracht
  9. Motivationskurve
  10. Beta Version
  11. Version 1
  12. Version n
  13. Neustart?
  14. Netscape 0 10 20 30 40 50 60 70 80 90 94 95 96 97 98 99 00 01 02
  15. Erfolg des «Big Rewrite» 0 10 20 30 40 50 60 70 80 90 94 95 96 97 98 99 00 01 02
  16. Big Rewrite • Schlagen meistens fehl • Der Kunde will nicht warten – Auf Funktionalität die er bereits hat • Probleme werden sich wiederholen • Aufwand wird unterschätzt • Kosten explodieren
  17. Wunsch
  18. Refactoring • Beibehalten der Funktionalität • Korrektur der Struktur • Kann Probleme lösen durch – Bessere Namensgebung – Reduktion der Komplexität – Wiederverwendung von Code
  19. Refactoring Katalog • Von Martin Fowler • >45 Refactorings http://www.refactoring.com/catalog/ • Definiert eine gemeinsame Sprache
  20. Oft verwendete Refactorings • Rename Method • Extract Method • Move Method • Extract Interface • Form Template Method • Reverse Conditional • Introduce Parameter Object
  21. Wann? • Funktionalität soll beibehalten werden • Technologie bleibt gleich • Weiterentwicklung geplant • Schrittweises vorgehen möglich
  22. Wann nicht? • Aktuelle Funktionalität passt nicht • Technologiewechsel vorgesehen • End-of-Life absehbar • Keine Ressourcen vorhanden • Ziel unbekannt • Qualität egal
  23. Kein Refactoring, wenn… • … keine Tests vorhanden sind • … Funktionalität verändert wird • … einfach etwas ausprobiert werden soll
  24. PRAXISBEISPIEL
  25. Vorbereitung • Ziel klären • Umfang reduzieren • Tests schreiben – TDD oder Test-First: Direkt zu Refactoring
  26. Characterization Test • Dient zum Verstehen von Code • Ermöglicht Funktionserhalt • Warnt vor unbeabsichtigten Änderungen • Startet bei bestehendem Code – Geht auch mit Legacy Code
  27. Ausgangslage • Alles 1 Methode • Viele Regions • Keine Kommentare
  28. 1. Test Assert.AreEqual failed. Expected:<>. Actual:<a>.
  29. 1. Test korrigiert Success
  30. 2. Test Assert.AreEqual failed. Expected:<>. Actual:<Ba>.
  31. 2. Test korrigiert Success
  32. Weitere Tests
  33. Wie weiter mit den Tests? • Behalten? – Bessere Namen nötig – Refactoring der Tests – Commit wenn OK • Wegwerfen? – Tests bleiben wie sie sind
  34. Refactoring der Tests • Rename Method • Extract Method – Statt Code zu kopieren • Wirklich nur Tests verändern!
  35. Refactoring der Tests
  36. Refactoring der Methode • Namensgebung überprüfen – Methode – Parameter – Variablen • Extract Method • Auskommentierten Code löschen
  37. Refactoring der Methode
  38. Bugfixes nötig? • Erst Refactoring abschliessen • Tests laufen lassen • Commit wenn alles OK • Dann erst Bugfixes beginnen
  39. Wozu dies alles? • Kleinere Methoden – sind einfacher zu verstehen – lassen sich einfacher wiederverwenden • Tests – belegen den Funktionserhalt • Basis für weitere Verbesserungen • Refactoring ist der Weg, nicht das Ziel
  40. RESSOURCEN
  41. Bücher goo.gl/NkcDM goo.gl/dCgsS goo.gl/fPtvT goo.gl/VkgbI
  42. Videos • Therapeutic Refactoring (Katrina Owen) http://goo.gl/JUKsm • Go Ahead, Make a Mess (Sandi Metz) http://goo.gl/10ybu
  43. Tools • Können einem viele Arbeit abnehmen • ReSharper: http://www.jetbrains.com/resharper/ • Moq: https://github.com/Moq/moq • TypeMock: http://www.typemock.com/
  44. Fragen und Diskussion