「初めての自動テスト ――Webシステムのための自動テスト基礎」を読みました

テスト自体は仕事で書いているものの、ちょっと違和感があったので、そもそもなんなのかみたいなレベルから見てみようと思っていたところ、書籍を見つけたので読んでみました。

今回読んだのはタイトル通り「初めての自動テスト ――Webシステムのための自動テスト基礎」です。

読者はテスター側と開発側を想定していますが、どっちかというとテスター側を想定している箇所が多いように思いました。ただ書かれている内容は、そもそもテストとはみたいなものから具体的にどんな感じで書いていくのか(コード例よりかは考え方が多め)みたいな内容が多めな印象でした。

流れ

書籍の流れは大雑把に以下の流れ。

  1. テストとは何か
  2. 具体的に書いてみる
  3. より良くする

1.テストとは何か

テストとは何かという辺りでは、ユニットテスト、統合テスト、UIテストの紹介とその関係性についての紹介が紹介されていました。

それぞれの関係性については、ピラミッドの図で書かれていて、上記3つのテストが下から順に並ぶ図です。

  • UIテスト
  • 統合テスト
  • ユニットテスト

上にあるものが下のものの役割を網羅しているような話でした。

ピラミッドの上に行くほど色んなことをしてしまうため実行速度は遅くなって行ったり、メンテナンスコストが上がってしまう問題があるため、 下の層でやれるならなるべく下の層(特にユニットテスト)でやってしまうほうがいいという話がありました。この辺りは確かに実感していて、現場で「実際触ってテストしてください」って言われた時に(内容にもよるけど)自動化のコードを書きかけるんですが、仕様変更があった際に変更箇所が多くなりがちで書き直すのが辛かった記憶があります。

2. 具体的に書いてみる

本書の中盤くらいでは、レガシーなシステムに対してのテスト、RESTful APIの統合テストであったり、JavaScript(クライアントサイド)を使ったテストの方法について触れられています。

テストが殆ど書かれていないレガシーなシステムに対して起こったトラブルを題材に、問題だろう箇所に関するテストを書いて原因を探っていく辺りは実践的でなかなかおもしろかったです。

3. より良くする

終盤では、テスタブルなコードを書くには?という辺りの話やテストのリファクタリングやモックの使用、TDDについて触れられています。

ただ、この辺りに関しては「概要をサクッと」という感じの印象だったので、踏み込む際は別のものを利用する方がいいのかなという印象でした。

読んでみて

ざっと読んでみて、よく聞くテストが何を狙っているのかどこまでのことをやるのかのもやもやが晴れたような気がします。

あとは実際にちゃんと書いていく方がいいかなと思うので、自分で作っているものでこれまで書いたものやこれから書いていくものにも追加していこうかなと思っています。