第1回:テストをどう考えていますか?特集:理論的・計画的なWebアプリケーションのテストの実現(2/2 ページ)

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

テストは何回行うのか

 テストの開始時期は設計のタイミングであると述べたが、ではテストは何回行えばいいのだろうか? よくカバレージを意識される方も多いが、ではカバレージはどのように考えればいいのだろう。これらはテストを考える上で重要なポイントである。

 まず回数であるが、前述した1の回答の場合、すべての機能を1回しか検証しないと予想されるし、2の回答でも単体試験と結合試験の2回、しかも同一の試験は1回しか行わないのではないだろうか。3の回答のようにテストファーストの考え方であれば、ユニットテストはビルドのタイミングごとに何度も繰り返し実施しているかもしれないが、ユニットテスト以外の検証がどの程度行われているかはテストに対する意識によって異なるだろう。

 機能試験は数回行うということを考えたとしても、性能測定や負荷検証、構成試験についてはどうだろうか? テストファーストの考え方をプロジェクトに適用していても、恐らく繰り返し検証しているのは自動化されているユニットテストだけで、それ以外は1回しかテストしていないことが多いのではないだろうか。

 筆者の経験では、品質は積み上げであると思っている。つまり、ユニットテスト、機能テスト、性能測定、負荷検証、構成試験などの複数のテストを実施する場合、それらの同一のビルドで実施する必要があるということだ。つまり、再ビルドを行ったら、すべてのテストを再度行うということである。ただし、実際問題としてこれはスケジュール的にも工数的にも不可能であるため、優先度のもっとも高いテストを3回、それ以外は2回などという形になるだろう。

 つまり、筆者としては修正が入った場合すべてのテスト作業をやり直すのが理想であるということである。この考えには異論もあるだろうが、ビルドを行うということは非常にリスクの高い行為であると考える筆者はこの考え方を貫き通している。たった1行のソースコードを修正したところ、コードレビューでもまったく問題ないプログラムがコンパイラの不具合によって大きな不具合を起こしたり、ある特定の環境では動作しなかったりといった経験をされた方もいるのではないだろうか。また、たった1行のコードがOSの不具合を引き起こし、アプリケーションが異常終了することも考えられるだろう。

 これらのリスクを考慮すると、テストはビルドを行うごとにすべての検証を行い、各テストによって検証された品質を積み上げ、製品の品質を決定するのが理想だといえるだろう。しかし実際にはこの理想を実現するのは不可能であるため、いかに理想に近い形を実現できるかを考えテスト計画を立て、テスト工程を管理しているのが実情である。この計画の立て方については次回説明しよう。

テストに必要な知識

 ではテストを実施するのに必要な知識にはどのようなものがあるだろうか。単純に開発しているアプリケーションの外部仕様を熟知しているだけでは質の良いテストは実施できない。テストエンジニアに必要な知識をざっと洗い出すと次のようなものがある。

  • テスト手法やテスト技法に関する知識
  • OSやハードウェアの知識
  • プログラミング言語やプログラミング環境の知識
  • ネットワークの知識
  • DBMSやミドルウェアの知識

 これらの知識に加え分析力と文章力が必要となる。筆者の考えるテストエンジニアに必要な知識をまとめると図1のような知識が必要だといえる。プログラマーは非常に深い知識を必要とするが、テストエンジニアの場合は幅広い知識が必要になると個人的には思っている。

図1 図1 テストエンジニアに必要なスキル(クリックで拡大)

 テストエンジニアにはプログラミング知識は必要ないと考える方もいるようである。確かに、単純にテスト仕様書に従い、テストを実施するだけの「テスター」であればそれで構わないが、テスト計画を立案したり、テスタビリティを考慮し設計のレビューを行ったりするテストエンジニアにはそれなりのプログラミングスキルが必要である。実際に開発ツールやネットワーク系のアナライザツールなどのアプリケーションでは、プログラマーよりもテストエンジニアの方がより深くより広い知識を必要とするケースも数多く存在する。つまり、さまざまな知識を身につけ、より深い分析力でアプリケーションを検証していく力がテストエンジニアには求められるというわけである。

 さらにテストエンジニアのリーダー格やマネージャーレベルになると、これらの知識に加え、アーキテクチャレベルの知識やテストの工程管理、プロセス管理に関する知識のほか、品質管理に関するIEEEやJISなどの規定や標準などの知識も要求される。

 このようにテストエンジニアとはプログラマーよりも上とか下とかいう職種ではなく、一つの確立された職種になっているのである。筆者の勤めている会社ではテストエンジニアではなくQA(Quality Assurance)エンジニアと呼ばれている。製品の品質保証業務を担当するエンジニアという意味であり、お客様に信頼される製品として品質保証を提供するエンジニアとして位置づけている。

次回に向けて

 今回は第一回目ということもあり、テストやテストエンジニアについてみなさんが持っているかもしれない誤解や偏見について述べた。次回からはよりテストの中身に入っていき、テストの手法やテストの種類などについて説明していく。

前のページへ 1|2       

Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ