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

Ähnlich wie Refactoring: Mythen & Fakten

Neuschreiben nicht empfohlen
Neuschreiben nicht empfohlenNeuschreiben nicht empfohlen
Neuschreiben nicht empfohlen
Dirk Haun
 
Lean Development = Überdrehter Motor in der Entwicklung?
Lean Development = Überdrehter Motor in der Entwicklung?Lean Development = Überdrehter Motor in der Entwicklung?
Lean Development = Überdrehter Motor in der Entwicklung?
Matthias Bohlen
 
Agile Verträge
Agile VerträgeAgile Verträge
Agile Verträge
Pierre E. NEIS
 
Ringvorlesung: FIO Systems AG stellt Projektziel zum Thema Software Design Pa...
Ringvorlesung: FIO Systems AG stellt Projektziel zum Thema Software Design Pa...Ringvorlesung: FIO Systems AG stellt Projektziel zum Thema Software Design Pa...
Ringvorlesung: FIO Systems AG stellt Projektziel zum Thema Software Design Pa...
Community ITmitte.de
 
Software-Entwicklung Im Team
Software-Entwicklung Im TeamSoftware-Entwicklung Im Team
Software-Entwicklung Im Team
Stephan Schmidt
 
Continuous Integration / Deployment mit Jenkins CI
Continuous Integration / Deployment mit Jenkins CI Continuous Integration / Deployment mit Jenkins CI
Continuous Integration / Deployment mit Jenkins CI
Florian Bosselmann
 
23 Dinge, die Sie über Software-Entwicklung in Teams wissen sollten.
23 Dinge, die Sie über Software-Entwicklung in Teams wissen sollten.23 Dinge, die Sie über Software-Entwicklung in Teams wissen sollten.
23 Dinge, die Sie über Software-Entwicklung in Teams wissen sollten.
Stephan Schmidt
 
Bi testing media_factory_0.10
Bi testing media_factory_0.10Bi testing media_factory_0.10
Bi testing media_factory_0.10
inovex GmbH
 
XING Agile QA
XING Agile QAXING Agile QA
XING Agile QA
XING AG
 
Einführung Vorgehensmodelle und Agile Software Entwicklung
Einführung Vorgehensmodelle und Agile Software EntwicklungEinführung Vorgehensmodelle und Agile Software Entwicklung
Einführung Vorgehensmodelle und Agile Software Entwicklung
Christian Baranowski
 
Agile Teamarbeit - wie Startups Projekte managen und die Zusammenarbeit fördern
Agile Teamarbeit - wie Startups Projekte managen und die Zusammenarbeit fördernAgile Teamarbeit - wie Startups Projekte managen und die Zusammenarbeit fördern
Agile Teamarbeit - wie Startups Projekte managen und die Zusammenarbeit fördern
Sascha Böhr
 
Perl Renaissance Reloaded
Perl Renaissance ReloadedPerl Renaissance Reloaded
Perl Renaissance Reloaded
Gregor Goldbach
 
Regressionstests in Webprojekten - IPC12SE
Regressionstests in Webprojekten - IPC12SERegressionstests in Webprojekten - IPC12SE
Regressionstests in Webprojekten - IPC12SE
Sebastian Bauer
 
Agiles Testing
Agiles TestingAgiles Testing
Agiles Testing
NEOMO GmbH
 
Git class german / english
Git class german / englishGit class german / english
Git class german / english
Kevin Read
 
objectiF extrem
objectiF extremobjectiF extrem
objectiF extrem
Olaf Lewitz
 
Magazin-Relaunch bei Chefkoch
Magazin-Relaunch bei ChefkochMagazin-Relaunch bei Chefkoch
Magazin-Relaunch bei Chefkoch
Per Bernhardt
 
Coderetreat Vorlage
Coderetreat VorlageCoderetreat Vorlage
Coderetreat Vorlage
Ramon Anger
 
DWX 2017 - GIT im Leben eines VS Entwicklers
DWX 2017 - GIT im Leben eines VS EntwicklersDWX 2017 - GIT im Leben eines VS Entwicklers
DWX 2017 - GIT im Leben eines VS Entwicklers
Marc Müller
 
Deployment
DeploymentDeployment
Deployment
Christian Händel
 

Ähnlich wie Refactoring: Mythen & Fakten (20)

Neuschreiben nicht empfohlen
Neuschreiben nicht empfohlenNeuschreiben nicht empfohlen
Neuschreiben nicht empfohlen
 
Lean Development = Überdrehter Motor in der Entwicklung?
Lean Development = Überdrehter Motor in der Entwicklung?Lean Development = Überdrehter Motor in der Entwicklung?
Lean Development = Überdrehter Motor in der Entwicklung?
 
Agile Verträge
Agile VerträgeAgile Verträge
Agile Verträge
 
Ringvorlesung: FIO Systems AG stellt Projektziel zum Thema Software Design Pa...
Ringvorlesung: FIO Systems AG stellt Projektziel zum Thema Software Design Pa...Ringvorlesung: FIO Systems AG stellt Projektziel zum Thema Software Design Pa...
Ringvorlesung: FIO Systems AG stellt Projektziel zum Thema Software Design Pa...
 
Software-Entwicklung Im Team
Software-Entwicklung Im TeamSoftware-Entwicklung Im Team
Software-Entwicklung Im Team
 
Continuous Integration / Deployment mit Jenkins CI
Continuous Integration / Deployment mit Jenkins CI Continuous Integration / Deployment mit Jenkins CI
Continuous Integration / Deployment mit Jenkins CI
 
23 Dinge, die Sie über Software-Entwicklung in Teams wissen sollten.
23 Dinge, die Sie über Software-Entwicklung in Teams wissen sollten.23 Dinge, die Sie über Software-Entwicklung in Teams wissen sollten.
23 Dinge, die Sie über Software-Entwicklung in Teams wissen sollten.
 
Bi testing media_factory_0.10
Bi testing media_factory_0.10Bi testing media_factory_0.10
Bi testing media_factory_0.10
 
XING Agile QA
XING Agile QAXING Agile QA
XING Agile QA
 
Einführung Vorgehensmodelle und Agile Software Entwicklung
Einführung Vorgehensmodelle und Agile Software EntwicklungEinführung Vorgehensmodelle und Agile Software Entwicklung
Einführung Vorgehensmodelle und Agile Software Entwicklung
 
Agile Teamarbeit - wie Startups Projekte managen und die Zusammenarbeit fördern
Agile Teamarbeit - wie Startups Projekte managen und die Zusammenarbeit fördernAgile Teamarbeit - wie Startups Projekte managen und die Zusammenarbeit fördern
Agile Teamarbeit - wie Startups Projekte managen und die Zusammenarbeit fördern
 
Perl Renaissance Reloaded
Perl Renaissance ReloadedPerl Renaissance Reloaded
Perl Renaissance Reloaded
 
Regressionstests in Webprojekten - IPC12SE
Regressionstests in Webprojekten - IPC12SERegressionstests in Webprojekten - IPC12SE
Regressionstests in Webprojekten - IPC12SE
 
Agiles Testing
Agiles TestingAgiles Testing
Agiles Testing
 
Git class german / english
Git class german / englishGit class german / english
Git class german / english
 
objectiF extrem
objectiF extremobjectiF extrem
objectiF extrem
 
Magazin-Relaunch bei Chefkoch
Magazin-Relaunch bei ChefkochMagazin-Relaunch bei Chefkoch
Magazin-Relaunch bei Chefkoch
 
Coderetreat Vorlage
Coderetreat VorlageCoderetreat Vorlage
Coderetreat Vorlage
 
DWX 2017 - GIT im Leben eines VS Entwicklers
DWX 2017 - GIT im Leben eines VS EntwicklersDWX 2017 - GIT im Leben eines VS Entwicklers
DWX 2017 - GIT im Leben eines VS Entwicklers
 
Deployment
DeploymentDeployment
Deployment
 

Mehr von NETUserGroupBern

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

Mehr von NETUserGroupBern (20)

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

Refactoring: Mythen & Fakten