kagamihogeの日記

kagamihogeの日記です。

レガシーコード改善ガイド

「テストがないコードはレガシーコードだ」のあおり文句が実に眩しい一冊。本書を一言で紹介するなら、リファクタリングの実践書であり、オブジェクト指向プログラミングの参考書であり、テスト駆動開発の教科書である。感想に個人差はあるだろうけど、かなり多面的な顔を持つことに異論を唱える人はいないであろう一冊です*1。タイトルだけに釣られて買うと、その内容の豊富さに戸惑うかもしれませんが読後の爽快感はかなりのものです。

数年プログラマをしていれば、誰にでも経験するであろう「すでに動いているコードの動作を崩すことなくその部分のコードを修正や機能を追加する」という作業。たいていの場合、これは中々に難易度の高い仕事になる。本書でもそのことについて触れていて「編集して祈る」という名前をつけている。

本書を読むまでは、俺は「編集して祈る」スキルはプログラマに必須なものだと考えていた。あるコードに手を入れる際、ただ単に手を入れるのではなく、影響が及びそうな箇所を念入りにチェックしてから注意深く編集する。これは時に異常な集中力を要求されるだけに必要な資質だと考えていたが、テストコードによって状況は少々変わる。

テストコードは既存コードの動作を可視化してくれる。プログラマが影響がおよびそうな箇所を探し回るのではなく、テストコードの整備と自動化によってその作業を担保させる。もちろん、プログラマがテストコードを書く必要はあるし、テストで保護可能な設計を維持しなければならないし、十分なカバレッジを確保することが条件ではある。ただ、コードに手を入れる度に毎度毎度影響がおよびそうな箇所を探し回るスキルとコストに比べれば、テストコードの整備に要求されるスキルとコストは安いように感じられた。

しかし、俺はプロジェクト全体で TDD を取り入れた状態で働いたことがない。なので、本書に書いてあることが実感として良いやり方に見えてもそうと断言できないのが歯がゆい。とはいえ俺自身が過去に遭遇した幾つかの事態を想定してみるに本書の内容は良いセンいってると思う。例えば「Struts の Action にコードがベタ書きされている。テストコードの整備と自動化のメリットは分かった。でも一体どうしたらこのコードをテストで保護できるだろう?」とか。無論、動いているコードに触るな、が金科玉条のプロジェクトにカンタンに導入できるかどうかはまた別問題ではあるのだけど……

本書で解説しているぐちゃぐちゃなコードに挑む方法はまとめれば一つ。コードをテストコードで保護し、それから変更する。テストで保護できないなら、保護できる設計に組み替えて、その箇所をテストコードで保護する。まぁそれが簡単にできれば苦労しないよ、って話なワケですが。そのためのテクニックがリファクタリングオブジェクト指向プログラミングです。

本書はリファクタリングのケーススタディ集と位置づけることもできる。また、コードをテストコードで保護するためには依存関係の排除などが必要であり、その設計問題の解決にオブジェクト指向プログラミングのテクニックが役に立つ。本書は、テスト駆動開発という主軸をリファクタリングオブジェクト指向プログラミングで動かす手法を書いた本といえる。最初に書いたように、この本はリファクタリングオブジェクト指向プログラミングのテクニックを純粋に学ぶためにも役立つので、すごく多面的な性質を持っている。

俺はこの本でまた一つオブジェクト指向プログラミングの理解が進んだ。特に「第 25 章 依存関係を排除する手法」は具体的なコードを題材にオブジェクト指向プログラミングのテクニックを駆使し、疎結合な設計に組み替えるやり方が紹介されている。この章はインタフェースや継承をそう使うのか、と眼からうろこな局面が多かった。

また、影響スケッチやペーパービューなどのレガシーコードに挑んだり設計したりするときに役立つツールの紹介がある点も見逃せない。これらは大仰な名前がついてるけどなんてことなくて、紙に自分の考えをラフスケッチしたりとかプリントアウトしたソースコードにペンで色つけたり囲ったりして思考を整理するやり方に名前を付けてるだけである。こういうことにも紙幅を割いている辺り、著者のレガシーコードに対する深い理解が感じられる。

兎にも角にも、新しい設計の視点が得られるすばらしい一冊でした。

レガシーコード改善ガイド (Object Oriented SELECTION)

レガシーコード改善ガイド (Object Oriented SELECTION)

  • 作者: マイケル・C・フェザーズ,ウルシステムズ株式会社,平澤章,越智典子,稲葉信之,田村友彦,小堀真義
  • 出版社/メーカー: 翔泳社
  • 発売日: 2009/07/14
  • メディア: 大型本
  • 購入: 45人 クリック: 673回
  • この商品を含むブログ (145件) を見る

*1:本書の要約を知りたい場合、先に訳者あとがきを読むことも一つの選択肢です。実にすばらしいまとめ方がしてあります。