リファクタリングとはソースコードのエントロピーを小さく抑えることであり、これを言い換えれば「設計のヒステリシスを小さく抑えること」なんじゃないかと思う。 例として、機能A と 機能B の2つの機能を備えたソフトウェアの開発を考えてみる。 最初から 機能A と 機能B の2つの機能が必要であることを知っていれば、全体を見渡した奇麗な設計は比較的容易である。最初から 機能A と 機能B に共通の構造を抽出することも出来るだろうし、抽象化されたインターフェイスを用いたオブジェクト指向設計も出来るだろう。 しかし、現実には最初から全体像を知ることは難しい。まず 機能A の機能を要求され、次に 機能B の機能が要求される。あるいは逆の順序で、最初に 機能B が要求されて次に 機能A が要求される。最初の機能に着手している時点では、そのあとに要求される機能のことは全く知らされていない状態だ。 次の3つ