Toshiyuki Kawanishi Blog


2008
7 . 6

第2回 Working Effectively With Legacy Code読書会

前回に引き続き、第2回 Working Effectively With Legacy Code読書会に参加させていただきました!
今回は、本のPrefaceとChapter 6〜Chapter 7が範囲。
Prefaceはm-takagiさんの素敵な訳で、この本の意図するところを説明してくださいました。「この本でいうレガシーコード = テストがないコード」というのが明確になりました。
Chapter 6はSprout MethodとWrap Methodのお話、Chapter7はフィードバックスピード & 公布済みインターフェイスの話、Chapter 8の前半はTDDの説明といった感じでした。
いろいろと議論するところがあるかと思いますが、どれも勉強になるお話でした。ただ、本文がもっとレガシーコード特有の書き方になっていると、さらに良かったかなと思いました(さらに読み進めれば書いてあるという説もあり)。

私が発表させていただた、Chapter 8の後半は差分プログラミングの話。ご存じのとおり、差分プログラミングとは継承を使ったプログラミング手法のこと。継承に関する話題がいくつか紹介されていました。
ただ、結局この節で、著者が何を言いたかったのが不明なままでした。そこで私が立てた予想は以下の通り。
  • 予想1: 継承を使いすぎるのはやめましょう!という警告
  • 予想2: TDDと似ている機能追加手法を紹介
結局、私としてはドッチツカズで考え中です。
予想1にあるように、とりあえず継承を使うんだったら委譲しましょうというのは、まあその通りでしょう。
予想2はどういうことかというと、既存クラスの機能追加を試すために、まず、サブクラスを作る。そしてアルゴリズムがあってるという確認が取れた後、継承を使わない構造に変更するという手法が書かれているのではといことです。機能追加時に継承を積極的に使うのですが、あくまで中間状態として継承を使い、本実装では継承を残さないということです。あ、ちなみに継承による仮実装をする時にテストを書くので、そのテストがセーフティネットとなって継承を取り除くための変更が可能になります。
予想2の方法も機会があったら試してみたなと思います(いきなり委譲したほうがいいのでは......とも思いますが)。

また、今回は発表の手法もいろいろ勉強になりました。m-takagiさん、Kunitさん、moothさん、tenkomaさんの発表はどれも個性的で素敵でした。いろいろパクらせていただこうと思います。

とりあえず、私が見つけた参加者の方々の声はこちら

Working Effectively With Legacy Code
Michael C. Feathers
Prentice Hall


それから、個人的には懇親会で、t-wadaさんからTDDの写経(本の通りにコードを打つプラクティス)について直接お話しを伺えたのが、かなりためになりました。t-wadaさんは、Kent Beckの本をすべて写経しただけでなく、Part Iの内容をRubyで書いてみたりされているそうです。言語による違いに気づくという点でも勉強になるそうです。
私もMoneyをC++とPHPで書いてみようかなと思います。明日から写経や〜


テスト駆動開発入門
テスト駆動開発入門
posted with amazlet at 08.07.06
ケント ベック
ピアソンエデュケーション


最後になりましたが、幹事を務めてくださったせとさん、会場提供のn_shuyoさん、ご参加の皆様、本当にありがとうございました。是非、次回も参加させていただきたいです。