ソフトウェアの品質と保守性を向上させるために、テストケースの作成は重要です。しかしながら、時間がない、面倒だなどの理由によりユニット(単体)テストが省略されることはしばしばあります。
また、ソフトウェアの修正や仕様変更を考慮すると、保守性の高い(分かりやすい/読みやすい)コードにする必要があります。
本稿では、ソースコードからJUnitをベースとしたたテストケースを自動的に生成する「JUnit Factory」とコードの保守性の指標であるCRAP(Change Risk Anti Pattern)を計測する「Crap4j」をご紹介します。
テストケースを自動生成するJUnit Factoryとは?
JUnit Factoryはソースコードからテストケースを自動生成し、しかも生成されたテストケースはモックオブジェクトやprivateフィールドのアクセッサなどが駆使され、高いカバレッジ(テストケースの網羅度)をカバーするというまさに夢のようなテストコード生成サービスです。
JUnit Factoryを利用するためのEclipseプラグインが提供されており、Eclipse上から簡単にテストケースを生成できます。
JUnit Factoryは次のような特徴を持ちます。
特徴【1】テストケース生成をサービスとして提供
JUnit Factoryはテストケース生成サービスとして、JUnit Factoryのサーバ上で提供されています。各開発者の端末上でテストケースを生成しないので、テストケース生成中はマシンリソースを消費してほかの作業ができなくなるということはありません。テストケースを生成している間、別の作業ができます。
特徴【2】サービスは無料で提供
テストケースを生成するサービスは、JUnit Factory上のWebページで公開されており、無料で利用できます。
特徴【3】Eclipseプラグインを提供
JUnit Factoryは、Web上でも利用できますが、Eclipseプラグインも提供されており、プラグインを使って簡単にテストケース生成サービスを利用できます。
また、プラグインでは、テストの実行、カバレッジ測定、ダッシュボードの生成などもサポートされます。
特徴【4】JUnitをベースとしたテストケースを生成
テスティングフレームワークのJUnitをベースとしたテストケースを生成するので、開発者になじみやすいです。
また、専用のAntタスクが無償で提供されており、Antでテストを実行することもできます。
JUnit Factoryを使ったテストケースの生成例
さて、ここまで読んで「テストケースの自動生成なんて、使えないんじゃないか?」と疑問を持つ方もいらっしゃるでしょう。簡単にJUnit Factoryによるテストケースの生成の例を見てみましょう。
例えば、次のようなCheckNumberというクラスに2けたの数字かどうかチェックするlen2というメソッドがあったとします。
public class CheckNumber { ……(略)…… public boolean len2(int n){ if(n>=10&&n<=99){ return true; } else { return false; } } ……(略)…… }
このlen2メソッドに対して、JUnit Factoryは次のようなテストケースを生成します。
public void testLen2() throws Throwable { boolean result = new CheckNumber().len2(9); assertFalse("result", result); } public void testLen21() throws Throwable { boolean result = new CheckNumber().len2(100); assertFalse("result", result); } public void testLen22() throws Throwable { boolean result = new CheckNumber().len2(11); assertTrue("result", result); } public void testLen23() throws Throwable { boolean result = new CheckNumber().len2(98); assertTrue("result", result); } public void testLen24() throws Throwable { boolean result = new CheckNumber().len2(99); assertTrue("result", result); } public void testLen25() throws Throwable { boolean result = new CheckNumber().len2(10); assertTrue("result", result); }
生成されたテストコードを見ると、境界値付近(10、99)で値を変えたテストケースを生成し、その返却値をチェックしているのが分かると思います。
上記の例では、引数にプリミティブ型を利用していますが、独自クラスを利用した場合は、インスタンスやモックを利用したコードが生成されます。簡単な例の場合、このように非常に分かりやすいテストケースを生成できます。
JUnit Factoryのセットアップ
下記のアップデートサイトからプラグインをダウンロード、インストールします。
- http://www.junitfactory.com/update/
インストールするフィーチャーは、図4のとおりです。
JUnit Factoryは、Eclipseから利用する場合、JUnit Factory Serverのアカウントが必要です。JUnit Factoryのインストールが完了したら、アカウントを作成しましょう。アカウントは下記のURLから作成します。
- http://www.junitfactory.com/account/create/
メールアドレス、名、姓、パスワードを入力し、「legal stuffを確認」にチェックを入れて、アカウント作成ボタンを押すとアカウントが作成されます。
インストールが完了したら、Eclipse[メニュー]の[設定]→[Agitar]→[サーバー]でサーバに接続する設定を行います(図6)。
JUnit Factoryで提供しているサービスを利用する場合は、次のように設定します。
項目名 | パラメータ |
---|---|
[ホスト] | 「www.junitfactory.com」 |
[ポート] | 「80」 |
[Email address] | アカウント作成で入力したメールアドレス |
[パスワード] | アカウント作成で入力したパスワード |
表1 JUnit Factoryのサーバ設定のパラメータ |
HTTPプロキシは必要に応じて設定してください。以上で準備は完了です。
次のページからJUnit Factoryを使ったテストケースの自動生成の仕方を具体的に解説します。
Copyright © ITmedia, Inc. All Rights Reserved.