koheitakahashiのブログ

2020.07.01にプログラマーとして生を受けた私が学んだことや、日常について徒然に書いていきます。

テストのピラミッドが大事 ~『初めての自動テスト Webシステムのための自動テスト基礎』~を読みました

はじめに

先日、FJORD BOOT CAMPの自動テストを学ぶプラクティスにOKをいただけました。

しかし、自分の中で、まだテストに関する知識が体系化されていな感じがあったので、『初めての自動テスト Webシステムのための自動テスト基礎』を読みました。

初めての自動テスト ―Webシステムのための自動テスト基礎

簡単にですが、学んだことをまとめたいと思います。

章立て

本書は以下のような章立てでした。

第Ⅰ部 ピラミッドの地図を作る

  1. テストのピラミッド
  2. ユーザーインターフェイステストに触れる
  3. レガシーシステムにUIテストを追加する
  4. 統合テストで点と点を結ぶ
  5. RESTfulなWebサービスの統合テスト
  6. ユニットテストで基礎を固める
  7. JavaScriptを使ったブラウザ上のユニットテスト
  8. ピラミッドを登る

第Ⅱ部 ピラミッドを探検する

  1. プログラミング初級講座
  2. テストを整理する ~混沌の中から法則を見つけ出す~
  3. 効果的なモックの活用
  4. テストファースト

学んだこと

各テストの特徴を把握して、テストのピラミッドを意識すること

テストには、ユニットテスト、統合テスト、UIテストがあります。そして、各テストの特徴は主に以下のようになるようです。

ユニットテストの特徴

ユニットテストは、メソッド単位で書かれるテストです。以下のような利点があります。

  • 高速に実行することができる
  • 手軽に作成できる
  • 正確な結果を出せる
  • 迅速にフィードバックを返せる

その一方で、メソッド同士の結合に関する部分をチェックすることが弱いという欠点もあります。

統合テストの特徴

統合テストは、WebサービスAPIの繋がりをテストするものです。以下のような利点があります。

  • UIを通さないため、UIの壊れやすに影響せずにテストを行うことができる

しかし、具体的にどこが壊れているのかということが分かりづらいという欠点もあります。

UIテストの特徴

UIテストは、全てのアーキテクチャの層を通過し、全てがつながっていることを保証するものです。以下のような利点があります。

  • ユーザーが操作しているようにテストを行うことができる
  • エンドツーエンドで動く

しかし、高コストでフィードバックが返ってくるのが遅いという欠点があります。

テストのピラミッドとは?

以上のように各テストには利点と欠点があります。 そのため、互いに補い合う必要があり、その関係を表したのが、本書で言われているテストのピラミッドです。

f:id:NMP300:20200105172853p:plain
テストピラミッド

テストのピラミッドは以下のような言葉で表すことができます。

各テストの特性を把握し、それを補うようにテストピラミッドを意識して、テストを書いていくことが効果的なテストを書く上では必要なことなのだと学びました。

感想

とても分かりやすい本でした。

本書を読んで、今まで点と点だったテストの知識が、つながって、体系化された感じがあります。 また、モック化・テストをリファクタリングする方法、不安定なテストへの対処方法など具体的な技術のことも書かれており、テストを書く際に指針になるような一冊だと思います。

まだ、使える知識として自分の中に定着してはいないと思うので、都度都度読み返していきたいです。