Natural course of refactoring - Mix-IT Lyon 2014

41
www.bnsit.pl Natural Course of Refactoring. A refactoring workflow. Mariusz Sieraczkiewicz @ms_bnsit_pl http://msieraczkiewicz.blogspot.com 1

description

Doing refactoring seems to be obvious practice in a software development. In many teams times it is not being done at all. "We have no time to do it!". "We are not allowed". "We don't know where to start and how to do it pragmatically". Many programmers are familiar with classic refactorings or even more complex refactorings to patterns, clean code rules and naming rules. But it is not enough. Pragmatic refactoring is a difficult practice that requires many years of experience. And what if you or folks from your team don't have that experience? Then refactoring may be more harmful than useful. The Natural Course of Refactoring is a process, workflow that expresses something what may seem obvious for experienced refactoring practitioner but very difficult to figure out for beginners or even more advanced practitioners. It is like red-green-refactor for TDD. NCR is a way of thinking which shifts your focus from single refactorings to a more holistic approach. It is also decision framework helping you to specify what is next pragmatic step (if there is any).It helps you to recognize what stage the particular fragment of source code is, what you can do about it and decide if to do something or leave it as it is. It guides you what exact refactorings you should take into consideration in the particular stage and also which refactorings are way too big steps.

Transcript of Natural course of refactoring - Mix-IT Lyon 2014

Page 1: Natural course of refactoring - Mix-IT Lyon 2014

www.bnsit.pl

Natural Course of Refactoring. A refactoring workflow.

Mariusz Sieraczkiewicz

@ms_bnsit_pl

http://msieraczkiewicz.blogspot.com

1

Page 2: Natural course of refactoring - Mix-IT Lyon 2014

www.bnsit.pl

Why refactoring is like sex? Natural Course of Refactoring

Page 3: Natural course of refactoring - Mix-IT Lyon 2014

www.bnsit.pl

Once you get started, you’ll only stop because you’re exhausted.

One mistake and the consequences may be really huge.

Why refactoring is like sex?

Natural Course of Refactoring 2014 3

(adapted from http://www.thealmightyguru.com/Humor/Docs/ProgrammingIsLikeSex.html)

Page 4: Natural course of refactoring - Mix-IT Lyon 2014

www.bnsit.pl

People more talk about it than actually do.

You can do it for money or for fun.

It’s not really an appropriate topic for dinner conversation.

Why refactoring is like sex?

Natural Course of Refactoring 2014 4

(adapted from http://www.thealmightyguru.com/Humor/Docs/ProgrammingIsLikeSex.html)

Page 5: Natural course of refactoring - Mix-IT Lyon 2014

www.bnsit.pl

Beginners do a lot of noise about it.

Some people are just naturally good at it,

.. but some people will never realize how bad they are, and you’re wasting your time trying to tell them.

Why refactoring is like sex?

Natural Course of Refactoring 2014 5

(adapted from http://www.thealmightyguru.com/Humor/Docs/ProgrammingIsLikeSex.html)

Page 6: Natural course of refactoring - Mix-IT Lyon 2014

www.bnsit.pl

It doesn’t go so well when you’re drunk, but you’re more likely to do it.

You’ll miss it after a longer break.

Why refactoring is like sex?

Natural Course of Refactoring 2014 6

(adapted from http://www.thealmightyguru.com/Humor/Docs/ProgrammingIsLikeSex.html)

Page 7: Natural course of refactoring - Mix-IT Lyon 2014

www.bnsit.pl

Code readability Natural Course of Refactoring

Page 8: Natural course of refactoring - Mix-IT Lyon 2014

www.bnsit.pl

.so!changesIntroDuCinG!maYBe,softwaRe,TosO,calLEdprOgRessIve,and.however.cHanGes!Modifies.usuallY,sTRucTureOFmaYbe,hoWEVeRtHecoDE,And!wHaTmaYbecumulatEdhowevEr.anD,mAkes.AnD,,and,the.LeSs!rEAdAblE,aNd.cOdeMAybe.ANd,!and,!Thenumber!of,sO,HoWEvErsodepeNdeNCiES,And.MAybeintErACtIOns!betWeenHoWevEr!differEntsyStem.moDules!inCreasESoThat,iTsO!morE.is.diffiCuLt,To,AnDuNdErstandmodIFy

Why is it difficult to understand software after some time of its evolution?

Natural Course of Refactoring 2014 8

Page 9: Natural course of refactoring - Mix-IT Lyon 2014

www.bnsit.pl

Introducing changes to software (so called progressive changes) usually modifies structure of the code, what cumulated makes the code less readable. The number of dependencies and interactions between different system modules increase, so that it is more difficult to understand and modify.

Why is it difficult to understand software after some time of its evolution?

Natural Course of Refactoring 2014 9

Page 10: Natural course of refactoring - Mix-IT Lyon 2014

www.bnsit.pl

Even answers to easy questions are difficult to find.

The problem lies more in a code readibility, than in the programmers reading skills.

Even great reader will not perform good in such environment.

What alters programmers productivity in this case?

Natural Course of Refactoring 2014 10

Page 11: Natural course of refactoring - Mix-IT Lyon 2014

www.bnsit.pl

Flavours of refactoring Natural Course of Refactoring

Natural Course of Refactoring 2014 11

Page 12: Natural course of refactoring - Mix-IT Lyon 2014

www.bnsit.pl

Two flavours of refactoring

Natural Course of Refactoring 2014 12

Page 13: Natural course of refactoring - Mix-IT Lyon 2014

www.bnsit.pl

Everyday refactoring Within a reach of every programmer Can be done in minutes Mostly safe, IDE-base automatic refactorings For local health of the code Part of programming practice No excuse for not doing it

Main practices Cleaning names Naming conditions Extracting methods Moving methods and extracting classes

Everyday refactoring

Natural Course of Refactoring 2014 13

Page 14: Natural course of refactoring - Mix-IT Lyon 2014

www.bnsit.pl

Strategic refactoring A team longer term effort Requires aligning with iteration planning Generates items in backlog Risky activity that requires intensive testing (including good tests suite) Difficult and time-consuming Check carefully if refactoring gives you enough value (Feather’s Quadrant)

Main practices Introducing high level design patterns Introducing architectural changes

Strategic refactoring

Natural Course of Refactoring 2014 14

Page 15: Natural course of refactoring - Mix-IT Lyon 2014

www.bnsit.pl

When should I do strategic refactoring? Natural Course of Refactoring

Page 16: Natural course of refactoring - Mix-IT Lyon 2014

www.bnsit.pl

1. complexity := 1

2. For every decision point (if, while, for, and, or, try, case, break, continue) complexity++

3. if 6 <= complexity <= 10 – simplify a method

4. if complexity > 10 – compose method

McCabe Metric (Cyclomatic Complexity) Simplified version

Natural Course of Refactoring 2014 16

Page 17: Natural course of refactoring - Mix-IT Lyon 2014

www.bnsit.pl

High complexity/ Seldom changes

Don’t touch it.

High complexity/ Frequent changes

Apply strategic refactoring

Low complexity/ Seldom changes

Utils, good for experiments

Low complexity/Frequent

changes

Heaven

Feather’s Quadrant

Natural Course of Refactoring 2014 17

Confront with: • team opinions

• business strategy

Frequency of changes

Complexity

Page 18: Natural course of refactoring - Mix-IT Lyon 2014

www.bnsit.pl

Natural Course of Refactoring The process

Page 19: Natural course of refactoring - Mix-IT Lyon 2014

www.bnsit.pl Natural Course of Refactoring 2014 19

Page 20: Natural course of refactoring - Mix-IT Lyon 2014

www.bnsit.pl

Step 0. Understand the code

Natural Course of Refactoring 2014 20

Page 21: Natural course of refactoring - Mix-IT Lyon 2014

www.bnsit.pl

Sometimes it is the most difficult point

Try to…

• find an author and ask for help

• find somebody who worked with the code and ask for help

• find somebody who knows the system (or module) and ask for help

• Do it yourself if none of above are possible

Understand

Natural Course of Refactoring 2014 21

Page 22: Natural course of refactoring - Mix-IT Lyon 2014

www.bnsit.pl

Mental tools Simple code cleaning Clean up the names Add temporary comments to the code Introduce lazy variables initialization Make optical cleanup (make more space)

Scaffolding refactoring Do some exploratory refactoring to be thrown away The only goal is to gain more understanding of the code Done in Notepad or something similar

Understand

Natural Course of Refactoring 2014 22

Page 23: Natural course of refactoring - Mix-IT Lyon 2014

www.bnsit.pl

They should be temporary. Delete them after refactoring.

// SMELL it doesn’t look good, copy-

paste antipattern

// REFACTOR introduce factory

// NOTE send a message

// IDEA it can be modeled as a state

machine

Introduce refactoring comments

Natural Course of Refactoring 2014 23

Page 24: Natural course of refactoring - Mix-IT Lyon 2014

www.bnsit.pl

Step 1. Express algorithm

Natural Course of Refactoring 2014 24

Page 25: Natural course of refactoring - Mix-IT Lyon 2014

www.bnsit.pl

Aim

Code that speaks to you

Mental tools

• Compose method

• Introduce Method Object Refactoring

• Extract method

Express algorithm

Natural Course of Refactoring 2014 25

Page 26: Natural course of refactoring - Mix-IT Lyon 2014

www.bnsit.pl

Step 2. Extract responsibilities

Natural Course of Refactoring 2014 26

Page 27: Natural course of refactoring - Mix-IT Lyon 2014

www.bnsit.pl

Move meaningful private methods to another classes.

You can’t test private method without hacks so if it is worth testing, find another class where this method will be public.

Extract responsibilities

Natural Course of Refactoring 2014 27

Page 28: Natural course of refactoring - Mix-IT Lyon 2014

www.bnsit.pl

Mental tools

Single responsibility principle

Move method refactoring

Extract class refactoring

Introduce Domain Object

Introduce Value Object

Extract responsibilities

Natural Course of Refactoring 2014 28

Page 29: Natural course of refactoring - Mix-IT Lyon 2014

www.bnsit.pl

Step 3. Introduce flexibility

Natural Course of Refactoring 2014 29

Page 30: Natural course of refactoring - Mix-IT Lyon 2014

www.bnsit.pl

Flexibility based on requirements eg. be prepared for many cripting algorithms, starting with 5

Flexibility which emerged from code eg. your team has written 8 reports with similar structure

Never guess for flexibility

Do you REALLY need flexibility?

Natural Course of Refactoring 2014 30

Page 31: Natural course of refactoring - Mix-IT Lyon 2014

www.bnsit.pl

Strategy, Template method – different versions of the same algorithm

State – simple state machines

Factory – polimorphic object creation

Builder – creating complex object in multiple steps

Decorator – flexibility in enhancing behaviour at runtime

Observer – loosen dependencies by indirect communication (events)

Some design patterns applications

Natural Course of Refactoring 2014 31

Page 32: Natural course of refactoring - Mix-IT Lyon 2014

www.bnsit.pl

Mental tools

S.O.L.I.D.

Design patterns

Refactoring to patterns

Apply design patterns

Natural Course of Refactoring 2014 32

Page 33: Natural course of refactoring - Mix-IT Lyon 2014

www.bnsit.pl

Step 4. Evolve architecture

Natural Course of Refactoring 2014 33

Page 34: Natural course of refactoring - Mix-IT Lyon 2014

www.bnsit.pl

It is always a strategic decision.

It is useful to have regular Design Retrospective meetings when such ideas are discussed.

Evolve architecture

Natural Course of Refactoring 2014 34

Page 35: Natural course of refactoring - Mix-IT Lyon 2014

www.bnsit.pl

Mental tools

Introducing/removing layers

Introducing or replacing ORM/NoSQL/?

Important change in building blocks

Changing or introducing new framework

Introducing events

Introducing state machine

Moving towords DDD, Microservices, CQRS

Introducing Bounded-Context (DDD)

Applying Anticorruption Layer

Evolve architecture

Natural Course of Refactoring 2014 35

Page 36: Natural course of refactoring - Mix-IT Lyon 2014

Natural Course of Refactoring 2014 36

Page 37: Natural course of refactoring - Mix-IT Lyon 2014

www.bnsit.pl Natural Course of Refactoring 2014 37

Everyday refactoring

Strategic refactoring

Page 38: Natural course of refactoring - Mix-IT Lyon 2014

www.bnsit.pl

It is just a model – neither true nor false

Big classes and big methods has fragments of code in different NCR stages

Quite seldom code is in Compose method step (which the most increases readability)

The consecutive steps are done more seldom than preceding ones

Some comments

Natural Course of Refactoring 2014 38

Page 39: Natural course of refactoring - Mix-IT Lyon 2014

www.bnsit.pl

Extracting responsibilities and Introducing flexibility should be attracted by current architecture vision (Architectural Mantra)

Lack of the architecture vision may push you to local optimum

NCR is an ongoing process and should be a part of whole software process.

NCR and architecture

Natural Course of Refactoring 2014 39

Techniki pracy z kodem

Page 40: Natural course of refactoring - Mix-IT Lyon 2014

www.bnsit.pl

Why NCR?

Easy to teach

Easy to understand and remeber

Separates everyday and strategic refactoring

Indicates the simplest (safe) possible step in the moment

Gives hints what kind of refactorings can be applied in the moment

NCR IN A TEAM

Natural Course of Refactoring 2014 40

Page 41: Natural course of refactoring - Mix-IT Lyon 2014

www.bnsit.pl

Natural Course of Refactoring. A refactoring workflow.

Mariusz Sieraczkiewicz

@ms_bnsit_pl

http://msieraczkiewicz.blogspot.com

41