ソフトウェアテスト(そふとうぇあてすと)情報システム用語事典

software testing / テスト

» 2011年11月07日 00時00分 公開

 コンピュータのソフトウェアプログラムを実行し、それが意図したとおりに動くかを観測・評価・検証する作業のこと。通常は検証対象のソフトウェアを実際に試行する動的テスト(注1)を指すが、レビュー(注2)などを静的テスト(注3)と呼んで広義のテストに含める見方もある。

 ソフトウェアテストを行う目的としては、「欠陥やバグ(注4)を検出する」「要件を満たすことを保証する」「リリース後の品質リスクを見積もる」「開発プロセス改善の指標となる」などが挙げられる。どの目的を重視するかは、開発するソフトウェアプロダクトの目的やニーズ、開発組織の成熟度などによって変わってくる。

 ソフトウェア開発におけるテストは一般に、ユーザーの使用状況を反映した入力データを用いてソフトウェアを実行し、事前に想定した結果と実際の実行結果をつき合わせて合否の判定を行う。このテスト用の“入力データ”とそれを実行したら得られるであろう“事前に想定した結果”の対をテストケースという。

 すなわち、テストケースを使って対象を実行してみる“行為”がテスト(testing)である。ただし、このときに使用するテストケース(テストデータ、テストスイート)などの“道具”をテスト(test)ということもある。「テスト設計」「テストを書く」という場合のテストは、道具(※)としてのテストである。

※ 一般にテストは能力や実力、学力などを測る道具である。この場合、テスト問題といってもよい

 さらにソフトウェアプロセスの中でテストチームや品質保証部門が担当する作業の全体である“テストフェイズ”、あるいはテスト目的を達成するようにテスト(行為)を一連の流れに編成した“テストプロセス”をテストと呼ぶこともある。「テスト計画」「テストコントロール」という場合のテストは、テストプロセスやテストフェイズを指す。

 テストされていないプログラムは正しい動作を保証されず、実際に高い確率で正しく動作しない。したがってソフトウェア開発において、でき得る限り網羅的にテストを行うべきであり、テスト自体は必須の工程と位置付けられてきた。しかしながら、ソフトウェア開発の黎明期から「完全なテスト」の困難性が指摘されている。

 実用レベルの複雑さ(規模)を持つソフトウェアの場合、“入力データ”と“実行結果”の組み合わせは事実上無限となる。また、環境に依存する機能では、環境との組み合わせも発生する。このため、ほとんどのテストは無限の組み合わせに対して有限個のテストケースをあてがう作業であって、完全なテストにはならないのである。

 ソフトウェアテストにはさまざまなテスト技法が存在するが、これらは「いかにテストケースを少なく、効率的にテスト目的を達成するか」「どれだけテストをすれば、品質を確保したといえるか」といったテーマに対する工夫である。適切なテストプロセスを計画するには各テスト技法の特徴をよく知り、対象ソフトウェアの開発目的に応じて、どのテスト技法をどの段階で行うのか、正しく取捨選択する必要がある。

 ソフトウェアテストの技法や手法には、以下のようなものがある。

ソフトウェアテストの主な分類
テストレベル(開発フェイズ)による分類

テスト設計技法による分類
構造ベース技法制御パステストデータフローパステストなど)
仕様ベース技法同値分割境界値分析原因結果グラフ技法、 状態遷移テスト、ユースケーステスト、ドメイン分析テスト、組み合わせテスト/ペア構成テストなど)
※ テスト設計テクニックによる分類としては、「ホワイトボックステスト」「ブラックボックステスト」「グレーボックステスト」に分ける視点もある。
テスト対象となる品質特性による分類
非機能テスト (性能テスト、負荷テスト、ユーザビリティテスト、相互運用性テスト、保守性テスト、信頼性テスト、移植性テストなど)
※ 機能テストは機能要件に関するテスト、非機能テストは非機能要件に関するテストだが、機能要件/非機能要件の分類は必ずしも固定化されていない。
テスト実施者、テスト目的による分類

ソフトウェアテストの世界には、長年の経験をまとめた7つの一般原則がある。

テストの一般原則
原則1 テストは欠陥があることしか示せない
テストは欠陥を発見できるが、欠陥がないことを証明できない
原則2 全数テストは不可能
ごく単純なソフトウェア以外は、すべての条件をテストすることは非現実的である
原則3 初期テスト
テストは開発ライフサイクルの早い時期に開始すべきである
原則4 欠陥の偏在
テストで見つかる欠陥の大部分は、特定の部分に集中する
原則5 殺虫剤のパラドックス
同じテストを何度も繰り返すと、そのテストでは新しいバグを見つけられなくなる
原則6 テストは条件次第
ソフトウェアの要件が異なれば、テストの方法も変わる
原則7 「バグゼロ」の落とし穴
仮にバグがゼロだとしても、要求を満たしていなければ、そのシステムは役に立たない

バイザーのテスト成熟度
レベル0 テストとは、デバッグのことである
レベル1 テストの目的は、ソフトウェアが正常に働くことを示すことである
レベル2 テストの目的は、ソフトウェアが正常に働かないことを示すことである
レベル3 テストの目的は、ソフトウェアが正常に働かないことで生じるリスクを許容値まで下げることである
レベル4 テストとは、高品質のソフトウェアを開発しようという精神的な規律である

(注1)動的テスト

(注2)レビュー

(注3)静的テスト

(注4)バグ

参考文献

▼『ソフトウェア・テストの技法〈第2版〉』 グレンフォード・J・マイヤーズ、トム・バジェット、テッド・M・トーマス、コーリー・サンドラー=著/長尾真=監訳/松尾正信=訳/近代科学社/2006年7月(『The Art of Software Testing: 2nd ed』の邦訳)

▼『ソフトウェアテスト技法??自動化、品質保証、そしてバグの未然防止のために』 ボーリス・バイザー=著/小野間彰、山浦恒央=訳/日経BP出版センター/1994年2月(『Software Testing Techniques, 2nd Edition』の邦訳)

▼『ソフトウェア品質知識体系ガイド??SQuBOK Guide』 SQuBOK策定部会=編/オーム社/2007年11月


関連用語

▼デバッグ

▼品質保証

▼検証

▼妥当性確認

▼V&V(verification and validation)

▼IV&V(independent verification and validation)

▼ソフトウェアプロセス

▼ソフトウェアテストプロセス

▼Vモデル

▼Wモデル

▼テストカバレッジ

▼単体テスト

▼結合テスト

▼システムテスト

▼受け入れテスト

▼回帰テスト

▼スモークテスト

▼ブラックボックステスト

▼同値分割

▼境界値分析

▼原因結果グラフ技法

▼ホワイトボックステスト

▼制御パステスト

▼カバレッジ基準

▼コードカバレッジ

▼ステートメントカバレッジ

▼ディシジョンカバレッジ

▼ブランチカバレッジ

▼コンディションカバレッジ

▼ディシジョン/コンディションカバレッジ

▼マルチコンディションカバレッジ

▼パスカバレッジ

▼データフローテスト

▼データフローパステスト

▼エラー推測

▼探索的テスト

▼アドホックテスト

▼ランダムテスト

▼機能テスト

▼非機能テスト

▼デベロッパテスト

▼カスタマテスト

▼QAテスト

▼テスティングフレームワーク

▼テストハーネス

▼テストスタブ

▼テストドライバ

▼BTS(bug tracking system)

▼テストケース

▼テストスイート

▼テストオラクル

▼テストベース

▼成果物

▼モジュール

▼バグ

▼インシデント

▼ソフトウェア故障

▼ソフトウェアフォールト

▼ソフトウェアエラー

▼デグレード

▼リグレッション

▼テスト駆動開発

▼動的テスト

▼静的テスト

▼ソフトウェアレビュー

▼SQuBOK(software quality body of knowledge)

▼TMMi(testing maturity model integration)


Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ