9月公開の連載「テスト自動化とツールの導入」では、テスト自動化の全体像、そして具体的なテスト自動化ツールとして静的解析ツールについて具体例を交えて解説しました。今月は、テスト作業の中核といえるテスト実行と、そのための準備作業となるテスト実装を自動化するツールについて、単体テストとGUIテストに分けて解説します。

 今回は、単体テストの実行を自動化するツールと自動化した単体テスト実行の流れについて紹介します。単体テストの実行を自動化するツールは「ユニットテストフレームワーク」や「xUnit」と呼ばれます。xUnitはさまざまなプログラミング言語用のものが存在し、xUnitの「x」の部分には言語の頭文字などが入ります。Java用はJUnit、C用はCUnit、.NET対応言語用はNUnitといった具合です。

単体テストとは

 まずは、単体テストそのものについて触れておきます。単体テストの対象はソフトウエアやシステムを構成する最小単位となります。C言語であれば関数、Javaであればメソッドやクラスといったものがテスト対象となります。実際の開発現場では、「画面単体テスト」などのようにいくつかのコンポーネントによって構成されるものを単体テストとすることもありますが、本稿では前者の最小単位という定義を使います。

 単体テストというと、ソースコードの構造に着目するホワイトボックステストを思い浮かべる方が多いかもしれません。もちろんホワイトボックステストは単体テストの主要な実施方法の一つですが、関数やメソッドの仕様に着目するブラックボックステストも実施できます。

 例えば、Javaではテスト対象となるメソッドの引数に入力値を与え、メソッドを実行した結果の戻り値を期待値と比較し、対象のメソッドが正しく動作することを確認します。そのため、テスト対象メソッドを呼び出すドライバや、呼び出し先となるクラスなどのスタブを作成する必要があります。

 単体テストは一般的に次の手順で実行します。

  1. 事前状態を再現し、入力値を与える
  2. テスト対象(関数、メソッドなど)を実行する
  3. 実行結果の値と期待値を比較する

単体テスト実行を自動化するメリット

 単体テストの手順の多くは自動化できます。単体テストの自動化には、以下のようなメリットがあります。

・テストの実行を省力化できる
 テストの実行を自動化することで、開発者が簡単にテストを実行できます。1回のテスト実行にかかる工数を削減できれば、テスト対象となるプログラムの実装や品質向上に工数を投入できます。

・いつでもテストを再実行できる
 テストの実行を自動化することで、同じテストを容易に再実行できます。既存機能に対応したプログラムのテストを自動化しておけば、新規機能を追加した場合でも、既存機能に影響がないこと、すなわち回帰テストを簡単に実行できます。

 単体テストは、実装したプログラムが正しく動作することを確認する重要な作業です。したがって、できるだけバグを多く発見できるように効果的に、かつ少ない工数で効率的に実施することが求められます。この効果的かつ効率的な単体テストを実行するために、自動化ツールの導入は必須といえます。