いっとくです。
テスト迷走中です。
テストコードというものを書くようになって思うのですが、いまいちさじ加減が掴めない。
動くテストコードは書けるけど、果たしてそれがバグの発見や品質の担保みたいな本来の意味に貢献できるものになっている実感がわかない毎日を過ごしておるのです。
そんなわけで、まだまだエンジニアとして「ペーペー」だし、テストに至っては「ぺ」くらいのレベル感なので、自動テストの基礎を学ぶためにこんな本を読んでみました。
目が血走っているロボットということで、オライリーにしては珍しい動物以外のイラストですが、自動テストをテーマにしているのでなんかしっくり来る表紙ですね。
本書は自動テストの基礎について解説している前半部分と、それを深堀りして強力なテクニックを紹介している後半部分に分かれています。
まず前半部分では、自動テストをUIテスト、統合テスト、ユニットテストの3つに分類し、それを組み合わせたピラミッド(構成は下からユニットテスト・統合テスト・UIテスト)を用いて解説しています。
各テストの解説と簡単なサンプルコード(RubyかJS)があります。
まずはここで各テストの特徴を知ることが出来ます。
簡単にまとめると以下のような感じ
UIテスト…目的の要素が正しく表示されているかをテストする。壊れやすいので最後に追加するのが良い。
統合テスト…Webアプリケーションの場合は、リクエストに対して期待したレスポンスが返ってくるかどうかのテスト。ユニットテストでは網羅できないバグを検知できる
ユニットテスト…開発者が書く小さな単位のテスト。自動テストの基礎であり、高速に動くが、単体だと見つけきれないバグもある。
そして、上記のテストはそれぞれ発見できるバグの種類が違うので、基本的にはユニットテストでコードの品質を担保し、そこでカバーできないものを統合テストでカバーし、更にそこでわからないバグをUIテストでカバーするというような構成でピラミッドを作っていく。
また、軽くですがJasmineを使ったブラウザ上のユニットテストなんかも出てきます。この辺は全く知らなかったのでへ〜という感じ。
前半部分に関しては、駆け出しエンジニアやテスターになったばかりという人であれば、全体像が非常にわかりやすく書かれているので良いと思いますが、自動テストを書いたことがあるエンジニアにとっては前半部分から得るものは少なそうなので、1章と8章だけしっかり読んであとは、パラパラ見てみて知らないところだけをかいつまんで読むというのが良さそうです。
一方後半では、テストの改善方法、モックの使い方、テストファーストの開発方法など、一歩進んだ内容について触れられており、こちらはちょっとテストを書いたことがあるくらいの方にとってはかなりためになる内容になっていると思います。
特にモックの部分は、僕自身かなりふわっとした理解しかしていなかったので、かなり刺さりました。
例えばモックとスタブの違いだったり、どんな時にモックを使えばいいのかとか、逆にモックを使いすぎることによる問題点と、その解決策の一つである「ポートとアダプタ」パターンの紹介があり、モックの使い時に関してかなり具体的なイメージを持つことができました。
テストで結合度が上がるという話は、今までちゃんとテスト書いてきていなかったので全く意識しておりませんでした。
モックの章では依存性の注入についても登場するのですが、今までなんとなく良いんだろうな〜くらいの認識でとりあえず使っていましたが、モックをオブジェクトに注入できるからテストできるって知った時、普通におしっこ漏らすくらいなるほどね〜って思いました。
テストファーストについても、TDDについての知識が何もなかったので、ちょっと興味を惹かれる内容でした。
前半部分を読んだ時、ちょっと学びが少ないかな〜と思っていたのですが、後半部分で一気にためになる情報が流れ込んできたので、やっぱり本はちゃんと読むべきだな〜と思ったのでした。
パラパラ眺めてその辺の取捨選択できるようになったら、もっと読書の効率上がるんだろうなー
あとテストでいうとこちらもおすすめ。めっちゃテスト観点に関する知識を得られると思います。
以上、いっとくでしたー
コメント