見出し画像

テスト駆動開発 を読んだ【書評】

こんにちはtozicaです。
今日は日曜日!

この記事は、エロゲーとか作ってるクリエイターの制作日記です。
noteなので直接的なエロ表現はありませんが、えっちな話が苦手な人は気をつけてね。

注意書き

テスト駆動開発 を読んだ

この前に読んだ「達人プログラマー」と同じくらいの時期に購入して、それからずっとKindleライブラリの肥しになってた「テスト駆動開発」なんですけど、こっちもそろそろ読もうかなぁと思って最近読み進めていました。
昨日ちょうど読み終わったので、今日はその感想を書きます。

本書は、自分たちのコードに自信を持って開発を続けたいプログラマ、チームリーダー向けに、テスト駆動開発(TDD)の実践方法を解説した“Test-Driven Development By Example”の日本語版です。テスト駆動開発の考案者であるKent Beck自身によって書かれた原典を、日本におけるテスト駆動開発の第一人者である和田卓人氏が訳しました。

Amazon商品ページより

昨今では「テスト駆動開発」という言葉もすっかりメジャーになって、プログラミングにおける基本的なコーディング方法の一つとして知られるようになった感じもあるんですけど、個人的には今までよく分かってなかったんですよね。
それこそ「テストを最初に書くんだよね…?」くらいのなんとなくのイメージしか無かったので、せっかくなら基礎からちゃんと勉強しておきたいなぁと思いまして、この本を購入しました。

この本が最初に書かれたのは2003年頃で、当時はほとんど行われていなかった「自動テストを中心とした開発サイクル」を広めた、テスト駆動開発の原典とでもいうような本です。
今回わたしが読んだのは2017年に出版された再翻訳版なんですけど、時間の流れが速いプログラミング業界において十数年の時を超えて再び翻訳されるというあたりからも、この本の歴史的な重要性が推し量れるのではないかと思いますね。
そのあたりはこの前読んだ「達人プログラマー」にも通ずるところがあるかも。

ペアプログラミングを疑似体験する

テスト駆動開発(TDD, Test Driven Development)とは、ざっくり説明するなら、以下のような流れを繰り返しながらプログラムを書くテクニックのことです。

  1. テストを一つ書く

  2. テストを走らせ、失敗すること(レッドバー)を確認する

  3. テストが成功するように修正する

  4. テストを走らせ、成功すること(グリーンバー)を確認する

  5. テストが成功する状態を維持したままリファクタリングを行い、重複を除去する

本書の構成における最大の特徴は、このTDDというテクニックを、本書の大部分を使って「ペアプログラミングを疑似体験する」ような流れで説明している点です。
例えば第一章では「多国通貨を扱うクラスをどう実装するか」というのを、実際にTDDを使いながら実装していきつつ、軽妙な筆致と共に説明していきます。
ユーモアたっぷりの文章で丁寧に順を追って説明してくれるため、肩の力を抜いて読めるのがいい感じで、読んでるうちにだんだんアメリカのハートフル映画とかに出てくる感じの大柄であごひげをたっぷり蓄えたきさくなおじさんが自分の横に立って一緒にペアプログラミングをしてる気分になってくる。

あの恐るべきレッドバーが現れた。(中略)先ほど書いたコードを走らせ、結果が10となることを期待していたところ、実際には0だったことを伝えてくれている。残念!
いやいや、残念なんかではない。失敗は前進なんだ。いまや、失敗をはっきりと数えられるようになった。何となくうまくいっていないという、曖昧な状態よりもはるかに前進している。

テスト駆動開発28ページより

本書の最後に翻訳者の方のあとがきがあって、その中で「本書のコードを”写経”すると、まるでKent Beckとペアプログラミングをしているかのような体験ができた」みたいなことが書いてあるんですけど、確かにそれを実践できたらめちゃくちゃ効果的なんだろうなぁって思いましたね。
わたしはこの本を毎日お風呂の中で読んでたので、それはちょっと不可能だったんですけど。

テスト駆動開発のパターン

本書は大きく分けて3つのパートで構成されていて、そのうち第一部と第二部は上で書いたようなペアプログラミング的な流れでTDDを追体験するパートなんですけど、第三部ではより俯瞰的な視点で「TDDを行う際に起こりがちなパターン」が説明されています。
これがね~、めちゃくちゃ有用だった。

プログラマーなら皆知ってるであろう、GoFによる「デザインパターン」っていう概念がありますけど、この第三部で説明されるのはそういった類のものです。
つまり、TDDで開発を行う上で色々発生する「こういう問題に対してはこういうアプローチが有効だよ」っていうお決まりのパターンを色々書いてくれてる。
ありがてぇありがてぇ……。

第一部と第二部はTDDに入門する際には非常に有用なパートでありつつ、ある程度TDDに慣れたらあんまり読み返すことも無さそうでしたけど、第三部はある程度テスト駆動開発に慣れたあとでも末永くお世話になりそうな感じがしましたね。
もうちょっとTDDに慣れたらもう一回読み返してみようかな。

まとめ

そんなわけで今回は、テスト駆動開発の原典とも言うべき本を読みました。
読む前までは漠然と「先にテストを書けばいいんでしょ?」くらいの理解しかなかったんですけど、今ではだいぶ理解が進んだような気がしています。

とはいえ、こういうテクニックは見聞きしただけだともちろんダメで、実際に自分の手を動かしてみないことには習得できないものです。
今後のゲーム制作をテスト駆動開発で進めてみたりしつつ、ちゃんと自分の血肉にしていけたらいいなぁと思いました。
うーん、がんばっていこう。

おまけ

この書評を書き終わったあとに「そういえば著者のKent Beck氏ってどんな見た目なんだろう」と思ってググってみたら、ほんとにそのまま大柄であごひげをたっぷり蓄えたきさくなおじさんだったので笑っちゃった。
マジで想像してた通りの見た目。
そんなことあるんだ。

原著の著者であるKent Beck氏

おしまい。

いいなと思ったら応援しよう!