第3回 テストを設計するには(その1)理論的・計画的なWebアプリケーションのテストの実現(2/2 ページ)

» 2005年01月28日 00時00分 公開
[加藤大受,ITmedia]
前のページへ 1|2       

単体テスト

 単体テストというとJavaのユニットテストのフレームワークであるJUnitを初めとするxUnitを思い浮かべる方が数多くおられると思うが、実装したクラスやモジュール単位で検証する方法は非常に古くから実施されているテスト項目である。単体テストを行うことで、設計変更などで発生した変数名の変更忘れなどのコーディングミス、条件分岐の条件不足、例外処理の実装不足などを発見できる。また、データベースとのやりとりを行うクラスなどではDBUnitなどのモックアップを使ったユニットテストのフレームワークを利用することで、データベースへのアクセス環境が存在しなくても単体テストを実施できる。

 確かに単体テストはコードを書く立場の人にとって非常に有意義なテストであるが、筆者のような品質保証を専門とする立場からすると、全テストの一つでしかなく、単体テストのパス率は実装コードの信頼性を計る手段であると言える(この考え方には納得されない方も数多くおられると思うが、品質保証という面から再度単体テストの位置づけを考えてみていただきたい)。

 単体テストはコードの1行1行の信頼性を検証するものであり、一般的に開発者の環境で行われることが多い。このため、当然のことながら実装されたコードが本当に要件と一致しているかを調べることができない。要件レベルの検証としては単体テスト以降で行われる機能試験や結合試験で行うことになる。

 単体テストの網羅率が100%であることを意識するあまり、単体テストの実装に工数が取られ、要件レベルでの検証がおろそかになる経験をお持ちの方も多いかもしれない。単体テストの実装に時間がかかるクラスやモジュールなどにおいては開発者でのピアレビューを実施し、その工数を削減することも方法の一つだろう。単体テストは品質をあげるための手段の一つであると理解してほしい。

機能試験

 機能試験は必ず実施されるテストの一つであり、実装されたシステムの各機能を一つ一つテストケースを作りながら実施していく。各テストケースにそれぞれ詳細なステップを記載し、試験仕様書を作成している方が多いだろう。さて、機能試験の試験仕様書はどのタイミングでどのように作成しているのだろうか。

 筆者のお勧めする方法としては要件定義書から機能一覧を作成し、その機能の説明を加えた試験概要書を作成してから試験仕様書の作成を行う方法である。ただし、これは業界標準の方法ではなく、テストをどのように行うのかについてまだ知識を多く持たない方のための方法であることを付け加えておく。

 機能一覧を作成することで実装される機能が明確になり、その機能の解説と優先順位を入れた試験概要書を作成することで各機能レベルの優先順位をつけることができるようになる。試験仕様書を作成するときは一番高い優先順位の機能からテストケースを作成し、そのテストケースについても優先順位をつけることでテスト実施の優先順位を決定できる。優先順位をすでに考慮しているため、テスト実施の工数の計算も明確になる。また、再帰テストのタイミングで優先順位の高い項目だけ再試験することで品質の低下の測定も可能となるだろう。

 ではどのタイミングで試験概要書や試験仕様書をアップデートすればいいのだろうか。これは、できる限りプロジェクトの開始時にマイルストーンを決定し、そのマイルストーンのタイミングで優先順位の見直しを含め、アップデート作業をすることになる。また、最初の1週間で新機能の実装と単体試験、次の1週間で機能試験などのサイクルになっている場合は、その2週間のサイクルでアップデートを実施するのがいいだろう。なお、テストの優先順位を考えるときは前述したビジネスリスクの考慮を忘れてはならないことを再度言い添えておく。

性能検証

 システムを構築する上で性能はもっと注力すべきポイントだろう。RFPの時点でユーザーのレスポンス要求が明確である場合は、できる限り早いタイミングでシステム要件が適しているかを検証する必要があるだろう。

 すでに理解している人にとってみれは非常に当たり前のことであるが、性能検証はプロジェクト期間中に数回実施する。実施方法についても同一の検証を数回行い平均値にて分析するだけでなく、各レイヤーにて行う必要がある。例えば、RDBMとStrutsを利用したJavaベースのシステムである場合は次のようなレイヤーで性能測定を実施し、性能を検証する。

  • 設計したスキーマを用いてのRDBMS単体での性能検証
  • JDBCドライバを使用しての性能検証
  • フレームワークレベルでの性能検証
  • アプリケーションレベルでの性能検証

 これはレスポンス要求が3秒以内のシステムの場合、RDBMSへのSQL文での問い合わせで3秒を超えてしまう場合はすでに性能を満たすことができないといえるからである。チューニングの工数を削減するためにも性能測定はできる限りプロジェクトの早期から、できる限りレイヤーを分けて実施すべきである。

次回に向けて

 今回はテストを設計するために必要な単体テスト、機能試験、性能検証といったテストに関連する知識について説明した。次回も同様に負荷試験、再帰テストなど、各テストに関する説明を行っていきたい。

前のページへ 1|2       

Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ