Friday, November 04, 2005

Improving The Design of Existing Code

標題都這樣下了,當然要祭出《Refactoring》這部經典囉!

這本書問世到現在,重構已經是成熟的軟體技術了,對程式員來說,裡面的東西就如同空氣和水般,融入每天的編程中。

我只是手癢,上來把這部經典裡面的名句摘錄一番,日後也好隨時端詳端詳:

  • 如果你發現自己需要為程式添加一個特性,而程式碼結構使你無法很方便地那麼做,那就先重構那個程式,使特性的添加比較容易進行,然後再添加特性。
  • 重構之前,首先檢查自己是否有一套可靠的測試機制。這些測試必須有自我檢驗(self-checking)能力。
  • 重構技術係以微小的步伐修改程式。如果你犯下錯誤,很容易便可發現它。
  • 任何一個傻瓜都能寫出計算機可以理解的程式碼。唯有寫出人類容易理解的程式碼,才是優秀的程式員。
  • 重構(Refactoring)(名詞):對軟體內部結構的一種調整,目的是在不改變「軟體之可察行為」前提下,提高其可理解性,降低其修改成本。
  • 重構(Refactor)(動詞):使用一系列重構手法,在不改變「軟體之可察行為」前提下,調整其結構。
  • 事不過三,三則重構。(Three strikes and you refactor)
  • 不要過早發佈(published)介面。請修改你的程式碼擁有權政策,使重構更順暢。
  • 程式碼的壞味道。(Bad smells in Code)
    1. Duplicated Code
    2. Long Method
    3. Large Class
    4. Long Parameter List
    5. Divergent Change
    6. Shotgun Surgery
    7. Feature Envy
    8. Data Clumps
    9. Primitive Obsession
    10. Switch Statements
    11. Parallel Inheritance Hierarchies
    12. Lazy Class
    13. Speculative Generality
    14. Temporary Field
    15. Message Chains
    16. Middle Man
    17. Inappropriate Intimacy
    18. Alternative Class with Different Interfaces
    19. Incomplete Library Class
    20. Data Class
    21. Refused Bequest
    22. Comments
  • 當你感覺需要撰寫註釋,請先嘗試重構,試著讓所有註釋都變得多餘。
  • 確保所有測試都完全自動化,讓它們檢查自己的測試結果。
  • 一整組(a suit of)測試就是一個強大的臭蟲偵測器,能夠大大縮減搜尋臭蟲所需要的時間。
  • 頻繁地執行測試。每次編譯請把測試也考慮進去,每天至少執行每個測試一次。
  • 每當你接獲臭蟲提報(bug report),請先撰寫一個單元測試來揭發這隻臭蟲。
  • 編寫未臻完善的測試並實際執行,好過對完美測試的無盡等待。
  • 考慮可能出錯的邊界條件,把測試集中火力在那兒。
  • 當事情被大家認為應該出錯時,別忘了檢查彼時是否有異常如預期般地被拋出。
  • 不要因為「測試無法捕捉所有臭蟲」,就不撰寫測試碼,因為測試的確可以捕捉到大多數臭蟲。

2 comments:

Murphy Chen said...

我對於Refactoring的筆記: ^^
http://hpc.ee.ntu.edu.tw/~murphy/note/software_engineering/Refactoring.html

Yukuan said...

呵呵
我把它 bookmark 起來了 :)