翻訳書である本書が発売されたのは5年以上前で、原著である『Working Effectively With Legacy Code』はさらに古く2004年に出版されたのだが、2015年の今に読んでも面白くてためになる本である。
システム保守の現場でありがちな、構造が複雑で理解できないようなコードに対する分析手法・対処方法について解説。コードを理解し、テストできるようにし、リファクタリングを可能にし、機能を追加できるテクニックを紹介。
帯にも書かれている通り、「テストが無いコードはレガシーコードである」と定義した上で、「そんなこと言ってもテストコードが1行も無い上に1クラス10,000行あるクソコードの山をどう片付けるんだよ!?」という職業プログラマの悲哀への指針となる一冊だ。
TDDにも若干は触れているのだけど、よりページが割かれているのが、クソコードの山をトリアージしながら少しずつテストコードで保護して「マシな状態」を目指す実践的な方法である。使われているプログラミング言語はC/C++/Java/C#と、いわゆる「C系」が中心で、ラップや委譲、インタフェースの切り出し、擬装オブジェクト(著者はMockよりもFakeを好むらしい)、コンストラクタのパラメータ化による依存の排除といった王道かつ地味なテクニックが沢山解説されている。
シグネチャの維持をしたままコピーアンドペーストで良いからメソッドを分離させる泥臭いやり方や、グローバル定数の集合として定義されたSingletonクラスのテストコード整備方法なんかもトピックとして扱われており、テストのためならプロパティのアクセスレベルを緩くするのも止む無し、みたいに徹底した現実主義的な著者の姿勢が見える。
金融方面のプログラマとしてのキャリアを持つ人らしく、サンプルコードの多くはトランザクション処理のようなものが頻出する。「いやいや、こんなに綺麗でコンパクトなコードばっかりじゃないでしょ」と突っ込みを入れたくもなるが、曰く、省略された箇所には最低でも500行以上のクソコードが隠れていると思って読んで欲しいとしっかり予防線が張られていた。
まだ全部は読んでいないのだけど、非常に面白いです。パターンのカタログ集としても、いまどきGoFのパターン本なんかを読むよりも現実に即していて役立つんじゃないかと思う。ちなみに僕はC++は読み書きまともに出来ない人なので、C++でケーススタディしてる章は、どうしても流し読みになってます。
最近のツッコミ
参号館 日記(ariyasacca)