ちゃぱブログ / エンジニアリング / マネジメント

とあるプロダクトの運用組織のマネジメントしてる人の雑記。主にエンジニアリングやマネジメントのことを書きます。ときおりプチ情報も

書籍「テスト駆動開発」を読んで感じたこと

はじめに

テスト駆動開発」「TDD」、もちろんキーワードとしてはずっと知っていたけど、自身のキャリアの中で真剣に学ぶタイミングを逸していた。最近勉強している「ドメイン駆動設計」の中でも「テスト駆動開発」の話は出るし、ajito.fmの古い回をちょうどよく聞いたこともあり興味が再燃。きちんと理解しようと和田さんの「テスト駆動開発」を手に取った。そこで感じたことを記しておく。

 

書籍の読み方

この本を読むにあたって大事なことは2つあるかなと思っている。

ひとつめは、「写経」すること。ふたつめは、「付録C:訳者解説」から読むこと。

1:「写経」すること

写経することについては、書籍のP.305にも書かれている。実際に自分が思ったことはこのページに書かれてしまっているのだけど、以下のようなことを思った。

・写経をすることで優れたプログラマーが何を考えながらコードを書いているかを追体験できる

この書籍は、試行錯誤の過程もそのまま書いているので特にオススメ。

・別の言語で写経をするとさらに学びが多い(自分はPythonで写経した)

書籍でレッドになるところがグリーンのまま進むこともあり、なぜだろうと考えると言語仕様によるものだった、ということも多々あり、言語の特徴が見えてくる。

2:「付録C:訳者解説」から読むこと

自分は残念ながら最初から読み進めてしまったけれど、これは絶対にしたほうが良い。内容が古びているわけではないのだけど、やはり初版の出版から20年近く経過していることもあり、変化がたくさんある。付録Cでは、その全体像を丁寧に解説してくれている。全体のマップができた中で、この本を読むことで、位置づけがクリアになっていくと思う。

写経の中での気づき

第Ⅰ部はJavaで書かれているけれど、これをPythonで書き直した。お恥ずかしながらソースを公開してみる。

GitHub - as-chapa/tdd_python

写経をしながらメモを残していたのだけど、以下のようなことを思っていたらしい(早くも記憶が遠のいていく・・・)

・「同一性」の判定で悩んだ

Pythonだとインスタンス化した際に、別のメモリ空間に保存されるのでassertEqualsが正しく動かないことがあった。結局「__eq__」を実装して対応した。

Pythonって動的型付けなんだなぁ

いや、まぁ、そんなのは知ってたんだけど、いざ静的型付け言語である Java から書き直してみると、違いを感じるところが多かった。意識的にやろうと型ヒント書きまくったらソースがごちゃごちゃして見にくくなったり。

 

テスト駆動開発の勉強という目的もだけど、Pythonの勉強にもなった。この辺の話はもうちょっと違う軸も入れて、整理して書きたいなと思う。

他に感じたこと

読み始めるきっかけのひとつになったajito.fmの回を、読み終えた後に聞きなおしてみた。結構同じようなことが話されていて、「わかるわぁ~」と思いながら聞けた。和田さんのこの本に込めた想いとか狙いも話されているので、より深く理解する手助けになるかと思う。オススメ。

ajito.fm