the power of refactoring (phpcon italia)

47
PHPCon Italia, Rome, March 19 2009 Stefan Koopmanschap The Power of Refactoring

Upload: stefan-koopmanschap

Post on 23-Jun-2015

2.114 views

Category:

Technology


2 download

DESCRIPTION

The slides of my Power of Refactoring talk as I did it at the PHPCon Italia in Rome

TRANSCRIPT

Page 1: The Power Of Refactoring (PHPCon Italia)

PHPCon Italia, Rome, March 19 2009Stefan Koopmanschap

The Power of Refactoring

Page 2: The Power Of Refactoring (PHPCon Italia)

What will we do?

What is refactoring?

Why refactoring?

When refactoring?

Requirements

HOWTO

2

Page 3: The Power Of Refactoring (PHPCon Italia)

Stefan KoopmanschapWho is he?

3

Page 4: The Power Of Refactoring (PHPCon Italia)

About me

Professional Services Consultant at Ibuildings

10 years of PHP experience

auto didact

married, 2 kids, 6 cats, a bunch of fish

Apple lover

music addict

symfony advocate

4

Page 5: The Power Of Refactoring (PHPCon Italia)

RefactoringWhat is it?

5

Page 6: The Power Of Refactoring (PHPCon Italia)

Refactoring is a disciplined technique for restructuring an existing body of code, altering its internal structure without changing its external behavior. Its heart is a series of small behavior preserving transformations. Each transformation (called a 'refactoring') does little, but a sequence of transformations can produce a significant restructuring. Since each refactoring is small, it's less likely to go wrong. The system is also kept fully working after each small refactoring, reducing the chances that a system can get seriously broken during the restructuring.(Martin Fowler - Refactoring.com)

6

Page 7: The Power Of Refactoring (PHPCon Italia)

Code refactoring is the process of changing a computer program's code to make it amenable to change, improve its readability, or simplify its structure, while preserving its existing functionality.(Wikipedia)

7

Page 8: The Power Of Refactoring (PHPCon Italia)

What

Code refactoring is the process of changing a computer program's internal structure without modifying its external behavior or existing functionality.

8

Page 9: The Power Of Refactoring (PHPCon Italia)

Why

This is usually done to improve code readability, simplify code structure, change code to adhere to a given programming paradigm, improve maintainability, or improve extensibility.

9

Page 10: The Power Of Refactoring (PHPCon Italia)

Improve readability

10

Page 11: The Power Of Refactoring (PHPCon Italia)

Improve maintainability

11

Page 12: The Power Of Refactoring (PHPCon Italia)

Extend/change/implement

12

Page 13: The Power Of Refactoring (PHPCon Italia)

Is it the holy grail?

13

Page 14: The Power Of Refactoring (PHPCon Italia)

Rewrite

A rewrite in computer programming is the act or result of re-implementing a large portion of existing functionality without re-use of its source code. When the rewrite is not using existing code at all, it is common to speak of a rewrite from scratch. When instead only parts are re-engineered, which have otherwise become complicated to handle or extend, then it is more precise to speak of code refactoring.(Wikipedia)

14

Page 15: The Power Of Refactoring (PHPCon Italia)

Refactor vs Rewrite

15

Page 16: The Power Of Refactoring (PHPCon Italia)

Refactor vs Rewrite

Refactor whenever it is possible

15

Page 17: The Power Of Refactoring (PHPCon Italia)

Refactor vs Rewrite

Refactor whenever it is possible

Big change? Try to cut it into smaller units

15

Page 18: The Power Of Refactoring (PHPCon Italia)

Refactor vs Rewrite

Refactor whenever it is possible

Big change? Try to cut it into smaller units

Still have to break the API? Go ahead, and rewrite!

15

Page 19: The Power Of Refactoring (PHPCon Italia)

Refactor vs Rewrite

Refactor whenever it is possible

Big change? Try to cut it into smaller units

Still have to break the API? Go ahead, and rewrite!

Don’t take the decision in 5 minutes

15

Page 20: The Power Of Refactoring (PHPCon Italia)

Refactor vs Rewrite

Refactoring takes less effortNice for you

Better for the quality of your work

Breaking the API is more workEnsure all calling code is altered as well

Update your unit tests

Update your documentation

16

Page 21: The Power Of Refactoring (PHPCon Italia)

Requirementsfor successful refactoring

17

Page 22: The Power Of Refactoring (PHPCon Italia)

Requirements

Codebase knowledge

Structured API

Unit testing

18

Page 23: The Power Of Refactoring (PHPCon Italia)

Codebase knowledge

Know what to change quickly

Be aware of your changes

Be aware of impact of your changes on other components

19

Page 24: The Power Of Refactoring (PHPCon Italia)

Structured API

Refactoring DOES NOT REPLACE design!

You need a good API that allows internal changes

Additions to existing API’s should not change existing API

Keep small “units”

20

Page 25: The Power Of Refactoring (PHPCon Italia)

Unit testing

21

Page 26: The Power Of Refactoring (PHPCon Italia)

Unit testing

Unit testing is your first point of QA

They safeguard you from unexpected side effects

Test - Change - Test

22

Page 27: The Power Of Refactoring (PHPCon Italia)

When?Timing of refactoring

23

Page 28: The Power Of Refactoring (PHPCon Italia)

Two moments of refactoring

Big chunks

Continuous refactoring

24

Page 29: The Power Of Refactoring (PHPCon Italia)

Big Chunks

As you encounter problems, you keep track

• Ticketing system

• TODO list

• Inline comments

Schedule one or more moments in your project

• Work through your list

• Refactor them

25

Page 30: The Power Of Refactoring (PHPCon Italia)

Big Chunks work?

Advantages

• Set times for refactoring

• Focus on your project when you need to

• Works well for functional changes

Disadvantages

• Refactoring gets cancelled first with tight deadlines

• You may have forgotten specific solutions already

26

Page 31: The Power Of Refactoring (PHPCon Italia)

Continuous Refactoring

Refactor while you work

Encounter a problem, fix it!

27

Page 32: The Power Of Refactoring (PHPCon Italia)

Continuous Refactoring works?

Advantages

• No need to schedule seperate time

• Continuous improvement of your code

Disadvantages

• Danger of losing the balance between tasks and refactoring

28

Page 33: The Power Of Refactoring (PHPCon Italia)

Who should refactor?

29

Page 34: The Power Of Refactoring (PHPCon Italia)

Who should refactor?

Someone with knowledge of the codebase

• Or at least the part that is being refactored

Not necessarily the code owner

30

Page 35: The Power Of Refactoring (PHPCon Italia)

An exampleuser authentication

31

Page 36: The Power Of Refactoring (PHPCon Italia)

A test-driven approach

32

Page 37: The Power Of Refactoring (PHPCon Italia)

My first implementation

33

Page 38: The Power Of Refactoring (PHPCon Italia)

My first implementation

33

Page 39: The Power Of Refactoring (PHPCon Italia)

A more dynamic version

34

Page 40: The Power Of Refactoring (PHPCon Italia)

A more dynamic version

34

Page 41: The Power Of Refactoring (PHPCon Italia)

Tips and tricks

35

Page 42: The Power Of Refactoring (PHPCon Italia)

Some tips and tricks

Write unit tests before you start refactoring

Code documentation (phpDoc) is your friend

Don’t trust your IDE’s refactoring options

36

Page 43: The Power Of Refactoring (PHPCon Italia)

Looking back

What is refactoring?

Why do we want to refactor?

Is it the holy grail?

Refactoring vs Rewriting

Requirements

How to do it

Tips and tricks

37

Page 44: The Power Of Refactoring (PHPCon Italia)

The Power of Refactoring

38

Page 45: The Power Of Refactoring (PHPCon Italia)

Readability: http://www.flickr.com/photos/vipulmathur/471634239/ (by-nc-sa/2.0)Maintainability:http://www.flickr.com/photos/comicbase/2117680144/ (by-nc-sa/2.0)Extend:http://www.flickr.com/photos/auntiep/221951988/ (by-nc-sa/2.0)Holy Grail:http://www.flickr.com/photos/joebeone/153921142/ (by/2.0)Würst test ever:http://www.flickr.com/photos/pingles/1341229619/ (by-nc-nd/2.0)

39

Creative Commons Rocks!

Page 46: The Power Of Refactoring (PHPCon Italia)

Questions ?

40

Page 47: The Power Of Refactoring (PHPCon Italia)

Thank you!

Contact details:

Stefan Koopmanschaphttp://www.leftontheweb.com/

http://www.ibuildings.com/http://www.twitter.com/skoop

http://www.slideshare.net/skoophttp://joind.in/talk/view/240