SlideShare ist ein Scribd-Unternehmen logo
.NET
User
Group
Bern
Johnny Graber
http://www.JGraber.ch
JG@JGraber.ch
Follow dnugbe on twitter
http://www.dnug-bern.ch/rss.aspx
DNUG Bern Regionalsponsoren
DNUG Bern Sachsponsoren
Heutiges Twitter-Hashtag
#dnugbemix
Ü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
Agenda
• Mythen & Fakten
• Praxisbeispiel
• Ressourcen
MYTHEN & FAKTEN
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
Motivationskurve
Beta Version
Version 1
Version n
Neustart?
Netscape
0
10
20
30
40
50
60
70
80
90
94 95 96 97 98 99 00 01 02
Erfolg des «Big Rewrite»
0
10
20
30
40
50
60
70
80
90
94 95 96 97 98 99 00 01 02
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
Wunsch
Refactoring
• Beibehalten der Funktionalität
• Korrektur der Struktur
• Kann Probleme lösen durch
– Bessere Namensgebung
– Reduktion der Komplexität
– Wiederverwendung von Code
Refactoring Katalog
• Von Martin Fowler
• >45 Refactorings
http://www.refactoring.com/catalog/
• Definiert eine gemeinsame Sprache
Oft verwendete Refactorings
• Rename Method
• Extract Method
• Move Method
• Extract Interface
• Form Template Method
• Reverse Conditional
• Introduce Parameter Object
Wann?
• Funktionalität soll beibehalten werden
• Technologie bleibt gleich
• Weiterentwicklung geplant
• Schrittweises vorgehen möglich
Wann nicht?
• Aktuelle Funktionalität passt nicht
• Technologiewechsel vorgesehen
• End-of-Life absehbar
• Keine Ressourcen vorhanden
• Ziel unbekannt
• Qualität egal
Kein Refactoring, wenn…
• … keine Tests vorhanden sind
• … Funktionalität verändert wird
• … einfach etwas ausprobiert werden soll
PRAXISBEISPIEL
Vorbereitung
• Ziel klären
• Umfang reduzieren
• Tests schreiben
– TDD oder Test-First: Direkt zu Refactoring
Characterization Test
• Dient zum Verstehen von Code
• Ermöglicht Funktionserhalt
• Warnt vor unbeabsichtigten Änderungen
• Startet bei bestehendem Code
– Geht auch mit Legacy Code
Ausgangslage
• Alles 1 Methode
• Viele Regions
• Keine
Kommentare
1. Test
Assert.AreEqual failed.
Expected:<>. Actual:<a>.
1. Test korrigiert
Success
2. Test
Assert.AreEqual failed.
Expected:<>. Actual:<Ba>.
2. Test korrigiert
Success
Weitere Tests
Wie weiter mit den Tests?
• Behalten?
– Bessere Namen nötig
– Refactoring der Tests
– Commit wenn OK
• Wegwerfen?
– Tests bleiben wie sie sind
Refactoring der Tests
• Rename Method
• Extract Method
– Statt Code zu kopieren
• Wirklich nur Tests verändern!
Refactoring der Tests
Refactoring der Methode
• Namensgebung überprüfen
– Methode
– Parameter
– Variablen
• Extract Method
• Auskommentierten Code löschen
Refactoring der Methode
Bugfixes nötig?
• Erst Refactoring abschliessen
• Tests laufen lassen
• Commit wenn alles OK
• Dann erst Bugfixes beginnen
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
RESSOURCEN
Bücher
goo.gl/NkcDM
goo.gl/dCgsS
goo.gl/fPtvT goo.gl/VkgbI
Videos
• Therapeutic Refactoring (Katrina Owen)
http://goo.gl/JUKsm
• Go Ahead, Make a Mess (Sandi Metz)
http://goo.gl/10ybu
Tools
• Können einem viele Arbeit abnehmen
• ReSharper:
http://www.jetbrains.com/resharper/
• Moq:
https://github.com/Moq/moq
• TypeMock:
http://www.typemock.com/
Fragen und Diskussion

Weitere ähnliche Inhalte

PPTX
TDD mit ABAP Units
PPTX
Das funktionierte doch schon einmal! - JUnit Testing in XPages
PDF
Swk vortrag metriken
PDF
Magento 2 Zertifizierung - Wissenswertes und ein paar Tipps
PDF
PHP mit Paul Bocuse
PDF
Unit Tests für Totalverweigerer
PDF
10 Dinge die ich an dir hasse - Stolpersteine in der Webentwicklung
PDF
Beyond Agile - when Freedom grows to Quality and Speed
TDD mit ABAP Units
Das funktionierte doch schon einmal! - JUnit Testing in XPages
Swk vortrag metriken
Magento 2 Zertifizierung - Wissenswertes und ein paar Tipps
PHP mit Paul Bocuse
Unit Tests für Totalverweigerer
10 Dinge die ich an dir hasse - Stolpersteine in der Webentwicklung
Beyond Agile - when Freedom grows to Quality and Speed

Ähnlich wie Refactoring: Mythen & Fakten (20)

PDF
Lean Development = Überdrehter Motor in der Entwicklung?
PPTX
Agile Verträge
PDF
Ringvorlesung: FIO Systems AG stellt Projektziel zum Thema Software Design Pa...
PDF
Software-Entwicklung Im Team
PDF
Continuous Integration / Deployment mit Jenkins CI
PDF
23 Dinge, die Sie über Software-Entwicklung in Teams wissen sollten.
PDF
Bi testing media_factory_0.10
PPTX
XING Agile QA
PDF
Einführung Vorgehensmodelle und Agile Software Entwicklung
PDF
Agile Teamarbeit - wie Startups Projekte managen und die Zusammenarbeit fördern
PDF
Perl Renaissance Reloaded
PDF
Regressionstests in Webprojekten - IPC12SE
PDF
Agiles Testing
PDF
Git class german / english
PPT
objectiF extrem
PDF
Magazin-Relaunch bei Chefkoch
PPTX
Coderetreat Vorlage
PDF
DWX 2017 - GIT im Leben eines VS Entwicklers
PDF
Deployment
PDF
Die 7 Wege zum Clean Code
Lean Development = Überdrehter Motor in der Entwicklung?
Agile Verträge
Ringvorlesung: FIO Systems AG stellt Projektziel zum Thema Software Design Pa...
Software-Entwicklung Im Team
Continuous Integration / Deployment mit Jenkins CI
23 Dinge, die Sie über Software-Entwicklung in Teams wissen sollten.
Bi testing media_factory_0.10
XING Agile QA
Einführung Vorgehensmodelle und Agile Software Entwicklung
Agile Teamarbeit - wie Startups Projekte managen und die Zusammenarbeit fördern
Perl Renaissance Reloaded
Regressionstests in Webprojekten - IPC12SE
Agiles Testing
Git class german / english
objectiF extrem
Magazin-Relaunch bei Chefkoch
Coderetreat Vorlage
DWX 2017 - GIT im Leben eines VS Entwicklers
Deployment
Die 7 Wege zum Clean Code
Anzeige

Mehr von NETUserGroupBern (20)

PDF
Large Language Models, Data & APIs - Integrating Generative AI Power into you...
PDF
AAD und .NET
PDF
SHIFT LEFT WITH DEVSECOPS
PDF
Securing .NET Core, ASP.NET Core applications
PDF
Application Security in ASP.NET Core
PDF
Ruby und Rails für .NET Entwickler
PPTX
Einführung in RavenDB
PDF
What Doctors Can Teach Us on Continuous Learning
PDF
Entity Framework Core - Der Umstieg auf Core
PDF
Weiches Zeugs für harte Jungs und Mädels
PDF
Änderungen im Cardinality Estimator SQL Server 2014
PPTX
Rest Fundamentals
PDF
AngularJs
PDF
Pragmatische Anforderungen
PPTX
Einführung in MongoDB
PDF
What the hell is PowerShell?
PPTX
Know your warm up
PDF
BDD mit Machine.Specifications (MSpec)
PDF
Versionskontrolle mit Git
PDF
.NETworking Workshop Design Thinking
Large Language Models, Data & APIs - Integrating Generative AI Power into you...
AAD und .NET
SHIFT LEFT WITH DEVSECOPS
Securing .NET Core, ASP.NET Core applications
Application Security in ASP.NET Core
Ruby und Rails für .NET Entwickler
Einführung in RavenDB
What Doctors Can Teach Us on Continuous Learning
Entity Framework Core - Der Umstieg auf Core
Weiches Zeugs für harte Jungs und Mädels
Änderungen im Cardinality Estimator SQL Server 2014
Rest Fundamentals
AngularJs
Pragmatische Anforderungen
Einführung in MongoDB
What the hell is PowerShell?
Know your warm up
BDD mit Machine.Specifications (MSpec)
Versionskontrolle mit Git
.NETworking Workshop Design Thinking
Anzeige

Refactoring: Mythen & Fakten