http://www.martinfowler.com/bliki/IsChangingInterfacesRefactoring.html

リファクタリングの境界線のひとつ。

部分的なインタフェースの変更はリファクタリングか?

答えは簡単——インタフェースの変更はリファクタリングだ。 もちろんすべての呼び出し元を変更する必要はある。 このよい例がメソッド名の変更だ。 このインタフェースの変更によるリファクタリングは、 ほとんどすべてのリファクタリングツールでサポートされている。

すべての呼び出し元を変更するというのが、この種のリファクタリングでの肝となる。 インタフェースの宣言を変更しただけでは、システムは壊れてしまうので、 リファクタリングの定義が示すような振る舞いを保った変更にはならない。

インタフェースの変更によるリファクタリングは、あなたがすべての呼び出し元を把握しているという前提に立っている。 そのため、PublishedInterfaceを扱うときには注意が必要だ。 PublishedInterfaceでは、インタフェースそのものがシステムの振る舞いとみなされるからだ。

動的型言語では、この種の変更は比較的ひどいことになってしまう。 静的型言語では、様々な点でインタフェースの呼び出しについて縛りを設けているため、ここではうまいことやってくれる。 リフレクションを使って呼び出しというのも、その箇所が見つけられずにひどいことになる。 文字列のメソッド名を実行時に組み立てるなんてのも、これまたひどいことになる。 つまり、ここでもやはりテストが重要になってくるのだ。 たとえリファクタリングツールのある環境でもだ。