the power of refactoring (phpcon italia)
DESCRIPTION
The slides of my Power of Refactoring talk as I did it at the PHPCon Italia in RomeTRANSCRIPT
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