『リファクタリング』第15章 部品から全体へ

新装版 リファクタリング―既存のコードを安全に改善する― (OBJECT TECHNOLOGY SERIES)

新装版 リファクタリング―既存のコードを安全に改善する― (OBJECT TECHNOLOGY SERIES)

第15章 「部品から全体へ」 Kent Beck

リファクタリングを実際に体得したと感じるのはどんなときでしょうか。それは、みなさんが諦観を身につけ始めたときでしょう。それは、誰かの書いたコードがどんなにぐちゃぐちゃでも、それを改善し、進化し続けるようにできるという、絶対的な自信を感じるようになるときです。」

「自身を持ってリファクタリングをやめられるようになれば、それを体得したと実感できるでしょう。やめることは、リファクタリングのレパートリーの中で最も強力な一手なのです。コードが多少でも改善されていれば、それまでにやったことを統合してリリースしましょう。改善されていなければ、手を引きましょう。きっぱりなかったことにします。達成できなかったことは残念ですが、勉強させてもらったことに満足しましょう。」

リファクタリングは学習可能な技能なのです。」

  • 目標の選別に慣れる

リファクタリングは、真実や美を追求するために行うもの(少なくともそれだけのもの)ではありません。プログラムをわかりやすくし、ガタが来ているプログラムに喝を入れ直すために行うのです。」

  • 引き返す

「私は、2つか4つのリファクタリングを、その間のテストケースを流さずに連続して行います。だいじょうぶ、逃げ切れるさ。自身もある。経験も積んできたし・・・。「ドカーン」。あるテストが上手く行かず、どの変更がこの問題の原因なのかわかりません。」

  • 制御可能な状態に戻す。

「この自分のアドバイスに背いた報いの自己最高記録は、4時間で3回やり直したときです。制御不能になり、一旦引き返し、はじめはゆっくりと前進し直したのですが、また制御不能になり、そしてもう1度やり直したのです。」

「ゴミの山がどんなに醜く映ったとしても、問題を少しずつ減らすのだと自戒してください。新たな機能を追加しようとするときは、まずちょっと時間をとって、それを整理してからにしましょう。」

リファクタリングしていると、必ずコードが正しく動かないケースに出会うはずです。絶対に間違いありません。そのときに、誘惑に負けないでください。リファクタリングしているときの目標は、コードの計算結果を元のままに保つことなのです。それ以外の何ものでもありません。」

Kent Beckも自分と同じミスをしていると思うと励まされる。がんばろう。