崖っぷちの男

たぶん技術っぽいネタ。ブログ名が決められない

テスト駆動開発入門

ケント・ベックの『テスト駆動開発入門』を読みました。

テスト駆動開発入門

テスト駆動開発入門

  • 作者: ケントベック,Kent Beck,長瀬嘉秀,テクノロジックアート
  • 出版社/メーカー: ピアソンエデュケーション
  • 発売日: 2003/09
  • メディア: 単行本
  • 購入: 45人 クリック: 1,050回
  • この商品を含むブログ (157件) を見る

Amazonでも書かれているようにちょっと翻訳がアレなところがあります。特に最初の部分は気になりますが、コードが多くなってくるとさして気になりません。

構成は3部構成で、最初の部では実際にTDDである機能を持ったオブジェクトを作っていきます。言語はJava

第二部ではxUnitライクなテスティングフレームワークをテストしながら作成。何を言ってるか分からね (略) 。色んな言語でテスティングフレームワークを実装するときの参考に。言語はPython

第三部では色んなテクニックやプラクティスのまとめ。


読んでて驚いたのはコード実装に入ったら1章1章がすごく短い。そもそもあまり分厚くない本なので気軽に読める感じ。

図書館にもうすぐ返却しないといけないのでこれを書いているけど、特に第3部は買って時々見返したほうがいいだろうなと思う。


自分なりにやっていたTDDとそんなにやり方が違っていなくて安心したけど、いくつか違っていたところがあるので最後にメモ。

まずテストリストを作ること。要はTODOなんだけど、自分は特に作らずにやってしまっていた。

あと実装とテストコードの重複をなくすという考え方。あるメソッドが特定の値を返すことを確かめるテストをすぐにグリーンにするには、そのメソッドでその値をリテラルで書いて返すようにするのが一番早いけど、そこからどう修正していくか考えるとき、テストコードと実装コードに重複があるから修正しないとだめ、っていう考え方。自分はそういう考えじゃなくて、メソッドを試しに使ってみて、当然望んでいない動きをする (だってどうやっても同じ1つの値しか返さないから) のを確認した上で、このバグを修正するために新たにテストを書く、みたいなイメージでやってた。で結局2パターンの値を入れてそれぞれ正しくなる、っていうテストを書いてた。ちなみにこの方法は「三角測量」って名付けられてた。

あと「アサートファースト」ってやっていなかったと思う。テストを書くときはまずアサート文を書いてから、それに必要な変数やらを用意する式を逆算な感じで上に書いていく。必要なクラスとかメソッドとかまだなくても、こんなインターフェースが自然かな、て考えながら書く。そうするとその通りに実装したときメソッドの名前とか使い方とかが分かりやすいインターフェースになる。みたいなことだと思う。

あと他にも色々あるはずなんだけどざっと読んだのでとりあえずこれだけ。テストで行き詰まったときは買うはず。。。あと1、2章はざっと読んじゃったけど、時間があれば最初からクラス図を書きながら読んだ方がよさげ。リファクタリングの過程が目で見て分かると思われる。