🎷

テスト駆動開発実践:ゆめみさんの模試を題材に

2021/10/10に公開

この記事は何

  • 最近まじめにテスト駆動開発を知りたいと思い、書籍を購入して写経を行っていました。
  • おおよそ完了しましたが、あと一歩と言うところで飽きが…。
  • そんな折、こちらこちらの記事を拝見し、ゆめみさんの入社試験模試を知りました。
  • シンプルに見える内容だし、テスト駆動開発の実践として取り組むのによいかも!と考えました。
  • 言語は何でも良かったですが、個人的に好きなGo言語を選択しました。

TDD_cover
Amazonさん引用

問題設定

  • 詳細は公式HPをご覧いただくのが良いかと…。
  • https://www.yumemi.co.jp/serverside_recruit
  • ざっくり言うとあるゲームのランキングを作成する問題です。同じプレイヤーが何度もエントリーでき、平均点で競います。
  • 作成するのはCLIアプリケーションで、必要なデータを格納したcsvのファイルパスを引数として渡します。

本題

ここからは時系列的にToDoの更新、テスト作成、実装の繰り返しを記載していきます。このループを繰り返すことで少しずつ足場を固め、実装が出来上がっていくのがテスト駆動開発の面白いところだと思います。

スクラップ機能でまとめた方が流れがわかりやすいと思いましたので、こちらを参照ください!

https://zenn.dev/foxtail88/scraps/17e94c540e0771

このまとめをしながら、あ、平均点四捨五入する仕様だったと気がついたのですが、上記スクラップ中は四捨五入しない仕様のままになっています。下記の最終アウトプットにおいては修正済みなので、正しく動作するコードを参照されたい場合は、最終アウトプットをご覧ください。

最終アウトプット

最終的なコード一覧はこちらに公開しています。

https://github.com/tenkoh/tdd-moshi-share

実践した感想

  • テストを逐次考える中で、実装に対する洞察が生まれた気がする
  • 細かくテストを回そうという意識を持つので、メソッドも細かく分けて実装する結果になった
  • 書籍中でも語られているが、テストコードがあるおかげで、方針修正を思いついた時にもあまり恐れることなく試すことができたように思う
  • テスト駆動開発は知識ではなくスキルという表現が書籍中でもされていたが、確かにその通りだと思った。何度も実践してスキルとして自分の中に定着させたい。
  • 結果的に引用先の記事とはだいぶ違う実装になってます。本質的なロジックは同じですが。なかなか興味深いですね。
GitHubで編集を提案

Discussion