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。