以前からテスト関連の本を読んでみたいなぁ〜と思ってた所、本屋でたまたま本書を見つけたので購入。現場で単体テストを行う機会は多いものの、深く学んだこともなかったので、いい機会だと思って読んでみました。
【構成と内容】
本書は3部構成。それぞれの部には、細かく章が存在しています。各部(章)の簡単な説明と、その中で私が感じた感想・読後メモを書いていきます。
<第1部 単体テストは侮れない>
- 1章:超多忙な現場になぜ単体テストを勧めるのか
- 2章:Webアプリケーションの単体テストをよく知ろう
・第1部は、”単体テストは侮れない”というテーマのもと、単体テストの概要を説明しています。
1章で、システム開発で行うテストの種類と目的を確認。単体テスト以外にも、結合テストやシステムテスト・負荷テスト、セキュリティテスト等、多くのテストがあることを確認した上で、最初に行う単体テストの品質が重要であることを説いています。
また、単体テストの実施方法としては、「テストクラスを作成して、自動で実施/確認」する方法を推奨。(テストクラスを作成する単体テストの方法を以後の部(章)で説明していく形で本書が続いていきます。)
↑↑本書ではJUnitを使用して、Javaプログラムの単体テストを行う方法が説明されています。
2章は、Webアプリケーションの単体テスト時の注意すべき点や、単体テストの主な手法が紹介されています。筆者は、”全部作った後にテストする=時間がかかる”のでテストを小分けにすることを推奨しているのですが、MVCで作成されたWebアプリケーションに関しては、以下のようにテストする範囲を小さくしてテストするように提言しています。(①→②)
① 最初にModelをテスト
② Webコンテナ上でWebアプリケーション(View・Model・Controller)をテスト
単体テスト手法に関しては、ホワイトボックステスト・ブラックボックステストが簡単に紹介されていますが、細かいテストケースの作り方は載っていないので、本書以外の書籍を参考にした方がよろしいかと思います。第1部では、具体的な単体テストの方法よりも、システム開発におけるテスト観点のおさらいがメインとなっています。個人的には、MVC全部を作ってから単体テストをするものだと思っていたので、小分けにしてテストが出来る、という視点は新しい発見でした。
<第2部 行う価値の高い単体テスト>
- 3章:EclipseとJUnitで作るテストクラス
- 4章:DBアクセスの単体テスト
- 5章:DBアクセスのテストケースを減らす方法
- 6章:ビジネスロジックと外部リソースアクセスのテスト
- 7章:外部システム連携と画面側のテスト
・第2部のテーマは”行う価値の高い単体テスト”。実際にJavaプログラムの単体テストをサンプルを使って説明しています。(Eclipse + JUnit + DbUnit環境)
3章は、サンプルコードを使ってテストクラスの作成と実行をしてみようという内容。JUnit4のアノテーションの使い方・テスト結果を判定するメソッド(assertXXX/fail等)を紹介しています。サンプルを使って、実際にソースを動かすことが出来るので、実践的にテストクラスについて学べました。テストクラスを作成するのに必要なアノテーション・メソッドが一通り載っているので、JUnitを組む際の教科書としても参考になる章だと思います。
4章・5章はDBアクセスに関するテストについて。私、この本で初めてDBUnit知りました。テストのフレームワークもあるなんてすごい便利だなと感心。DBUnitの使い方やアノテーション等、実践で使える情報もたくさん載っています。実際にまだ現場等で使ったことないので、これを機に是非使っていきたいと思うフレームワーム。JUnit環境下で使うということもあり、馴染めそうな感じ。DBUnitはテスト前の状態をバックアップ(@Before)したり、テスト終わったらバックアップのデータをDBに戻したり(@After)出来て、非常に便利。(効率的にテストが進められる!)こちらの章にもサンプルがついているので、実際に手を動かしながら手法が確認できます。
6章。Mockオブジェクトについて。これまた使ったことなかった。(勉強不足を痛感…)Mockオブジェクトを作成するには、振る舞いを真似るため仕様を理解する必要があるということが記してあります。(かたや、Mockクラスを作るなら、実クラスを作成してからテストした方が効率的ではないかとも書いてあります。)今後使うかも知れない手法として一読の価値ありかと思います。※ Mock = 疑似。
7章では、画面のカバレッジの取り方が紹介されています。EMMAというツールを使ってカバレッジを取得する手順が学べます。EMMAは現場で使ったことがあったので、再確認に丁度良い内容でした。
第2部では、Javaの現場でテストをする際に抑えておかないといけないポイントが一通り紹介されていました。テストの方法というと、なかなか勉強する機会がないので、このような本があるとすごいありがたいです。
<第3部 継続的にテストをするために>
- 8章:実装前にテストを意識する
- 9章:テストを意識した開発のポイント
- 10章:さらにテストを省力化するポイント
- 11章:ビルド&テストを自動化する環境の構築
・第3部では、テストをより効率的に行う為に、製造の段階からテストを意識して作りましょうという点をテーマとしています。また、ビルドサーバー等を用意し、継続的にテストをする環境の構築の方法を紹介しています。
8章の冒頭では、「品質は工程で作りこまれる」という言葉を紹介。ソフトウェアアーキテクチャを考慮する段階からテストを考慮し、プロジェクト内で共通意識を持っていくことがよいテストの条件という点を強調しています。9章でも、開発を進める中で、無駄なテストを減らす設計をしていくことが大事という内容が記されています。引数の型に意味を持たせることや、システム日付を扱うメソッドのテストの方法等。また、バグ発見のツールとしてCheckStyleやFindBugsといった静的ツールの使い方も紹介しています。10章以降はテストの効率化・自動化を図る環境作りのお話です。
【感想】
・普段、Javaのエンジニアをしているのですが、この本を読むまで知らなかったツールもたくさんあったので、とても参考になりました。これまでただ漠然とテストをしていましたが、より品質を高める為に効果的なテストを実践していきたいと思います。初学者でも読みやすい本書ですので、テストに苦手意識のある方は是非読んでほしいと思います。