B-Refactoring: Automatic Test Code Refactoring to Improve Dynamic ...
Refactoring
-
Upload
jiayun-zhou -
Category
Technology
-
view
1.424 -
download
0
description
Transcript of Refactoring
RefactoringImproving The Design of Existing Code
Reporter:Jiayun Zhou <[email protected]>
Date :2011/07/13
Outline
Introduction
Bad Smells & Refactorings
Conclusion
Copyright by IISI. All rights reserved 2
Introduction
Eclipse 1.0 – Nov 2001
Copyright by IISI. All rights reserved 4
Eclipse 2.0 – Jun 2002
Copyright by IISI. All rights reserved 5
Eclipse 2.1 – Mar 2003
Copyright by IISI. All rights reserved 6
Eclipse 3.7 – Jun 2011
Copyright by IISI. All rights reserved 7
Copyright by IISI. All rights reserved 8
Martin Fowler
Copyright by IISI. All rights reserved 9
Kent Beck
Copyright by IISI. All rights reserved 10
Bad Smells & Refactorings
Bad Smell
If it stinks, change it.
-Grandma Beck,discussing child-rearing philosophy
Copyright by IISI. All rights reserved 12
WTF
Copyright by IISI. All rights reserved 13
What the Fxxk
Copyright by IISI. All rights reserved 14
Copyright by IISI. All rights reserved 15
Good Programmer
• 30% Good Habits
• 30% English
• 40% Passion, Talent, Practice, and Everything Else
Copyright by IISI. All rights reserved 16
Duplicated Code (Bad Smell)
DRY
(Don't Repeat Yourself)
Copyright by IISI. All rights reserved 17
Duplicated Code (Bad Smell)
DRY
(Don't Repeat Yourself)
vs.
WET
(We Enjoy Typing)
Copyright by IISI. All rights reserved 18
Pull Up Method(Refactoring)
Copyright by IISI. All rights reserved 19
Pull Up – 1 (Eclipse)
Copyright by IISI. All rights reserved 20
Pull Up – 2 (Eclipse)
Copyright by IISI. All rights reserved 21
Pull Up – 3 (Eclipse)
Copyright by IISI. All rights reserved 22
Pull Up – 4 (Eclipse)
Copyright by IISI. All rights reserved 23
Pull Up – 5 (Eclipse)
Copyright by IISI. All rights reserved 24
Long Method (Bad Smell)
• Short methods are good
• Whenever we feel the need to comment something, we write a method instead
• Method name explains the intention
Copyright by IISI. All rights reserved 25
Extract Method(Refactoring)
Copyright by IISI. All rights reserved 26
Extract Method – 1 (Eclipse)
Copyright by IISI. All rights reserved 27
Extract Method – 2 (Eclipse)
Copyright by IISI. All rights reserved 28
Extract Method – 3 (Eclipse)
Copyright by IISI. All rights reserved 29
Conditionals and loops also give signs for extractions.
Use Decompose Conditional to deal with conditional expressions.
With loops, extract the loop and the code within the loop into its own method.
Copyright by IISI. All rights reserved 30
Large Class (Bad Smell)
• Trying to do too much
• Shows up as too many instance variables
• Duplicated code cannot be far behind
Copyright by IISI. All rights reserved 31
Extract Class(Refactoring)
Copyright by IISI. All rights reserved 32
Extract Class – 1 (Eclipse)
Copyright by IISI. All rights reserved 33
Extract Class – 2 (Eclipse)
Copyright by IISI. All rights reserved 34
Extract Class – 3 (Eclipse)
Copyright by IISI. All rights reserved 35
Long Parameter List(Bad Smell)
• Hard to understand
• Become inconsistent and difficult to use
• Forever changing them as you need more data
Copyright by IISI. All rights reserved 36
Replace Parameter with Method (Refactoring)
Copyright by IISI. All rights reserved 37
Preserve Whole Object(Refactoring)
Copyright by IISI. All rights reserved 38
Introduce Parameter Object(Refactoring)
Copyright by IISI. All rights reserved 39
Introduce Parameter Object –01 (Eclipse)
Copyright by IISI. All rights reserved 40
Introduce Parameter Object –02 (Eclipse)
Copyright by IISI. All rights reserved 41
Introduce Parameter Object –03 (Eclipse)
Copyright by IISI. All rights reserved 42
Comments (Bad Smell)
• They are sweet smell
• Don't use as a deodorant
Copyright by IISI. All rights reserved 43
Conclusion
How to refactor safely?
Copyright by IISI. All rights reserved 45
Unit Test
Copyright by IISI. All rights reserved 46
Copyright by IISI. All rights reserved 47
How about the translation?
Copyright by IISI. All rights reserved 48
中譯
你可以選擇每個 class 和函式的名字,這給了你一個解釋自己意圖的機會。class 或函式內部則解釋實現這個意圖的作法。如果class 和函式內部又以「更小單元的意圖」來編寫,你所寫的程式碼就可以「與其結構中的大部分重要資訊溝通」。 (p.61)
Copyright by IISI. All rights reserved 49
原文
Choosing the name of each class and the name of each method gives you an opportunity to explain what you intend. The internals of the class or method explain how the intention is realized. If the internals also are written in terms of intention in yet smaller pieces, you can write code that communicates most of the important information about its own structure.
Copyright by IISI. All rights reserved 50
Copyright by IISI. All rights reserved 51
我的翻譯
你可以選擇每個 class 和函式的名字,這給了你一個解釋自己意圖的機會。class 或函式內部則解釋實現這個意圖的作法。如果class 和函式內部又以「更小單元的意圖」來編寫,你所寫的程式碼就可以「表達出它自己結構的大部分重要資訊」。
Copyright by IISI. All rights reserved 52
盡信書不如無書
Copyright by IISI. All rights reserved 53
Copyright by IISI. All rights reserved 54
琴鍵有限,琴藝無限
Copyright by IISI. All rights reserved 55
Headquarter
6F., No.7, Sec. 2, Xianmin Blvd., Banqiao Dist., New Taipei City 22041, Taiwan(R.O.C.)
TEL : +886-2-8969-1969 FAX : +886-2-8969-3359
- Thank You -