kagamihogeの日記

kagamihogeの日記です。

テスト駆動開発

昔、自分がどのようにプログラミングをしているか、を文章に書き起こせるか、という話を同僚としたことがある。それで書いてみようとしたのだが、すぐに行き詰った。最大の壁は自分の思考を文章にすることで、文章は基本的に上から順に読む線形の構造になるが、プログラミング時の脳内の思考は(おそらく)そんな単純ではない。他にも、あまり簡単な例にすると一般化されないし、かといって理論に寄り過ぎると実用性が無い……などなど。考え始めると、何をどれだけ書けば良く分からなかったので適当なところで諦めた過去がある。

そこで本書だが、テスト駆動に関する本ではあるものの、実質的には、どのようにプログラミングをすると良いのか、を解説している。数個程度のクラスから構成される機能を作るとき、いかに取り組めば良いのか。あるいは、おおむね一日単位のプログラミングにどのように取り組めば最適なパフォーマンスを発揮できるのか。

正直なところ俺はかなり感動した。自分が感じた文章化の壁をアッサリ乗り越えていたからである。どうやってこんなに読みやすい上にこんなにコンパクトな分量で済んでいるのかずっと考えながら読んでいた。最終的に、テストコードを書いてから実装する、という極めてシンプルなコンセプトに立脚しているから、という結論になった。どのページを切り取ってもこのシンプルなコンセプトに基づいた解説になっている。金太郎飴のように。この統一感は本当に素晴らしい。

テスト駆動の有用性だが、本書を読んで改めて学んだのは、見える化と不安への対処だった。見える化については言うまでもないが、本書はプログラマの心理状態への言及がとても多い。不安が不安を呼び、それが個人のパフォーマンスに壊滅的な影響を及ぼす。これを本書ではかなり重視しており、それを飼いならすためにテスト駆動を上手く使おう、としている。

不安の対処に関する箇所も十分実用的だが、他のテクニック的な箇所も実用的なアドバイスが多い。例えばTODOリストの活用だが、これは自分もマッタク同じことをしていたので驚いた。

テスト駆動が万能かというと勿論そうではない。これは、あるスタイルが合う人合わない人がいるという程度の話ではない。本書 p.274「TDDは誰のためのものか TDDは『より良いコードを書けば、よりうまくいく』という素朴で奇妙な仮説によって成り立っている」とある。これの前段にはTDDはコピペプログラマには向かんよね、とサラリと書いてある*1

そんなに分厚い本ではないが、サンプルコードは一部Pythonなものの大半はJavaなので正味の文章量はそうでもない。たかだが300ページちょいの本でこれだけの密度の本が書けるものなのか、と感動した一冊でした。

テスト駆動開発

テスト駆動開発

*1:良いコードが良いビジネス上の成功に繋がるのか的な議論もあるだろうが、さすがに本書の内容からはズレるだろう