的TDD圈:測試 - >代碼 - >重構,我們應該什麼時候開始重構?
"Write failing Test" -> "Write Code to fit a Test" -> "Refactor"
在「編碼」步驟中,我們假定編寫代碼儘可能簡單,只是爲了解決一個失敗的測試。在真正需要之前,我們不應該編寫複雜的代碼。
下一步是重構。我們應該重構剛剛寫的代碼嗎?我認爲沒有真正的意義,因爲只要測試通過,我們應該對代碼感到滿意。
可能重構活動應該被某些東西強加,比如代碼寫入是由失敗的測試引起的。這裏是一些可能的因素:
- 下一個測試寫入需要在系統(重構)的一些變化
- 性能差。我們需要在不破壞功能的情況下對其進行改進
- 代碼審查顯示編寫的代碼很難理解。
您看到啓動重構的其他原因是什麼?
而且,這是正確的方案:
"Write failing Test" -> "Code" -> "Refactor" -> "Write failing Test"
或者可能是它應被視爲
"Write failing Test" -> "Code/Refactor" -> "Write failing Test"
+
"External factor (like bad performance)" -> "Refactor".
我只想強調'Refactor-> Refactor-> Refactor'節會導致無限制的變化,這會吸收大量的開發時間。還要注意,在每**代碼更改之後,您應該再次運行測試,無論該代碼更改是新功能還是僅重構。 – quamrana
考慮我們編寫了一個應用程序,並且現在它允許我們列出任務併發布新任務。但要通過測試,就足以擁有全球任務列表。當然,客戶希望「任務能夠堅持下去」。我可以決定一個好的做法是實施IRepository。我需要現有的代碼來使用它。所以我重構了確保他們調用IRepository的方法。這次重構是由新的用戶故事引起的。總之,我試圖弄清楚的是 - 我們可以使用用戶故事/測試來驅動代碼編寫,還是重構本身?你怎麼看? – alex2k8
我們正在從TDD轉移一點,所以我會盡量縮短。 *重構*的定義(在TDD世界中)是在測試結果爲綠色之前,您不會開始重構,除非它們是綠色(再次/靜止),否則您不會完成重構。所以他們是一個有用的工具,但他們不能真正「驅動」重構。 我對用戶故事實踐中的INVEST很有紀律。我總是試圖重構必要的重構成爲用戶故事的一部分,就像你上面所做的一樣。我永遠不會有一個故事「重構成IRepository」,但我會把它作爲一個有價值的面向用戶的功能的組成部分。 – ndp