讀書心得#重構JavaScript 1. 什麼是重構?
什麼是重構? 重構是一系列的等量變換 系統重構,就是在的 不改變軟體外部行為基礎上,改變軟體內部的結構 ,使其更易於閱讀、易於維護、易於擴充與易於變更。 持續不斷地對系統的內部品質進行改善與改進,就是重構的價值。 1.1 如何確保行為不被改變? Ans: 單元測試、版本控制 單元測試 進行重構之前,務必先替程式碼撰寫單元測試。確保每個方法的「 輸出結果符合預期結果 」之後,才可進行重構。 接下來 每重構一小步,就立刻執行一次單元測試 ,確認被重構的方法「行為沒有因為重構而被改變」。 只有測試通過了,這次重構才算成功! 版本控制 一般會採用 小步快跑 的方式進行重構,一次只重構一小部分,重構完馬上執行測試,測試通過後立刻上傳至 版本控制 (Git 或 SVN)。 這麼做的原因是,一但某個修改測試不通過,則還原回來。小步快跑可以讓重構的過程中,以最快速度發現修改的問題,將因重構錯誤帶來的損失減到最小! 畢竟人不可能避免犯錯:-P 1.2 為什麼我們不在意實作細節? Ans: 重構時只在乎受測程式的「輸出結果」與「預期結果」是否保持一致 。 因此,對一個物件進行測試時,只需要測試其公開方法(Public Methods),並不需要測試受保護方法(Protected Methods)與私有方法(Private Methods)。正確的設計下,測試完所有公開方法後,所有的受保護方法與私有方法都會被執行完畢。若出現沒有被執行的方法,表示該方法該被遺棄,或移動至屬於這個方法的類別。 1.3 為什麼不在意不明確且未測試的行為? Ans: 還沒確定一段程式碼的行為是否符合預期之前,不可以對其進行重構! 遇到一段行為不明確的程式碼,可以對其撰寫單元測試,利用輸入的資料與輸出結果,來理解這段程式碼的用意與行為。 當這段程式碼有單元測試保護的情況下,才可對其進行重構。 1.4 為什麼不關注效能? Ans:一般來說, 不會在剛開始重構的階段就去在意效能,只在意程式碼是否有保持正確的輸出 。 但是如果一個實作在太慢,我們就有必要先修改實作了! 如何對效能進行測試?透過 Benchmarking 套件,可以將執行函式的時間點當作「輸入」,並將運作完成的時間當作「輸出」。取時時間差回