テストにはさまざまな種類がありますが、ここではそれらを「実行方法」「テスト対象」「テスト設計技法」によって分類します。
・静的テスト
プログラムを実行せずに確認するテストです。コーディングの工程で実施するテストで、「ソースコード・レビュー」「ソースコード・インスペクション」などとも呼ばれます。確認する観点をまとめたチェックリストに従ってレビューを行うのが一般的な方法で、これをサポートするツールには「Checkstyle」など数多くあります。
コーディング以外のテスト工程においても、ソースコードの修正を行いますので、各工程の最後に再度実施すると効果的です。
・動的テスト
プログラムを実行し、機能、性能などを確認するテストです。単体テスト以降のテストは通常このテストになります。
何をテストするか(どの品質特性を確認するか)による分類です。ここでは代表的なもののみを説明します。
・機能テスト
テストを実行する単位が、要求される機能仕様のとおりに動作することを確認するテストです。つまり、想定される条件下で、与えられた入力に対する出力結果が正しいかどうかを確認します。
Javaの単体テストにおける機能テストは「JUnit」を使うのが一般的で、JUnitを使ってさらに効率よくテストができる「TPTP」などのツールもあります。また「Solex」など、Webアプリケーションに対する機能テストを行うツールもあります。これらのツールは同じテストを何度も繰り返し実行できるというメリットがありますので、回帰テストにも用いられます(システムテストの前に行う機能確認のテストのみを指すという定義もあります)。
・性能テスト
システム全体や機能が、要件で決めた性能目標が満たされているかどうかを確認するテストで「パフォーマンステスト」とも呼ばれます。大量データを与えることなどでシステムに高い負荷を掛ける「負荷テスト」も性能テストの1つです。
性能テストでは、「プロファイラ」を使ってプログラムの実行状況やリソースの使用状況を監視します。先ほど機能テストで紹介した「TPTP」には、この機能も備わっています。
・セキュリティテスト
悪意のある攻撃によって、システムが不正な動作をしたり、情報が漏れたりといったことが起こらないことを確認するテストです。静的テストで確認可能な部分もありますが、実際にシステムに対して攻撃して確かめる方が有効です。セキュリティに関する専門的な知識を持った人がテストを行います。
・ユーザビリティテスト
システムの「使いやすさ」を確認するもので、近年特に重要性が高まっています。対象とする利用者が、システムを容易に使えるかどうかを確認するものですので、不特定多数の人が使うシステムは多くの利用形態を想定したテストをする必要があります。
テストを行うときには、「どのような事前状態において、どのようなテストデータを入力した場合に、どのような出力結果が出て、どのような事後状態に変わることを確認するか」という一連のパターンを、必要な数だけ挙げなければなりません。このパターンを「テストケース」と呼びますが、テストケースを作る、すなわちテストを設計する方法には大きく分けて2種類あります。
・ホワイトボックステスト
プログラムの内部構造を見て、プログラムの行や分岐に着目してテストケースを作るものです。プログラム中のすべての行や分岐のうちで、テストの実行により通過した行や分岐の割合をカバレッジと呼びますが、ホワイトボックステストは、このカバレッジを上げることを意識してテスト設計をします。
・ブラックボックステスト
プログラムの内部構造を見ずに、ドキュメント(設計書)をベースにテストケースを作るものです。ただし、暗黙的な仕様を考慮したり、経験的にバグが出そうなケースを想定したりして、ドキュメントにないケースをテストすることもあります。
※単体テストは実施対象がプログラムだから「ホワイトボックステスト」という人もいますが、単体テストでもプログラムの中を意識するか、しないかでホワイトボックステストとブラックボックステストに分かれます。
プログラムが仕様どおりに実装されているかどうかを確認するというテストの目的に照らし合わせれば、ブラックボックステストを行うべきです。ホワイトボックステストはソースコード自体が正しいという前提が必要になります。ですから、まずブラックボックステストを実施し、カバレッジを測定して未実施の行や分岐が残っていたら、内部構造を確認して追加テストが必要かどうかを判断するのがよいでしょう。
ここまで見てきたテストの種類を、実施するテスト工程と対応付けると表1のようになります(○は必ず実施するもの、△は実施する場合があるものです)。
実行方法 | テスト対象 | テスト設計技法 | ||||||
---|---|---|---|---|---|---|---|---|
テスト工程 | 静的テスト | 動的テスト | 機能テスト | 性能テスト | ユーザビリティテスト | セキュリティテスト | ホワイトボックステスト | ブラックボックステスト |
コーディング | ○ | |||||||
単体テスト | ○ | ○ | ○ | ○ | ||||
結合テスト | ○ | ○ | △ | △ | △ | △ | ○ | |
システムテスト | ○ | ○ | ○ | ○ | ○ | ○ | ||
表1 テスト工程とテストの種類 |
Copyright © ITmedia, Inc. All Rights Reserved.