はてなブックマーク Yahoo!ブックマークに登録  印刷

CoolなEclipseプラグイン(24)

これはすごい!?
コード品質のカイゼン化プラグイン2種


岡本隆史
2008/2/6
今回の主な内容

テストケースを自動生成するJUnit Factoryとは?
JUnit Factoryを使ったテストケースの生成例
JUnit Factoryでカバレッジの確認

ダッシュボードでテスト状況を把握するには?
JUnit Factoryを使う際の注意点
保守性が高いコードか計測するCrap4jとは?
あなたのソースコードは“保守”しやすいですか?
ソフトウェアの品質を効率よく向上させるために

 ソフトウェアの品質と保守性を向上させるために、テストケースの作成は重要です。しかしながら、時間がない、面倒だなどの理由によりユニット(単体)テストが省略されることはしばしばあります。

 また、ソフトウェアの修正や仕様変更を考慮すると、保守性の高い(分かりやすい/読みやすい)コードにする必要があります。

 本稿では、ソースコードからJUnitをベースとしたたテストケースを自動的に生成する「JUnit Factory」とコードの保守性の指標であるCRAP(Change Risk Anti Pattern)を計測する「Crap4j」をご紹介します。

図1 JUnit Factoryのページ

図2 Crap4jのページ
図2 Crap4jのページ

テストケースを自動生成するJUnit Factoryとは?

 JUnit Factoryはソースコードからテストケースを自動生成し、しかも生成されたテストケースはモックオブジェクトprivateフィールドのアクセッサなどが駆使され、高いカバレッジ(テストケースの網羅度)をカバーするというまさに夢のようなテストコード生成サービスです。

 JUnit Factoryを利用するためのEclipseプラグインが提供されており、Eclipse上から簡単にテストケースを生成できます。

 JUnit Factoryは次のような特徴を持ちます。

特徴【1】テストケース生成をサービスとして提供

 JUnit Factoryはテストケース生成サービスとして、JUnit Factoryのサーバ上で提供されています。各開発者の端末上でテストケースを生成しないので、テストケース生成中はマシンリソースを消費してほかの作業ができなくなるということはありません。テストケースを生成している間、別の作業ができます。

図3 JUnit Factoryの概念図
図3 JUnit Factoryの概念図

特徴【2】サービスは無料で提供

 テストケースを生成するサービスは、JUnit Factory上のWebページで公開されており、無料で利用できます。

特徴【3】Eclipseプラグインを提供

 JUnit Factoryは、Web上でも利用できますが、Eclipseプラグインも提供されており、プラグインを使って簡単にテストケース生成サービスを利用できます。

 また、プラグインでは、テストの実行、カバレッジ測定ダッシュボードの生成などもサポートされます。

特徴【4】JUnitをベースとしたテストケースを生成

 テスティングフレームワークのJUnitをベースとしたテストケースを生成するので、開発者になじみやすいです。

 また、専用のAntタスクが無償で提供されており、Antでテストを実行することもできます。

編集部注Antについて詳しく知りたい読者は、連載「現場に活かす Jakarta Project」第2回「AntでJavaのビルドを簡単にするをご参照ください。

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のとおりです。

図4 インストールするフィーチャーの選択
図4 インストールするフィーチャーの選択

 JUnit Factoryは、Eclipseから利用する場合、JUnit Factory Serverのアカウントが必要です。JUnit Factoryのインストールが完了したら、アカウントを作成しましょう。アカウントは下記のURLから作成します。

  • http://www.junitfactory.com/account/create/

 メールアドレス、名、姓、パスワードを入力し、「legal stuffを確認」にチェックを入れて、アカウント作成ボタンを押すとアカウントが作成されます。

図5 アカウント作成

 インストールが完了したら、Eclipse[メニュー]の[設定]→[Agitar]→[サーバー]でサーバに接続する設定を行います(図6)。

図6 JUnit Factoryのサーバ設定
図6 JUnit Factoryのサーバ設定

 JUnit Factoryで提供しているサービスを利用する場合は、次のように設定します。

表1 JUnit Factoryのサーバ設定のパラメータ
項目名 パラメータ
[ホスト] 「www.junitfactory.com」
[ポート] 「80」
[Email address] アカウント作成で入力したメールアドレス
[パスワード] アカウント作成で入力したパスワード

 HTTPプロキシは必要に応じて設定してください。以上で準備は完了です。

 次のページからJUnit Factoryを使ったテストケースの自動生成の仕方を具体的に解説します。

  1-2-3

 INDEX
Page1
  テストケースを自動生成するJUnit Factoryとは?
JUnit Factoryを使ったテストケースの生成例
  Page2
  JUnit Factoryでカバレッジの確認
  Page3
  ダッシュボードでテスト状況を把握するには?
JUnit Factoryを使う際の注意点
保守性が高いコードか計測するCrap4jとは?
あなたのソースコードは“保守”しやすいですか?
ソフトウェアの品質を効率よく向上させるために

CoolなEclipseプラグイン バックナンバー 連載インデックスへ»


Java Solution全記事一覧

Java Solution フォーラム 新着記事

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード


スキルアップ/キャリアアップ
- PR -

お勧め求人情報

キャリアアップ 〜JOB@IT
@IT Special -PR-
  New! これから伸びるコンサルタント分野は何か?
〜エンジニア・キャリア進化論(第3回)〜

  New! 「ケーブル挿して電源ON!」ほぼ完了!?
“めっちゃお手軽”メールセキュリティ

  New! ■ボトルネックバスターズ 2■ 【最終回】
彗星寺の威厳は彗星のごとく消えていった……

  MyEclipse ビジュアルJSPデザイナーなら
WYSIWYGエディタだから簡単Webページ作成

  x86サーバなるほど相談室 開設!
その悩み、ペディアくんがお答えします。

  SPECjbb2005にて驚異的な実行速度!
このベンチマークテスト結果を見よ!

  開発で重要な要件定義は、転職でも同じ
プロが教える、転職活動の要件定義とは

  ¥も$も対応する“国際デビッドカード”
止まらないサーバが実現したシステムは?

  VB.NETによる開発のスタイルを変える
専用O/Rマッパー導入のメリットとは?

  「わしは知らんかった」では済まされない
記録保管として電子メールが持つ意義とは

  データマイニングを武器に、C型肝炎
ウイルスと戦う医師。その治療の行方は?

  とにかく人が足りない「組み込み開発業界」
今こそ、キャリアチェンジのチャンス!

  “予防”と“発見”で強化する内部統制
――@IT主催内部統制セミナー詳細

  「番次郎さん、WSSが使えそうです!」
“いぶき”がついに、難題突破口を発見!

  ORACLE MASTER取得者へ林優子氏が指南!
「次に身に付けるべきスキルとは……」

  フロントシステムの4つの課題を解決!
企業システムでAjaxが実用化段階に