Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Teddy Chen
teddy@teddysoft.tw
http://teddy-chen-tw.blogspot.tw/
March 10 2016
Teddy Chen
teddy@teddysoft.tw
http://teddy-chen-tw.blogspot.tw/
March 10 2016
Rename
Copyright@2012-2016 Teddysoft
撒嬌
蓋布袋 舔手
玩襪子
2015年1月領養Eiffel
每天看到好多
需要幫助的貓
謝謝鈦坦科技的 Kevin
Kevin
無等待贊助
節育之貓
由
由泰迪軟體代捐
謝謝各位哥哥、姐姐,
讓更多貓咪獲得幸福
Copyright@2012-2016 Teddysoft
http://goo.gl/6uqzes
B
A
• Refactoring (Noun )
– A change made to the internal structure of
software to make it easier to understand and
cheaper to...
在不改變程式外在行為的前提之下,
改變程式內部結構以提升設計品質
Copyright@2012-2016 Teddysoft
Before refactoring After refactoring
All programming is maintenance
programming, Dave Thomas
Copyright@2012-2016 Teddysoft
http://www.artima.com/intv/dry.html
...
Copyright@2012-2016 Teddysoft Source http://goo.gl/roc09w
Copyright@2012-2016 Teddysoft
3
2
4
在不改變程式外在行為的前提之下,
改變程式內部結構以提升設計品質
1
5
如何確認? 如何定義?
怎麼改? 哪些結構可以改? 品質的提升目標為何?
6 為什麼要以不改變程
...
Copyright@2012-2016 Teddysoft
3
2
4
在不改變程式外在行為的前提之下,
改變程式內部結構以提升設計品質
1
5
如何確認? 如何定義?
怎麼改? 哪些結構可以改? 品質的提升目標為何?
6 為什麼要以不改變程
...
if 1 == 1 then S1 else S2
Copyright@2012-2016 Teddysoft
開什麼玩笑!
太難
Ref. : https://goo.gl/sBYyAg
1
• Denotational semantics
...
Copyright@2012-2016 Teddysoft
Copyright@2012-2016 Teddysoft
Replace semantics proven
with scenario-based tests
聊天話題1:
用測試定義行為有何優缺點?有無替代方案?
Copyright@2012-2016 Teddysoft
Copyright@2012-2016 Teddysoft
Package
Class
Method
Block
Statement
Variable
作用在不同結構上的重構,
產生不同層次的設計改善
Common program
constr...
Copyright@2012-2016 Teddysoft
程式結構有大有小,
重構亦然
A change made to the internal structure
of software to make it easier to
understand and cheaper to modify
without changing...
Copyright@2012-2016 Teddysoft
只有「easier to understand and
cheaper to modify」這兩個目標,
會不會太小、太一般化了?
Understandability
Modifiability
Low Coupling
High Cohesion
OO Concept
OO Principle
Design Pattern
Architecture
 Abstracti...
Copyright@2012-2016 Teddysoft
重構有大有小,
重構目標亦然
民意調查:
重構是一種模式(Pattern)嗎?
Copyright@2012-2016 Teddysoft
• 設計模式
– Singleton, Command, Proxy, Adapter, Model-
View-Controller, etc.
• 重構
– Rename, Introduce Assertion, Extract
Meth...
• 名詞片語 (Noun-phrase)
– 描述模式所建立或產生的結果
– 例子:Singleton, Command, Model-View-
Controller
• 動詞片語 (Verb-phrase)
– 給定一個指令,描述如何達到模...
Copyright@2012-2016 Teddysoft Source:《The Timeless Way of Building》
http://goo.gl/tS13cE
聊天話題2:
如果重構是一種模式,為什麼重構用動詞而
不像大部份設計模式採用名詞?
Copyright@2012-2016 Teddysoft
• Make you instant expert
• Eliminate the need for intelligence and
taste
• Eliminate the need to think
• Tell you how exa...
Copyright@2012-2016 Teddysoft
重構 相反重構
Extract Method Inline Method
Add Parameter Remove Parameter
Collapse Hierarchy Extra...
Copyright@2012-2016 Teddysoft Source: 電影《星際大戰第四集》
Use the Smell, Luke
Copyright@2012-2016 Teddysoft
重構是一種模式,套
用模式要觀察Force
Copyright@2012-2016 Teddysoft
Copyright@2012-2016 Teddysoft
Copyright@2012-2016 Teddysoft
Top-down
Bottom-up
• OOAD (傳統模式)
– Code-First
– Top-down
• TDD (原始模式)
– Test-First
– Bottom-up
Copyright@2012-2016 Teddysoft
Copyright@2012-2016 Teddysoft
Domain Model
Design Model
Implementation
Model
Refactoring
After
ImplementationUse Case
Model
Copyright@2012-2016 Teddysoft
Design Model
Implementation
Model
After
Implementation
Refactoring
Test & Code
OOAD
TDD
Doma...
Copyright@2012-2016 Teddysoft
https://goo.gl/8AZQUQ
Copyright@2012-2016 Teddysoft
Copyright@2012-2016 Teddysoft Source:《Test-Driven Development》
聊天話題3:
哪些原因可能造成學了TDD之後測試能力變
好但卻在落實TDD上遭遇困難?
Copyright@2012-2016 Teddysoft
Design Model
Copyright@2012-2016 Teddysoft
Implementation
Model
After
Implementation
Refactoring
Test & Code
OOAD
BDD + TD...
Design Model
Copyright@2012-2016 Teddysoft
Implementation
Model
After
Implementation
Refactoring
Test & Code
OOAD
TDD
Test...
聊天話題4:
DDD+BDD+TDD之後,傳統bottom-up
形式的test-first開發,還算是bottom-up
嗎?
Copyright@2012-2016 Teddysoft
Copyright@2012-2016 Teddysoft
Source:《禪的世界01--冥想》
Copyright@2012-2016 Teddysoft Source:《禪的世界01--冥想》
Copyright@2012-2016 Teddysoft Source:《The Timeless Way of Building》
Copyright@2012-2016 Teddysoft
部分的加總不等於
全部,體驗整體的
感覺有其必要性
• 軟體開發是一種團隊活動,只有自己會,隊
友不會,這樣的團隊無法長久。
• 自己會相對簡單,讓別人也會,很難。
• 多了解全局,比較有機會與有能力,讓原本
不懂且覺得某個東西很難的人,在你的協助
之下學會並且作出改變。
Copyright@2...
培養定位「新觀念」,以及建立它和既有知識
之間關係的能力,可以讓你綜觀全局。
Copyright@2012-2016 Teddysoft
Copyright@2012-2016 Teddysoft
Kent Beck叔叔認為:「厲害的
人不是自己很強不管別人死活,
而是能幫助別人,使別人原本
認為很難的事情,在他的幫助
之下變得很簡單。」
• 程式結構有大有小,重構亦然。
• 重構有大有小,重構目標亦然。
• 重構是一種模式,套用模式要觀察Force。
• 部分的加總不等於全部,先體驗整體的感覺
有其必要性。
• 培養一種能力:「在你的幫助之下讓別人原
本覺得很難事變得簡單。」
...
• 搞笑談軟工部落格
– http://teddy-chen-tw.blogspot.com
• 搞笑談軟工Facebook
– https://www.facebook.com/groups/teddy.tw
• 泰迪軟體官方網站
– htt...
重構三兩事
重構三兩事
重構三兩事
重構三兩事
重構三兩事
重構三兩事
重構三兩事
重構三兩事
重構三兩事
重構三兩事
重構三兩事
重構三兩事
重構三兩事
重構三兩事
重構三兩事
重構三兩事
重構三兩事
重構三兩事
重構三兩事
重構三兩事
Upcoming SlideShare
Loading in …5
×

重構三兩事

3,965 views

Published on

C. C. Agile Sprint 43分享活動投影片,Teddy嘴砲對於軟體重構的一些看法。

Published in: Software
  • Hello! Get Your Professional Job-Winning Resume Here - Check our website! https://vk.cc/818RFv
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

重構三兩事

  1. 1. Teddy Chen teddy@teddysoft.tw http://teddy-chen-tw.blogspot.tw/ March 10 2016
  2. 2. Teddy Chen teddy@teddysoft.tw http://teddy-chen-tw.blogspot.tw/ March 10 2016 Rename
  3. 3. Copyright@2012-2016 Teddysoft
  4. 4. 撒嬌 蓋布袋 舔手 玩襪子 2015年1月領養Eiffel
  5. 5. 每天看到好多 需要幫助的貓
  6. 6. 謝謝鈦坦科技的 Kevin
  7. 7. Kevin
  8. 8. 無等待贊助 節育之貓
  9. 9. 由 由泰迪軟體代捐
  10. 10. 謝謝各位哥哥、姐姐, 讓更多貓咪獲得幸福
  11. 11. Copyright@2012-2016 Teddysoft http://goo.gl/6uqzes B A
  12. 12. • Refactoring (Noun ) – A change made to the internal structure of software to make it easier to understand and cheaper to modify without changing its observable behavior. (對軟體內部結構的一種改變,目的在不改動軟體可察覺行 為的前提之下,提高其可理解性並降低修改成本。) • Refactor (Verb) – To restructure software by applying a series of refactoring without changing its observable behavior. (在不改變軟體可察覺行為的前提之下使用一系列重構方法 調整軟體結構 。) Copyright@2012-2016 Teddysoft Source:《Refactoring》
  13. 13. 在不改變程式外在行為的前提之下, 改變程式內部結構以提升設計品質 Copyright@2012-2016 Teddysoft Before refactoring After refactoring
  14. 14. All programming is maintenance programming, Dave Thomas Copyright@2012-2016 Teddysoft http://www.artima.com/intv/dry.html 菩 提 本 無 樹 明 鏡 亦 非 台 本 來 無 一 物 何 處 惹 塵 埃 神界 Code 是 菩 提 樹 CI 如 明 鏡 台 時 時 跑 測 試 勿 使 客 戶 哀 人界
  15. 15. Copyright@2012-2016 Teddysoft Source http://goo.gl/roc09w
  16. 16. Copyright@2012-2016 Teddysoft 3 2 4 在不改變程式外在行為的前提之下, 改變程式內部結構以提升設計品質 1 5 如何確認? 如何定義? 怎麼改? 哪些結構可以改? 品質的提升目標為何? 6 為什麼要以不改變程 式外在行為當作前提?
  17. 17. Copyright@2012-2016 Teddysoft 3 2 4 在不改變程式外在行為的前提之下, 改變程式內部結構以提升設計品質 1 5 如何確認? 如何定義? 怎麼改? 哪些結構可以改? 品質的提升目標為何? 6 為什麼要以不改變程 式外在行為當作前提?
  18. 18. if 1 == 1 then S1 else S2 Copyright@2012-2016 Teddysoft 開什麼玩笑! 太難 Ref. : https://goo.gl/sBYyAg 1 • Denotational semantics • Operational semantics • Axiomatic semantics
  19. 19. Copyright@2012-2016 Teddysoft
  20. 20. Copyright@2012-2016 Teddysoft Replace semantics proven with scenario-based tests
  21. 21. 聊天話題1: 用測試定義行為有何優缺點?有無替代方案? Copyright@2012-2016 Teddysoft
  22. 22. Copyright@2012-2016 Teddysoft Package Class Method Block Statement Variable 作用在不同結構上的重構, 產生不同層次的設計改善 Common program constructs to be coded & refactored • Rename • Introduce Assertion • Extract Method • Move Method • Extract Class • Form Template Method • Separate Domain from Presentation 2
  23. 23. Copyright@2012-2016 Teddysoft 程式結構有大有小, 重構亦然
  24. 24. A change made to the internal structure of software to make it easier to understand and cheaper to modify without changing its observable behavior. 較易理解,較低修改成本 Copyright@2012-2016 Teddysoft 3
  25. 25. Copyright@2012-2016 Teddysoft 只有「easier to understand and cheaper to modify」這兩個目標, 會不會太小、太一般化了?
  26. 26. Understandability Modifiability Low Coupling High Cohesion OO Concept OO Principle Design Pattern Architecture  Abstraction  Information hiding  Polymorphism  Responsibility assignment  Indirection  Separation of concerns  Program to an interface, not an implementation  Favor object composition over class inheritance  Single-responsibility  Open-closed  Liskov substitution  Interface-segregation  Dependency-inversion  Don't repeat yourself, Single choice, One and only once Copyright@2012-2016 Teddysoft
  27. 27. Copyright@2012-2016 Teddysoft 重構有大有小, 重構目標亦然
  28. 28. 民意調查: 重構是一種模式(Pattern)嗎? Copyright@2012-2016 Teddysoft
  29. 29. • 設計模式 – Singleton, Command, Proxy, Adapter, Model- View-Controller, etc. • 重構 – Rename, Introduce Assertion, Extract Method, Move Method, Extract Class, Form Template Method, Separate Domain from Presentation, etc. Copyright@2012-2016 Teddysoft
  30. 30. • 名詞片語 (Noun-phrase) – 描述模式所建立或產生的結果 – 例子:Singleton, Command, Model-View- Controller • 動詞片語 (Verb-phrase) – 給定一個指令,描述如何達到模式解決方案所要 求的狀態 – 例子:Don’t Talk to Strangers, Separate Material Preparation from Integration Copyright@2012-2016 Teddysoft
  31. 31. Copyright@2012-2016 Teddysoft Source:《The Timeless Way of Building》 http://goo.gl/tS13cE
  32. 32. 聊天話題2: 如果重構是一種模式,為什麼重構用動詞而 不像大部份設計模式採用名詞? Copyright@2012-2016 Teddysoft
  33. 33. • Make you instant expert • Eliminate the need for intelligence and taste • Eliminate the need to think • Tell you how exactly how to adapt the solution to your context Copyright@2012-2016 Teddysoft Source: Asian PLoP 2016 by Joseph Yoder and Rebecca Wirfs-Brock
  34. 34. Copyright@2012-2016 Teddysoft 重構 相反重構 Extract Method Inline Method Add Parameter Remove Parameter Collapse Hierarchy Extract Superclass, Extract Subclass Extract Class Inline Class Hide Delegate Remove Middle Man Pull Up Field Push Down Field Replace Inheritance with Delegation Replace Delegation with Inheritance
  35. 35. Copyright@2012-2016 Teddysoft Source: 電影《星際大戰第四集》 Use the Smell, Luke
  36. 36. Copyright@2012-2016 Teddysoft 重構是一種模式,套 用模式要觀察Force
  37. 37. Copyright@2012-2016 Teddysoft
  38. 38. Copyright@2012-2016 Teddysoft
  39. 39. Copyright@2012-2016 Teddysoft Top-down Bottom-up
  40. 40. • OOAD (傳統模式) – Code-First – Top-down • TDD (原始模式) – Test-First – Bottom-up Copyright@2012-2016 Teddysoft
  41. 41. Copyright@2012-2016 Teddysoft Domain Model Design Model Implementation Model Refactoring After ImplementationUse Case Model
  42. 42. Copyright@2012-2016 Teddysoft Design Model Implementation Model After Implementation Refactoring Test & Code OOAD TDD Domain Model Use Case Model Most design happens here Refactoring https://goo.gl/8AZQUQ
  43. 43. Copyright@2012-2016 Teddysoft https://goo.gl/8AZQUQ
  44. 44. Copyright@2012-2016 Teddysoft
  45. 45. Copyright@2012-2016 Teddysoft Source:《Test-Driven Development》
  46. 46. 聊天話題3: 哪些原因可能造成學了TDD之後測試能力變 好但卻在落實TDD上遭遇困難? Copyright@2012-2016 Teddysoft
  47. 47. Design Model Copyright@2012-2016 Teddysoft Implementation Model After Implementation Refactoring Test & Code OOAD BDD + TDD Test cases as specification Domain Model Use Case Model Most design happens here Refactoring
  48. 48. Design Model Copyright@2012-2016 Teddysoft Implementation Model After Implementation Refactoring Test & Code OOAD TDD Test cases as specification Domain Model Use Case Model Domain Model Could DDD help? Most design happens here Refactoring
  49. 49. 聊天話題4: DDD+BDD+TDD之後,傳統bottom-up 形式的test-first開發,還算是bottom-up 嗎? Copyright@2012-2016 Teddysoft
  50. 50. Copyright@2012-2016 Teddysoft Source:《禪的世界01--冥想》
  51. 51. Copyright@2012-2016 Teddysoft Source:《禪的世界01--冥想》
  52. 52. Copyright@2012-2016 Teddysoft Source:《The Timeless Way of Building》
  53. 53. Copyright@2012-2016 Teddysoft 部分的加總不等於 全部,體驗整體的 感覺有其必要性
  54. 54. • 軟體開發是一種團隊活動,只有自己會,隊 友不會,這樣的團隊無法長久。 • 自己會相對簡單,讓別人也會,很難。 • 多了解全局,比較有機會與有能力,讓原本 不懂且覺得某個東西很難的人,在你的協助 之下學會並且作出改變。 Copyright@2012-2016 Teddysoft
  55. 55. 培養定位「新觀念」,以及建立它和既有知識 之間關係的能力,可以讓你綜觀全局。 Copyright@2012-2016 Teddysoft
  56. 56. Copyright@2012-2016 Teddysoft Kent Beck叔叔認為:「厲害的 人不是自己很強不管別人死活, 而是能幫助別人,使別人原本 認為很難的事情,在他的幫助 之下變得很簡單。」
  57. 57. • 程式結構有大有小,重構亦然。 • 重構有大有小,重構目標亦然。 • 重構是一種模式,套用模式要觀察Force。 • 部分的加總不等於全部,先體驗整體的感覺 有其必要性。 • 培養一種能力:「在你的幫助之下讓別人原 本覺得很難事變得簡單。」 Copyright@2012-2016 Teddysoft
  58. 58. • 搞笑談軟工部落格 – http://teddy-chen-tw.blogspot.com • 搞笑談軟工Facebook – https://www.facebook.com/groups/teddy.tw • 泰迪軟體官方網站 – http://teddysoft.tw Copyright@2012-2016 Teddysoft

×