🐢

「テスト駆動開発」をTypescriptで実践

2024/10/14に公開

以前こちらのPodcastで「TDD」について興味を持ち、最近になってようやく書籍:「テスト駆動開発」を購入したので、実際に手を動かして学習しました。
今回実践したのは、書籍内の第I部だけ。書籍のサンプルコードはJavaでしたが、私はTypescriptでクラスをあえて使わずに実装しました。(私が悪戦苦闘した軌跡はGitHubに残します...)
https://github.com/aki-kun-desu/practice-tdd-2024
実践した感想を最初に言うと、難しい部分も少しあるが、やり方としてはかなり好感触で業務でも実践したいと思いました。
それについてこの記事残そうと思います。

「テスト駆動開発」

簡単にテスト駆動開発について簡単に紹介します。
大きく4つのステップでできていて、

  1. テストリストの作成。このテストには都度追加してよい。
  2. リストから1つ選んでテストを書く。このテストが失敗することを見届ける(レッド)
  3. 実装して再度テストを実行し、今度はテストが成功することを見届ける(グリーン)
  4. 3.のコードをリファクタリングする。1.へ戻って繰り返す。
    となります。
    このためTDDはレッド・グリーン・リファクタリングと言われていますね。

良かった点

問題の単純化

「テストリストから1つ選んで」という部分が、問題を単純化するのに非常に大きな要素だと思いました。設計→開発の順だと、問題を大きくとらえてしまいますが、TDDでは1つのことに集中すればよいので、問題が単純化され、スムーズに実装ができると感じました。
これの問題の単純化を仕組みとして取り入れている点がTDDのイケてるポイントだと思いました。

フィードバックループ

テストを書いているので、今の実装や改修がうまくいっているのか・そうでないのかが即座に分かります。TDDでは無い場合、フィードバックを受けれるのが、TDDで行うより後になることが多いと思います。テストは自分の実装の道しるべです!

難しい点

個人的に難しいなと思ったところを説明します。

テストリスト追加

実装を進めていく中でテストしたいことをリストに追加していきます。このリストが結構難しくて、本を読んでいるときはなるほどとなるのですが、いざ自分が実践するとなると、ここまでリストに起こせるかな?と思ってしまいます。
特に処理の共通化については、出しきれる自信がありませんでした。
まだ自分の経験が浅いだけで、やっていけばこの辺の嗅覚は身につくのかなと思っています。

設計とメタファー

TDDでは実装をしていく中で設計を行います。この設計について説明しているのが12章なのですが、
このあたりも難しかったです。
内容は理解できるものの、これも実践できるかと聞かれると、難しいだろうなと感じてしまいます。
特にメタファーは、経験とセンスが問われそう...と思ってしまいました。これも要学習ですね。

余談

書籍ではJavaを使って紹介されているのですが、私はTypescriptでクラスを使わずに書籍と同じ実装を行いました。それによって、Typescriptの書き方や仕様に関していろいろと学習することができました。このようなアプローチは、書籍で得られるものとは異なった発見があるので、またこういった本を読みながら手を動かす系の学習では試してみようと思いました。

おわりに

実務でも使ってみようと強く思いました!

Discussion