ユニットテスト・フレームワークによる単体テスト実行の自動化
日経SYSTEMSの調査参考1によると、単体テストでのツール利用率は27.7%と決して高くありません。単体テストの実行を自動化するテストツールには、Java用のJUnit参考2をはじめとする、ユニットテスト・フレームワーク(xUnit)と呼ばれるものがあります参考3。今回は主にJUnitを使ったJavaの単体テスト自動化の動向を解説します。
JUnitのメリット・デメリット
JUnitが世に出て10年以上が経ちました。JUnitは「テストコード」と呼ばれるテスト用のソースコードを書くことで単体テストを自動実行でき、特に回帰テストで大きなメリットが得られます。また、統合開発環境のEclipseに同梱されているため利便性が高く、「テスト駆動開発(TDD)」参考4でも効果的に活用されます。
しかし、ツールの利用率は3割に満たないという事実があります。これは、実際の開発でJUnitを使う上でのデメリット(テストコード作成工数の増加や、テストコードメンテナンス工数の増加)が原因と考えられます。
これらのデメリットを解消するための取り組みを紹介します。
JUnitによる単体テストを支援するツール
2004年頃に米国のAgitar社が開発した「Agitator」注という単体テストツールが話題になりました参考5。このツールは「ホワイトボックステスト」の考えにより、ソースコードのロジックを解析して、テストのカバレッジが高くなるようにテストコードを自動生成します。夢のようなツールに思えますが、日本ではヒットしませんでした。欠陥を含む可能性があるテスト対象(ソースコード)を素材としてテストコードを生成することになってしまうため、日本的な開発のやり方には合わなかったと考えられます。
そこで、ソースコードの仕様に基づいた「ブラックボックステスト」を支援するツールが出てきました。Parasoft社のJtestはソースコードを解析してテストコードを自動生成するとともに、ExcelやCSVで作成したテストデータを利用したブラックボックステストの機能も持ち合わせています参考6。また、Google社のCodePro AnalytiXは、Eclipse上のグリッドで作成したテストケースと同期したテストコードが作成されます参考7。
これらのツールを使う際、テストケースを表形式で作成してメンテナンスすれば、テストコードの作成やメンテナンスが不要になり、先のデメリットが解消されます。
NTTデータでは、ブラックボックステストによる単体テストをサポートするツールとして、Excelで作成したテストケース表をもとにJUnitのテストコードを自動生成する「TERASOLUNA RACTES for UT」を開発し、社内外での活用を推進しています(図)。
図:TERASOLUNA RACTES for UTの活用イメージ
注釈
- 注現在は「AgitarOne」として日本ではエーアイコーポレーション社より販売されています。