クリンジリーのリファクタリング

2003年6月3日

ロバート・クリンジリーの最近の記事により、最近リファクタリングコミュニティで小さな話題が巻き起こっています。彼はリファクタリングを批判しています。フィリップは、リファクタリングメーリングリストで、「彼は読書するつもりもない本について書評を書く「懐疑論者」のように聞こえます」という非常に抑制の効いたコメントで、その反応をまとめています。

クリンジリーがリファクタリングについてどれほど理解しているかは明らかではありませんが、行動を維持する変換プロセスであるという主なポイントは確実に理解しています。彼がすることは、リファクタリングが不適切に使用されるさまざまな方法を強調することです。

1つの誤用は、変更されないコードのリファクタリングです。リファクタリングの全体的なポイントは、既存のコードの設計を改善することです。適切に設計されたコードの価値は、変更が容易だということです。したがって、将来変更されることが予想されるコードをリファクタリングする必要があります。安定したコードをリファクタリングしても意味がありません。

もう1つは、他のチームのコードに介入してリファクタリングを行うリファクタリングチームの例です。これは私が避けるために金を払うような「サービス」です。プログラマーは自分のコードのみをリファクタリングする必要があり、他のものを操作するべきではありません。XPチームは共同コード所有権を使用しており、チームのコードベース内のどのコードをリファクタリングしても誰もが奨励されますが、これはそのチームのコードにのみ適用されます。他のチームに知らせることなく、他のチームのコードをリファクタリングするために1つのチームがさまようという考えは、私がお勧めするものではありません。

最後に、彼はリファクタリングがコード変更のあらゆる形式のカバーに使用されることを懸念しています。他の場合と同様に、私も彼に100%同意します。リファクタリングを何かを再構築するのと同じ意味で使用することは、長い間私の不満の一つでした。リファクタリングは、非常に特定のプロセスであり、一連の小さな意味論を維持する変換を使用してコードベースを変更します。それは非常に特定で規律のあるプロセスです。コードを再構築する方法は他にもあり、有益かどうかは、リファクタリングではありません。

全体として、クリンジリーの発言の多くに同意しているようです。メーリングリストのコメントに当てはまります。全体として、クリンジリーが流行に指を指すことに熱心になってリファクタリングを誤って特徴付けているという意見に対して腹立たしい思いをしたのです。

確かに、クリンジーと意見が異なるのは、リファクタリングの 80% は時間の無駄であるという意見であり、ソフトウェアマネージャーは経費を節約するためにリファクタリングを中止する必要があるということです。リファクタリングのポイントは、設計の改善により変更が行いやすくなり、それによりリファクタリングが生産性を高めるというものです。リファクタリングを行う努力が報われるかどうかをプログラマーが判断する必要があることは確かですが、それは簡単に定量化できることではありません。しかし、人々が、事態をさらに悪化させるパッチを使用した、設計が不十分なコードの修正に時間を浪費しているのを何度も見てきました。リファクタリングは、この特定のデッドスパイラルから抜け出す方法であり、それが、私がリファクタリングを非常に価値のあるテクニックと考える理由です。