アットマーク・アイティ @IT@IT情報マネジメント@IT自分戦略研究所QA@ITイベントカレンダー  
   
 @IT > Javaシステム開発のテスト現場、このままで良いのか?
 
@IT Special

 

PR

単体テスト効率化ソリューション
「Agitator +Agitar Management Dashboard」

Javaシステム開発のテスト現場、
このままで良いのか?

IDE(統合開発環境)や各種フレームワークの登場で、プログラミングの速度や効率化は年々向上している。しかし、品質向上における各種テストに関しては、人手、いわゆるマンパワーによるところが大きい。このテストをいかに効率良くかつ正確に行うかが、プロジェクトの成否を決めるだろう。ここでは、ソフトウェアにおける最小単位のテストである単体テストにフォーカスし、バグを早期発見できる単体テスト効率化ソリューションを紹介しよう

 開発者の多くは、システムの大規模化・短納期化に直面し、プログラムを実装するのが精いっぱいで、システムの品質を確保するのに苦労しているのではないだろうか。システムの納品間際になってテスターを大量投入したり、徹夜を繰り返したりする光景も珍しくない。では、どうやって効率良くテストを進めていけば良いだろうか。

 テストの目的は、「不具合(バグもしくはエラーともいう)を発見すること」である。やみくもにテストを実施しても不具合を見つけられなければ無意味だ。そして、テスト工程で一番重要なのが単体テストだ。なぜなら、単体テストを確実に実施していれば、システム開発サイクルの早い段階で不具合が見つかり、以降の結合テストやシステムテストをスムーズに運べるからだ。単体テストの品質が悪いと、単体レベルの不具合(プログラムバグ)により、結合テストの進ちょくを止めることになる。そして、システムの機能を確認するべき結合テストでプログラムバグをつぶすというまったく的外れなことをすることになる。結局、修正費用と工数を消耗することになり、チーム全体が疲弊していく。

 また、開発者の多くは、自分の仕事はソースコードを書くことだけだと思っている。しかも、自分が書いたソースコードには不具合がなく正常に動作するものだと信じ込んでいる。プロジェクトマネージャやリーダーは、開発者ならソースコードを書く技法も知っているため、それをテスト(ここでは単体テストのことを指す)する技法や方法も知っているだろうと信じている。これは非常に大きな問題だ。プロジェクトマネージャやリーダーは効果的な単体テストを実施できるツールを導入し、必要であればトレーニングを実施し、手順を確立してそれを管理する体制を構築しなければならない。

 単体テストを効果的かつ効率的に実施すれば、テスト工程全体をスムーズに運ぶことができ、不具合に悩まされることもなくなる。また、プロジェクト全体の工数が最適化されるため、組織的な費用対効果も上がることになる。ここでもっとも大事なのは、テストを効率的に進めることによって、開発者が精神的にも肉体的にも楽になるということだ。しかし、これは誰もが認識していることであり、多くの開発者の共通の悩みの種だ。我々は、どうやってこれらの問題を解決し、実現していけばよいだろうか。

 この問題を根本から解決するソリューションが米Agitar Software, Inc(以下、Agitar社)の単体テスト効率化ソリューションだ。単体テスト効率化ソリューションとは以下のことを総称したものである。

  • Java単体テスト自動化ツール「Agitator」
  • プロジェクト管理・レポーティングツール「Agitar Management Dashboard」
  • これらのツールを使ってテスト手順と品質管理手順を確立し、効果的かつ効率良く単体テストを実施するソリューション

のことを指す。それでは、単体テスト効率化ソリューションを見てみよう。

  単体テストを効率化し、バグを早期発見するAgitator

 Agitatorは、Agitar社が開発したJava単体テスト自動化ツールだ。同製品の開発にはeXtreme Programming(XP)の提唱者であり、テスティング・フレームワークJUnitの開発者であるKent Beck氏がフェローとして、さらには、Javaの生みの親として知られるJames Gosling氏がアドバイザリーとして参加している。いわばJava言語とJava開発の現場を知り尽くしたプロフェッショナルたちによって誕生した単体テスト自動化ツールである。Agitatorは2004年に登場した新しい製品でありながら、すでに米国で数々のアワード(注)を受賞するなど、現在最も注目の高い単体テストツールだ。

 Agitatorは単体テストの自動化に特化したテスト自動化ツールである。単体テストはテスト工程の最初の作業であり工数も大きくなる。これは、いかに単体テストが重要かを指しているといえる。テストの技法でよく耳にするのが、

  • ホワイトボックステスト
  • ブラックボックステスト

というテスト技法だ。

 ホワイトボックステストはプログラムの内部構造に着目し、そのロジックが「開発者の意図したとおりに動作するか」をテストするものだ。よって、ホワイトボックステストではカバレッジが非常に重要となる。Agitatorは、C2レベル(注)のカバレッジ(網羅率)を実現するため、高度で十分なホワイトボックステストをすることができる。

 ブラックボックステストはある値を入力すると、「仕様どおりの値が結果として出力されるか」をテストするものだ。その名前のとおり、プログラムをブラックボックスとみなして行うテストである。Agitatorはクラスやメソッドに入力した値を見たり、任意の値を設定したりすることもできる。そして、プログラム実行が終了した状態を把握することもできる。よって、ブラックボックステストも対象としたテストツールである。

 Agitatorは単体テストとして、このホワイトボックステストとブラックボックステストを実行するので、プログラムのバグを早期発見できるのが強みだ。後工程でバグが発見されて修正コストが上がるのを防ぎ、品質の高いシステムを作ることができる。

注:2005年 Infoworld誌 Best Java Development Tool」受賞
2004年 JavaOne会場 「2004 Duke's Choice Award」受賞

注: C2レベル:条件網羅(コンディションカバレッジ)ともいう。コード内のすべての条件を少なくとも1回は実行する。

単体テストを効率化できる理由

 通常、Javaのシステム開発では、JUnitなどのテスティング・フレームワークを使用して、テスト対象クラスと同数、もしくはそれ以上のテスト用クラスを作成してテストを行う。しかし、AgitatorはJUnitのように開発者がテストコードを書く必要がない。AgitatorはコンパイルされたJavaプログラムのバイト・コードを読み込んで、プログラムの構造を解析し、想定されるテスト項目やテストデータ(引数)を自動生成し、プログラムを実行する。よって、開発者はワン・クリックで単体テストを実行できる。しかも、Agitatorの優れた点はプログラムそのものを解析するので、同値分割・境界値・エラー推測を試す必要がある場合、自動的にこれらの値をテストデータに使用することだ。

 AgitatorはEclipseやRAD(Rational Application Developer)などの使い慣れたIDEのプラグインとして提供されるため、開発者は直感的にAgitatorを操作することができる。1つのIDE上でプログラムのコーディングとテストを繰り返し行うことが可能になり、品質の高いプログラムを開発することができる。また、AgitatorはJava1.5で実装されたプログラムもテストすることができる。

Agitatorによる単体テスト

 実際にAgitatorを見てみよう。画面はAgitatorをインストールし、Agitatorによるテストを実行した後のEclipseパースペクティブだ。

画面1 Agitatorのパースペクティブ(画面をクリックして拡大表示)

 Aは、そのステップが実行された回数を示している。そのステップを実行できた場合は緑色で表示し、実行できなかった場合は赤色で表示される。Bの[Outcome]ペインはテスト結果を一覧することができる。正常/異常終了した回数、メソッドごとのカバレッジや発生したすべてのExceptionが表示される。Cのペインには、テストケースとして設定したアサーションや、その時に使用されたテストデータ、発生したExceptionのスタックトレースなどを見ることができる。また、Cの[Factory]タブから開発者自身がテストデータを自由に設定することもできる。

画面2 [Factory]タブからテストに用いる引数を作成しているところ(画面をクリックして拡大表示)

  プロジェクトの状態をレポートするAgitar Management Dashboard

 開発者がテストを実施しても、テスト結果を管理しなければ本当の意味で品質向上/品質管理を実現したとはいえない。そこでAgitar社はプロジェクト全体の状態をレポートする「Agitar Management Dashboard」を提供している。

 Agitar Management Dashboard(以下、Dashboard)は、プロジェクトの状態を数値化・可視化する。さまざまなレポートを出力し、プログラムの品質や開発の進ちょくを管理することが可能だ。レポートはHTMLで出力されるので、レポートの内容をチーム全体で共有することができる。

プロジェクト管理を支援する
 Dashboardはさまざまな情報を出力するが、ここでは[Analysis]タブの内容を紹介しよう。ここにはプログラムの解析結果が出力される。この一覧は、リスク(注)の高い上位10クラスを一覧表示したものだ。マネージャーやリーダーは、日々これらの情報を参照すれば、異常にリスクが高いクラスを早期発見することができ、このクラスに対して早期に対策を実施することができる。

画面3 異常にリスクが高いクラスを早期発見することができるAnalysisタグ(画面をクリックして拡大表示)

注: ここでいうリスクとは、そのクラスのステップ数や条件分岐の多さ、他のクラスから参照される度合いを勘案して算出した値のこと

 ほかにも、各クラスの複雑度、カバレッジ率などを把握することができる。また、プロジェクト全体のクラス数やメソッド数、ステップ数、テスト項目数とそれらの増減数なども把握することが可能だ。

  AgitatorとDashboardの導入メリットは?

継続的なテストと品質管理の仕組みを作る

 Agitar社のテスト効率化ソリューションは、単体テスト自動化による効率化の面だけではない。客観的かつリアルタイムにプロジェクトの品質を管理する仕組みを作れる点にある。

 開発者は実装とAgitatorによるテストを繰り返して開発を進める。それらの結果はCVSなどの構成管理ツールに保管される。定期的(バッチ処理)に、構成管理ツールに保存されたすべてのクラスおよびテスト結果を取得してビルドを実行し、再度一括で単体テストを実行する。

 そして、この実行結果をDashboardでレポーティングする。そうすると、プロジェクトマネージャ/リーダーはこのレポートを見てプロジェクト全体の状況を把握し、問題があれば開発者へフィードバックすることができる。この流れを日々繰り返して開発を進めれば、高い品質を維持したままシステムを完成させることが可能だ。

 また、レポートをE-Mailに添付して送付するようにしておけば、遠方での開発状況も把握できる。この仕組みはオフショア開発にも適用することができる。

図1 AgitatorとDashboardによるプログラム実装とテストのサイクル

テストを意識することのメリット

 Agitatorはメソッド単位でテストを実行するため、開発者は自分が実装したメソッドのカバレッジを容易に把握できる。ソフトウェアの保守性や可読性を考慮すると、各メソッドはシンプルなものが望ましい。開発者に各メソッドのカバレッジを意識させることで、高いカバレッジを実現するメソッドを実装する意識を持たせることができるだろう。カバレッジが高いということは、そのメソッドがシンプルでテストし易い実装だということだ。

 これは当然、ソフトウェア全体のアーキテクチャにも影響する。アーキテクトは、できるだけ効率よく簡単にテストを実行できる設計を心がけなければならない。ソフトウェア全体だけでなく開発プロセス全体をも改善することにつながるだろう。

JUnitに比較して高いROIを実現

 サイオステクノロジーは、下図規模のプロジェクトをJUnitとAgitatorで単体テストした場合の工数を比較した。JUnitの19人日に対して、Agitatorは2.7人日とかなり効率的にテストを実行できることを示している。テストコード作成の工数がいかに莫大であるかがこれでお分かりになるだろう。また、JUnitなどの手動(マニュアル)テストでは、開発者のテストスキルに依存したテストになり、単体テストの品質も開発者のテストスキルに左右されてしまうが、Agitatorは動的なテストをAgitator自身が実行するので、単体テストの品質も均質化されるといえる。

図2 JUnitに比較して約16人日の工数を削減できるAgitator

  更なるテスト効率化を実現するDomain Expert
写真1 製品担当のサイオステクノロジー プロダクト&SIビジネスユニット Webソリューション エンジニアリンググループ コンサルタント 石原賢二氏

 プログラムの実行結果は、フレームワークなどのアーキテクチャに依存する。そのため、フレームワークに依存するようなテストデータやクラスオブジェクトなどを準備しなければならない場合がある。そこで、Agitar社は各種フレームワークに対応したDomain Expertを提供している。現在はHibernate、Struts、Log4JおよびSpringなどに対応している。もちろん、Domain Expertは開発者が独自で作成し、使い慣れたフレームワークもカスタムメイドすることができる。要するに、開発者がDomain Expertを拡張し、追加することが可能だということだ。

 また、サイオステクノロジーのNinja-VA Frameworkに対応したDomain Expertも提供されている。Ninja-VA Frameworkは、ビジュアルなWebアプリケーション開発を実現するフレームワークだ。さまざまなスキルをもった多くのエンジニアが参加するプロジェクトにおいて、均質化されたシステム構築を実現するに非常に適したフレームワークとして定評がある。同フレームワークとAgitatorを組み合わせることで、さらにアプリケーションの開発期間を短縮できるだろう。

3月1日開催「テスト環境」を見直す!
開発生産性・品質向上実践セミナー
基調講演 
〜Continuous Integration, Continuous Agitation〜
AgitarSoftware,Inc Jeffrey Fredrick氏

日本語訳有

提供:サイオステクノロジー株式会社
企画:アットマーク・アイティ 営業企画局
制作:アットマーク・アイティ 編集局
掲載内容有効期限:2006年4月15日
 
◆Agitarの詳細・資料請求
Agitarについてのより詳しい情報、資料をご希望の方は下のボタンをクリックしてください。

ホットトピック
【11月22日】 品質向上ソリューション
フレームワーク紹介セミナー
【Ninja-VAを体験!】
ビジュアルWebアプリケーション開発
体験セミナー
【単体テストの自動化を実現!】
「テスト環境」を見直す! 開発生産性・
品質向上 ハンズオンセミナー 開催中!
SELinux 1-day速習トレーニング開催

関連リンク
Ninja-VA
WebReportCafe
Agitar 単体テスト効率化ソリューション
バーチャルOJT
教育トレーニング
お問い合わせ

記事リンク
企業ユースも攻略していくFirefox(2005/8/25)

将来的には業務アプリもオープンソース化、テンアートニ(2005/7/21)

@IT:開発中ソフトのOSSコードを検出、米Black Duckとテンアートニ(2005/6/24)

@IT:独自のフレームワークをオープンソース化、テンアートニ(2004/8/18)

@IT:Linuxビジネスの真髄は“ブランド”にあり、テンアートニ(2003/8/16)
 




 
@ITトップ@IT Special インデックス会議室利用規約プライバシーポリシーサイトマップ