LoginSignup
5
6

書籍『Everyday Rails』 で学ぶテストファーストプログラミング

Last updated at Posted at 2024-04-03

はじめに

参画予定の案件でRspecを使う機会がありそうなので、予習も兼ねて書籍で基礎から勉強してみました。
本書では、11章 テスト駆動開発(TDD)に向けてにて、テストファーストプログラミングを実践できる部分がありました。これが興味深かったので紹介と、今までの開発サイクルと比較してみます。

書籍について

学習に使用した書籍

Everyday Rails - RSpecによるRailsテスト入門

書籍詳細

12章で構成されていて、RSpecの基礎知識から学べるような書籍でした。
章を進めるにつれてリファクタリングもしていく感じでした。

目次
1. イントロダクション
2.  RSpec のセットアップ
3. モデルスペック
4. 意味のあるテストデータの作成
5. コントローラスペック
6. システムスペックで UI をテストする
7. リクエストスペックで API をテストする
8. スペックを DRY に保つ
9. 速くテストを書き、速いテストを書く
10. その他のテスト
11. テスト駆動開発に向けて
12. 最後のアドバイス

Rails 7.1 RSpec Rails 6.1に対応
2024/01/09にアップデートされたばかりのようです。

テスト駆動開発について

テスト駆動開発(TDD)は人によって概念や定義が異なることがあるそうです。

今回は、テスト駆動開発の翻訳者をされている和田 卓人さんのブログ、【翻訳】テスト駆動開発の定義を参考に記載します。

テスト稼働開発(TDD)の定義

開始条件と終了条件があり、条件分岐と状態遷移の組み合わせによって構成されたプログラミング手順、ワークフローのこと

テスト駆動開発を構成する技術プラクティス

自動テスト
テスティングフレームワークを使ってテストコードを書くこと(あるいは、書かれたテストコードそのもの)

開発テスト
開発者が自分でテストコードを書くこと、開発者自身が自動テストを書きながら開発すること

テストファースト
テストコードを実装よりも前に書くこと

この記事のおかげで、初学者の自分でも少し区別しやすくなりました。

これらを考慮した上で、今回学習したものをテストファーストの分類と認識した上で話を進めることにします。

比較してみる

テストファーストを初めて実践したので、今まで自分が経験した開発手法と比較してみます。

今までの開発

サイクル

実装 → テスト → リファクタリング

メリット

  • 時間をかけすぎず実装できる
  • 実装の自由度が高い

デメリット

  • テストに抜け漏れがあると、不具合の発覚が遅れる
  • リファクタリングに気力が必要

テストファースト

サイクル

テスト → 実装 → リファクタリング

メリット

  • テストから先に書き始めることによって、コードがどのように振る舞うのかを考えることができる
  • テストが失敗することで次に作業するべきゴールがわかる
  • 品質が上がる

デメリット

  • 要件を満たすテストコードを書くために、時間が必要

比較してみて自分が感じたこと

現在は上司にレビューをいただける環境にいるので、レビュワーの負担にならないように心がけています。
だからこそ、テストファーストのメリットにある、早い段階で実装漏れがないかを確認できる点に魅力を感じました。

また、直近ではボリュームが大きいissueを任せていただくこともあるため、テストファーストを採用することで、切り分けがしやすくなり作業を効率的に進めることができそうです。

(ただ、今の自分に合っているサイクルで言うと、今までの開発なのかもしれません。)

作業内容やプロジェクトによってどちらのサイクルで進めるのが良いかの判断をして、使い分けることができるようになるのがベストに感じました。

おわりに

RSpecを学習する目的で購入した書籍でしたが、一番興味深かったので記事にしてみました。

これまで、自分はテスト駆動開発(TDD)とテストファーストを同じものと認識していました。
違いに気付くことができたのは、記事を書くにあたり、社内のエンジニア数名にレビューをいただけたことがきっかけでした。

その中でも、記事内のテスト駆動開発についてに記載したブログは、とある方にいただいたフィードバックでご教示いただきました。

このフィードバックをくださった方はZennで記事を投稿されています。ぜひ併せてご覧ください↓
AHAスタックでTODOアプリを作った

この記事を書くために使用しているマークダウン記法も、実はインターン初日に「これ使えるようになると便利だよ」と声をかけてくださった方のおかげで今こうして自然に使えるようになっています。

業務以外のことでも、このようにレビューをしてくださる方々がいて、新しいことでもまずはやってみることができて、日々学びがあり楽しいです。

また新しいことを学んだ時には、不定期で投稿するようにします。

5
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
6