http://martinfowler.com/bliki/RefactoringBoundary.html

リファクタリングMLで「リファクタリングとは何か(何ではないか)」といった議論があった。 このように、ピンの上に何人の天使が立てるか (how many angels fit on a pin) といった不毛な議論をいつもやらかしてしまう 。 しかし、リファクタリングの境界線について考えることは、いくらか意義があるように思う。

リファクタリング本での定義は、 わざと略式にしておいた。 自由に解釈できるフレーズが2つほどある。

  • 外部から見たときの振る舞いを保ちつつ…:「外部から見たときの振る舞い」とは何なのか曖昧にしてある。基本的に、ソフトウェアが以前の挙動を続けているという意味なのだが、如何様にも解釈できる。

  • 理解や修正が簡単になるように…:これはリファクタリングの目的を表している。プログラムの変更は数多くあるが、リファクタリングとは、理解や修正が簡単になるための変更だと私は思っている。同じ変更でも、目的が異なれば、それはリファクタリングとは言わない。

リファクタリングの本質は、一連の振る舞いを保ったままの小さな変更にある。 「リファクタリング」は正式に定義できるようなものではないが、 非常に厳格な用語である——リファクタリングの誤用は避けたい。 正式に定義することは出来ないが、事例を考えることは有益だと思うので、 いくつか bliki にエントリしていこうと思う。

  • IsFixingAnUnknownBugRefactoring
  • IsOptimizationRefactoring
  • IsDeclarationOrderingRefactoring