The Power Of Refactoring (PHPCon Italia)

Post on 23-Jun-2015

2.112 views 2 download

Tags:

description

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

Transcript of The Power Of Refactoring (PHPCon Italia)

PHPCon Italia, Rome, March 19 2009Stefan Koopmanschap

The Power of Refactoring

What will we do?

What is refactoring?

Why refactoring?

When refactoring?

Requirements

HOWTO

2

Stefan KoopmanschapWho is he?

3

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

RefactoringWhat is it?

5

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

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

What

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

8

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

Improve readability

10

Improve maintainability

11

Extend/change/implement

12

Is it the holy grail?

13

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

Refactor vs Rewrite

15

Refactor vs Rewrite

Refactor whenever it is possible

15

Refactor vs Rewrite

Refactor whenever it is possible

Big change? Try to cut it into smaller units

15

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

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

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

Requirementsfor successful refactoring

17

Requirements

Codebase knowledge

Structured API

Unit testing

18

Codebase knowledge

Know what to change quickly

Be aware of your changes

Be aware of impact of your changes on other components

19

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

Unit testing

21

Unit testing

Unit testing is your first point of QA

They safeguard you from unexpected side effects

Test - Change - Test

22

When?Timing of refactoring

23

Two moments of refactoring

Big chunks

Continuous refactoring

24

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

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

Continuous Refactoring

Refactor while you work

Encounter a problem, fix it!

27

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

Who should refactor?

29

Who should refactor?

Someone with knowledge of the codebase

• Or at least the part that is being refactored

Not necessarily the code owner

30

An exampleuser authentication

31

A test-driven approach

32

My first implementation

33

My first implementation

33

A more dynamic version

34

A more dynamic version

34

Tips and tricks

35

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

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

The Power of Refactoring

38

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!

Questions ?

40

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