Refactoring所追求的目標和過程往往使得代碼的Bug無處遁形。Eric E. Allen在IBM中developerWorks的bug pattern中的一個模式就是copy-and-paste方法造成代碼重復,從而產生bug的一個例子。這個 Rogue Title Pattern是一個非經常見的bug例子,當你修正了程序中一個bug時,你發現程序運行的結果是你明明已經修正的bug還在作怪。究其原因,就是程序員在實現一個功能的時候把一段代碼復制過去,稍加修改,就成為一個新的函數。你修改了一個地方,但卻忘了另外一個地方。
Alternative Classes with Different Interfaces 做相同事情的方法有不同的函數signature,一致把它們往類層次上移,直至協議一致。
Incomplete Library Class 要建立一個好的類庫非常困難。我們大量的程序工作都基于類庫實現。然而,如此廣泛而又相異的目標對庫構建者提出了苛刻的要求。庫構建者也不是萬能的。有時候我們會發現庫類無法實現我們需要的功能。而直接對庫類的修改有非常困難。這時候就需要用各種手段進行Refactoring。