CoolなEclipseプラグイン(24)

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


岡本隆史
2008/2/6

 

ダッシュボードでテスト状況を把握するには?

 JUnit Factoryはダッシュボード機能を持っており、テスト結果の失敗件数やカバレッジの遷移などの情報を一覧できるようになっています。

図13 ダッシュボード機能の使用例
図13 ダッシュボード機能の使用例

 例えば、Javaで実装された「Z80」と呼ばれるCPUのエミュレータのダッシュボードは、こちらで見ることができます。

 ダッシュボードでは、パッケージやクラスごとの集計や、開発者ごとの集計もされるので、いろいろな観点で分析できます。

 ただし、残念なことに、日本語環境で利用するとグラフのフォントが文字化けしてしまいます(2008年1月現在)。グラフ上の日本語文字が読めないだけで、グラフなどは正しく表示されているので実用上問題はなさそうですが、今後の改善に期待したいところです。

JUnit Factoryを使う際の注意点

 JUnit Factoryで生成されたテストコードは、ソースコードからテストケースが生成されているため、すべてテストにパスした状態で生成されます。そのため、テストにパスしたからといって、テストが正しいとは限りません。

バグも正しい仕様と見なしてしまう

 もともとのソースコードにバグがある場合、バグを正しい仕様と見なしてテストケースを生成するため、「仕様どおりのテストをしないテストケース」が生成されるからです。JUnit Factoryを利用した場合は、生成されたテストケースをレビューし、本当に仕様どおりの動作をしているかどうか確認する必要があります。

 仕様と異なるテストケースが生成されていた場合は、テストケースを修正してからテストされるコードを修正します。まずテストケースを修正し、次にテストされるコードを修正し、テストをパスするかどうか確認します。

必要なテストコードをすべて作成してくれるわけではない

 また、JUnit Factoryは必要なテストコードをすべて作成してくれるわけではないので、カバレッジが基準値に満たない場合は、テストコードを追加する必要があります。

 JUnit Factoryはあくまで、テストケースの生成を支援するツールなので、レビューやテストコードの追加を行うのを忘れないようにしましょう。

機密性の高いコードで使う際には注意!

 また、JUnit Factoryを利用する際には、テストケースを生成するためにソースコードがJUnit Factoryのサーバにアップロードされるということに注意する必要があります。機密性の高いコードをアップロードすると情報漏洩(ろうえい)につながる恐れがあるので、利用には十分な注意が必要です。

試験的な利用やオープンソースでの使用がおすすめ

 JUnit Factoryは、もともとAgitar社の研究プロジェクトであり、コンピュータサイエンスを研究する学生やテストの自動化の研究者にAgitar社のソリューションを試してもらうために限定的に公開されていましたが、現在ではすべての開発者にサービスが公開されています。

 JUnit Factoryでは、Agitar社が提供するテストソリューション「AgitarOne」の機能の一部を無償で提供しています。テストコードの自動生成ツールとしてAgitarOneの購入を検討する際に試験的に利用する場合や、ソースコードを隠ぺいする必要がないオープンソースのソフトウェアを開発する場合などには、便利です。

保守性が高いコードか計測するCrap4jとは?

 冒頭でも紹介しましたが、Crap4jはJavaのソースコードに含まれるCRAP(Change Risk Anti-Pattern)を検出するためのツールです。JUnit FactoryはAgitar社が提供していますが、Crap4jはAgitar社の研究者がオープンソースで公開しているプラグインです。

あなたのソースコードにも潜んでいるかもしれない「CRAP」とは?

 「CRAP」とは、ソースコードが変更されたときに、変更された部分以外のコードの挙動をおかしくするリスクを増やすようなコードのパターンです。

 例えば、分岐が多岐にわたるような複雑なメソッドのコードを変更した場合、1個所変更すると、ほかの個所へ影響を及ぼす可能性が高くなります。また、自動化された回帰テストが十分用意されていない場合、メソッドのバグ修正などの変更時に、修正したいバグ以外の部分の挙動の変更を検知するのが難しくなります。

 まとめると、以下の2つのようなコードが変更時にバグを作り込むコードのパターンつまりCRAPに当たります。

  1. 分岐が多岐にわたる複雑なメソッド
  2. 回帰テストが十分に提供されていないメソッド

あなたのソースコードは“保守”しやすいですか?

 それでは、実際にCrap4jを使ってみましょう。

インストール方法

 下記のアップデートサイトからプラグインをインストールしてください。

  • http://www.crap4j.org/downloads/update

使い方

 ナビゲーションビューのプロジェクトを選択し、Eclipse[メニュー]の[Crap4j]→[Run Crap4j]を選択するだけです。

図14 Crap4jの実行
図14 Crap4jの実行

 実行すると、JUnitのテストが実行され、全体のCRAPが表示されます。

図15 全体のレポート
図15 全体のレポート

 メソッドごとの詳細なレポートを表示することもできます。

図16 メソッドごとのレポート
図16 メソッドごとのレポート

コラム「CRAPの計算式」

Crap4jでは、具体的に各メソッドのサイクロマティック複雑性(comp(m))とユニットテストによるカバレッジ(cov(m))を組み合わせた下記の式により、CRAPを計算します。

CRAP(m) = comp(m)^2 * (1-cov(m)/100)^3 + comp(m)

この式は、複雑性が高く、カバレッジが低い場合、値が大きくなります。また、複雑性が高くなればなるほど、カバレッジの影響が強くなります。複雑性が高いメソッドでは、コードを変更したときの副作用が表れやすいので、きっちりテストケースを作り込んでおく必要があります。

ソフトウェアの品質を効率よく向上させるために

 今回は、テストケースを自動生成するJUnit Factoryとコードの保守のしやすさを計測するCrap4jを紹介しました。

 これらのツールをうまく利用すれば、ソフトウェアの品質を効率よく向上させることができます。どちらも手軽に試せるので、一度試してみてはいかがでしょうか。

@IT関連記事


ソフトウェアの品質向上を支援するプラグイン
CoolなEclipseプラグイン(2) 
ソフトウェアのレビュー/テスト/デバッグを助ける「FindBugs」「djUnit」、有償製品の「Enerjy Thread Profiler」を紹介する
Java Solution」フォーラム 2005/4/16
Eclipseで使えるテストツールカタログ
統合開発ツールにEclipseを選択する開発現場に、テストの効率化、ソフトウェア品質の向上のヒントを提供する
快適なXPドライビングのすすめ
理論と実践は根本的に違う。本連載ではEclipseなどのツールを活用しながらXPの快適なドライビング方法を伝授する
第4回 EclipseとJUnitによるテスティング
第5回 テストファーストでコードを作成する
第7回 継続的インテグレーション&テスト環境の構築
Webサイト構築に必要なさまざまなテスト手法
[連載]Java初心者のためのWebシステム入門(9) Webサイトのカットオーバーに備えて行う必要のあるテスト項目と手法の概要を解説します
Java Solution」フォーラム 2002/9/26

1-2-3

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



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


Java Solution全記事一覧

TechTargetジャパン

Java Solution フォーラム 新着記事

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

RSSフィード

キャリアアップ

- PR -
@IT Sepcial

イベントカレンダー

PickUpイベント

- PR -
もっと見る
- PR -

お勧め求人情報

ホワイトペーパーTechTargetジャパン

@IT Sepcial
ソリューションFLASH