![]() |
![]() |
|
Loading
|
@IT > Javaシステム開発のテスト現場、このままで良いのか? |
![]() |
|
開発者の多くは、システムの大規模化・短納期化に直面し、プログラムを実装するのが精いっぱいで、システムの品質を確保するのに苦労しているのではないだろうか。システムの納品間際になってテスターを大量投入したり、徹夜を繰り返したりする光景も珍しくない。では、どうやって効率良くテストを進めていけば良いだろうか。 テストの目的は、「不具合(バグもしくはエラーともいう)を発見すること」である。やみくもにテストを実施しても不具合を見つけられなければ無意味だ。そして、テスト工程で一番重要なのが単体テストだ。なぜなら、単体テストを確実に実施していれば、システム開発サイクルの早い段階で不具合が見つかり、以降の結合テストやシステムテストをスムーズに運べるからだ。単体テストの品質が悪いと、単体レベルの不具合(プログラムバグ)により、結合テストの進ちょくを止めることになる。そして、システムの機能を確認するべき結合テストでプログラムバグをつぶすというまったく的外れなことをすることになる。結局、修正費用と工数を消耗することになり、チーム全体が疲弊していく。 また、開発者の多くは、自分の仕事はソースコードを書くことだけだと思っている。しかも、自分が書いたソースコードには不具合がなく正常に動作するものだと信じ込んでいる。プロジェクトマネージャやリーダーは、開発者ならソースコードを書く技法も知っているため、それをテスト(ここでは単体テストのことを指す)する技法や方法も知っているだろうと信じている。これは非常に大きな問題だ。プロジェクトマネージャやリーダーは効果的な単体テストを実施できるツールを導入し、必要であればトレーニングを実施し、手順を確立してそれを管理する体制を構築しなければならない。 単体テストを効果的かつ効率的に実施すれば、テスト工程全体をスムーズに運ぶことができ、不具合に悩まされることもなくなる。また、プロジェクト全体の工数が最適化されるため、組織的な費用対効果も上がることになる。ここでもっとも大事なのは、テストを効率的に進めることによって、開発者が精神的にも肉体的にも楽になるということだ。しかし、これは誰もが認識していることであり、多くの開発者の共通の悩みの種だ。我々は、どうやってこれらの問題を解決し、実現していけばよいだろうか。 この問題を根本から解決するソリューションが米Agitar Software, Inc(以下、Agitar社)の単体テスト効率化ソリューションだ。単体テスト効率化ソリューションとは以下のことを総称したものである。
のことを指す。それでは、単体テスト効率化ソリューションを見てみよう。
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」受賞
注: 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パースペクティブだ。
Aは、そのステップが実行された回数を示している。そのステップを実行できた場合は緑色で表示し、実行できなかった場合は赤色で表示される。Bの[Outcome]ペインはテスト結果を一覧することができる。正常/異常終了した回数、メソッドごとのカバレッジや発生したすべてのExceptionが表示される。Cのペインには、テストケースとして設定したアサーションや、その時に使用されたテストデータ、発生したExceptionのスタックトレースなどを見ることができる。また、Cの[Factory]タブから開発者自身がテストデータを自由に設定することもできる。
開発者がテストを実施しても、テスト結果を管理しなければ本当の意味で品質向上/品質管理を実現したとはいえない。そこでAgitar社はプロジェクト全体の状態をレポートする「Agitar Management Dashboard」を提供している。 Agitar Management Dashboard(以下、Dashboard)は、プロジェクトの状態を数値化・可視化する。さまざまなレポートを出力し、プログラムの品質や開発の進ちょくを管理することが可能だ。レポートはHTMLで出力されるので、レポートの内容をチーム全体で共有することができる。 ■プロジェクト管理を支援する
注: ここでいうリスクとは、そのクラスのステップ数や条件分岐の多さ、他のクラスから参照される度合いを勘案して算出した値のこと
ほかにも、各クラスの複雑度、カバレッジ率などを把握することができる。また、プロジェクト全体のクラス数やメソッド数、ステップ数、テスト項目数とそれらの増減数なども把握することが可能だ。
■継続的なテストと品質管理の仕組みを作る Agitar社のテスト効率化ソリューションは、単体テスト自動化による効率化の面だけではない。客観的かつリアルタイムにプロジェクトの品質を管理する仕組みを作れる点にある。 開発者は実装とAgitatorによるテストを繰り返して開発を進める。それらの結果はCVSなどの構成管理ツールに保管される。定期的(バッチ処理)に、構成管理ツールに保存されたすべてのクラスおよびテスト結果を取得してビルドを実行し、再度一括で単体テストを実行する。 そして、この実行結果をDashboardでレポーティングする。そうすると、プロジェクトマネージャ/リーダーはこのレポートを見てプロジェクト全体の状況を把握し、問題があれば開発者へフィードバックすることができる。この流れを日々繰り返して開発を進めれば、高い品質を維持したままシステムを完成させることが可能だ。 また、レポートをE-Mailに添付して送付するようにしておけば、遠方での開発状況も把握できる。この仕組みはオフショア開発にも適用することができる。
■テストを意識することのメリット Agitatorはメソッド単位でテストを実行するため、開発者は自分が実装したメソッドのカバレッジを容易に把握できる。ソフトウェアの保守性や可読性を考慮すると、各メソッドはシンプルなものが望ましい。開発者に各メソッドのカバレッジを意識させることで、高いカバレッジを実現するメソッドを実装する意識を持たせることができるだろう。カバレッジが高いということは、そのメソッドがシンプルでテストし易い実装だということだ。 これは当然、ソフトウェア全体のアーキテクチャにも影響する。アーキテクトは、できるだけ効率よく簡単にテストを実行できる設計を心がけなければならない。ソフトウェア全体だけでなく開発プロセス全体をも改善することにつながるだろう。 ■JUnitに比較して高いROIを実現 サイオステクノロジーは、下図規模のプロジェクトをJUnitとAgitatorで単体テストした場合の工数を比較した。JUnitの19人日に対して、Agitatorは2.7人日とかなり効率的にテストを実行できることを示している。テストコード作成の工数がいかに莫大であるかがこれでお分かりになるだろう。また、JUnitなどの手動(マニュアル)テストでは、開発者のテストスキルに依存したテストになり、単体テストの品質も開発者のテストスキルに左右されてしまうが、Agitatorは動的なテストをAgitator自身が実行するので、単体テストの品質も均質化されるといえる。
プログラムの実行結果は、フレームワークなどのアーキテクチャに依存する。そのため、フレームワークに依存するようなテストデータやクラスオブジェクトなどを準備しなければならない場合がある。そこで、Agitar社は各種フレームワークに対応したDomain Expertを提供している。現在はHibernate、Struts、Log4JおよびSpringなどに対応している。もちろん、Domain Expertは開発者が独自で作成し、使い慣れたフレームワークもカスタムメイドすることができる。要するに、開発者がDomain Expertを拡張し、追加することが可能だということだ。 また、サイオステクノロジーのNinja-VA Frameworkに対応したDomain Expertも提供されている。Ninja-VA Frameworkは、ビジュアルなWebアプリケーション開発を実現するフレームワークだ。さまざまなスキルをもった多くのエンジニアが参加するプロジェクトにおいて、均質化されたシステム構築を実現するに非常に適したフレームワークとして定評がある。同フレームワークとAgitatorを組み合わせることで、さらにアプリケーションの開発期間を短縮できるだろう。
提供:サイオステクノロジー株式会社 企画:アットマーク・アイティ 営業企画局 制作:アットマーク・アイティ 編集局 掲載内容有効期限:2006年4月15日 |
|