テスト駆動開発入門

ケントベック

TDD(Test Driven Development)である。
ケントベックの本といえば、「XPエクストリームプログラミング入門」だが、
あれを読んだ時には、翻訳が悪いので、読み難いと思った。

しかし、この本は、やっぱり読み難い。と言っても、翻訳している人が基本的
には同じという事情もあるので、ケントベックの責任ではないかも知れない。

しかしなあ。この読み難さは、ケントベックの責任が大きいのではないかと。

揚げ足を取るようだが、たとえば、パラっとめくって見えた一文。
『TDDの効果の一部は確かに欠陥の減少から発生する。』
なんてのは、日本語としては、普通じゃない。

と言って、訳者を責めたくもなりつつ、

『仮実装を使用する際、筆者は子供を後部座席に乗せて遠くまで自動車旅行を
している時のことを思い出す。最初にテストを作成し、若干見栄えの悪い方法
で動作させ、そしてこう言う。「この車を止めて、別のテストを作成するなん
てことをやらせるな。この車が止まったら、おまえたちは後悔する」。

「わかったわ、お父さん。私がコードをきれいにするわ。そんなに怒らない
で」』

この逸話の展開は私にはまったく意味不明である。まあ、その前のページのピー
ターハンセンの話はもっと理解不能であるが、次の行に『筆者にもわからな
い』、とあるので、、しかし、筆者にもわかりにくい話をわざわざ載せる必
要もなかったと思うのだが。

おなじ不満は「XP」本にもあって、たとえば、テストの重要性をアピールする
重要な宣言、

『XPにおけるテストとは次のようなものである。プログラマがコードを書くた
びに、それが動くと考える。コードが動くと考えるたびに、そこから自信を持
ち、プログラムの形にする。その自信は自分自身の役に立つ。自信はプログラ
ム内にあるので、他の誰もがその自信を使うことができる。』

この文章は、言いたいことはわかるのだが、読み難い。もっとスマートな、簡
潔な一文にすべきだ。

私は、XPのテストの重要性を人々にアピールしたく思い、XP本のなかから、XP
におけるテスト、が書かれた文を探したが、これでは引用できない。
(それは、訳のせいだけではなく、ケントベックのキャラクタによるような気
もする)。

もっと、開発の現場で標語として貼っておきたくなるような文であるべきだろう。

怒られそうだが、XPとかテスト駆動開発をてっとりばやく知りたければ、日本
人の本を読んだ方がいいと思う。少なくとも私にとっては、Ruby極道編の方が
読み易かったし判り易かった。

「smalltalkベストプラクティスパターン」は訳者が他の本とまるっきり違う。
はたして読み易いだろうか。ちょっと興味ある。

ちなみに本文中一行、ケントがRubyを使う場面がある。また、あとがきで、マー
チンファウラーがRubyで仕事をした話がある。そんなにも普通な言語になったの
ね。

メモ

内容的には、知っていたことと、それほど大きな差はないが、まあXPの方々が
どのように、テストを作り、コードとテストを保守していくか、というのは
ちょっと参考になった。

- まず定数でテストを通す。
- (コードとテストでの)重複をリファクタリング
- 三角測量(2種以上のテストで問題が起るとき一般化)

なんてのは、実践的。

def testplus
 a=Sample.new
 assert_equal(3,a.plus(1,2))
end
に対して、まず、
class Sample
  def plus(x,y)
    3
  end
end

と実装してレッドからグリーンに。
テストの3と、コードの3が重複してるから、1+2とかに置き買え、さらに、

def testplus
 a=Sample.new
 assert_equal(3,a.plus(1,2))
 assert_equal(10,a.plus(4,6))
end

を通そうと思ったら、

class Sample
  def plus(x,y)
    x+y
  end
end

になる。ま、この程度だと明白な実装になってしまうのだが。