タイトル
JUnitと単体テスト技法―JUnit4対応
著者
福島 竜 (著)
出版社
ソフトリサーチセンター
Amazonで購入する

本書は、JUnit の使い方と単体テストについての知識を得られるものになっています。JUnit を使ったテストファーストの流れを説明し、テストとは何か(単体テスト、結合テスト、システムテスト)ということを解説しています。

対象読者は次のような人です。

  • JUnit を使ったテストファーストを学んでみたい
  • 単体テストでどんなテストを行えばよいのか迷っている
  • テスト技法に関してさらっと基礎をつかんでおきたい

テストファーストに関してさらに学びたい人にはこちらがお勧めです

バグがないプログラムのつくり方 JavaとEclipseで学ぶTDDテスト駆動開発

Information
本書で説明されている JUnit のバージョンは 3.8.1 です。付録に JUnit4 の説明が20数ページ割かれています。

特徴

単体テストがターゲット

本書は単体テストをターゲットにした本になっています。単体テストには JUnit を使います。

単体テストとJUnit-TECHSCORE

単体テストとは

単体テストは、モジュールを単位としたテストです。Java の場合、クラス、メソッドが単体テスト対象となります。<中略> 単体テストとは、開発者(プログラマ)が自分で作ったプログラムが「ちゃんと動くか」調べる作業です。

本書 P.59 「単体テストの技法」より

単体テストは、プログラマが自分の作ったプログラムをテストすることを指します。単体テストでは、テスト対象だけでテストが実行できることがベストです。そのためには、外部に依存する部分をモックオブジェク(Mock Object)などを使ってテストしやすくする必要があります。

モックオブジェクトとは - SimpleTest for PHP

単体テスト項目

単体テストでは、次のような項目をテストします。

  • 境界値
  • 条件分岐
  • 網羅性(カバレッジ)
  • 例外ケース
  • エラーが出そうな値(マイナス値、巨大な値、0、NULL)
  • パフォーマンス

上記のテストを、正常系とエラー系に分けてそれぞれテストを行います。

テストファーストを体験できる

本書は、単体テストをテストファーストという開発手法で行う手順を解説しています。テストファーストとは、テストを最初に行う開発手法のことです。

Tips
ここでいうテストとは、プログラムを書いた後に記述するテストとは少し意味合いが異なると僕は考えています。テストファーストで記述するテストは、動くことの確認という意味合いよりも、こう動かなければいけないという仕様を強くあらわしていると考えています。そのため、仕様が決まっていなければテストファーストを実行することができません。これにより、「仕様は決まってないんだけど、とりあえずコーディングする」という悪行が防げます。

テスト技法のおさらいができる

本書で上げられているテスト技法には次のものがあります。

  • ブラックボックステスト
  • ホワイトボックステスト

ブラックボックステスト

ブラックボックステストは、プログラムの仕様を元にテストを行うものです。プログラムの内部構造は考慮せず、入出力の仕様に注力します。ブラックボックステストとして、次の4つのテストがあげられています。

  • 同値クラステスト
  • 境界値テスト
  • デシジョンテーブルテスト
  • 強制エラーテスト
  • グレーボックステスト

ホワイトボックステスト

ホワイトボックステストは、プログラムの内部構造を元にテストを行うものです。条件分岐、データ構造、実装方法などのプログラムの内部を熟知した上でですとを行います。JUnit を用いた単体テストは、主にこのホワイトボックステストを行います。

  • 制御フローテスト
  • データフローテスト

テストの種類がまとまっている

単体テスト以外にも、結合テスト、システムテストといったテストの説明がされています。

結合テスト

単体テストが完了したモジュールを組み合わせて行うテストのことです。テストシナリオを考えてテストを行います。

  • トップダウンテスト
  • ボトムアップテスト
  • サンドイッチテスト
  • ビックバンテスト

システムテスト

システム全体のテストを行います。

  • 性能テスト(パフォーマンステスト)
  • 負荷テスト
  • 例外処理テスト
  • 操作性テスト

覚書

JUnit4 についてすごくよくまとまっているサイトを見つけたので参考に。

JUnit 4 & TestNG

参考

  • ソフトウェアテストのバイブル
  • ソフトウェアテストのバイブル その二
  • バイブルからよいとこ取りした鉄則書
  • TDD(テスト駆動開発)の発案者による本