ソフトウェアテストとは 、コンピュータ上で動作するソフトウェアに対し、期待どおりに動作することを実証したり、欠陥や想定外の動作を検出したりする活動のことです。
ソフトウェアテストは、あらゆるソフトウェアを世に出す上で避けて通れないプロセスといえるでしょう。そのため、ソフトウェア開発ライフサイクルの中で、テスト活動を整理し、理解し、適切に実施していくことが重要です。
そこで本記事では、ソフトウェアテストの目的や、種類について解説していきます。
また、ソフトウェアテストを行う上で覚えておきたい7原則や、プロセス、成功させるポイントについてもご紹介しますので、ぜひ参考にしてみてください。
1.ソフトウェアテストとは
ソフトウェアテストとは、ソフトウェアの品質向上のために欠かせないものです。この章では、ソフトウェアテストについての概要と目的について解説していきます。
1-1 ソフトウェアテストとは「品質を検証するプロセス」
ソフトウェアテストとは、コンピュータ上で動作するソフトウェアが期待どおりに動作するか、品質に問題がないかを検証する一連のプロセスです。
ソフトウェアは人が開発する以上、開発段階での人的ミスをゼロにすることはできません。しかし、リリース後に致命的な問題が発生すれば、顧客に多大な損害を与えたり、最悪の場合、ユーザーの命を脅かしたりするケースもあります。
このような問題の流出を防ぐために重要となるプロセスが、ソフトウェアテストです。
また、広義的には、ソフトウェアの開発成果物(設計書やソースコードなど)のレビューもソフトウェアテストの一種です。これらは「静的テスト」と呼ばれますが、本記事では主にソフトウェアの実行をともなう「動的テスト」に焦点を当てて解説します。
1‐2 ソフトウェアテストの目的は「品質を証明すること」
ソフトウェアテストの主な目的は、ソフトウェアの品質が妥当であるという裏付けを取り、不具合(不正な動作)を検出することです。
ソフトウェアは、あるべき姿を明確化した「要件」や、その実現方法を具体化した「設計」に沿って「実装」します。
そして、動的テストにおいては、ソフトウェアを実際に動かすことで、要件や設計どおりの振る舞いとなっていることを確認し、品質の妥当性を証明するのです。
ソフトウェアテストで不具合が見つかった場合は、その原因を調査し、バグ(プログラムや設計などの不備)を修正する必要があります。
ソフトウェアを修正し、バグを解消するプロセスを「デバッグ」と呼びます。デバッグはテスト前に行うべきプロセスであり、ひと通りのバグを解消したうえでソフトウェアテストを実施することが理想です。
デバッグにおける主な観点やツールについては次の記事をご覧ください。
2.ソフトウェアテストの7原則
ソフトウェアテストを実施するにあたり、知っておきたいのが「ソフトウェアテストの7原則」です。
これはソフトウェアテストを行う上での一般的なガイドラインで、ソフトウェアテストの認定資格である、「JSTQBテスト技術者資格制度」のシラバスにも記載されています。
★ソフトウェアテストの7原則
原則1:テストは欠陥があることは示せるが、欠陥がないことは示せない
原則2:全数テストは不可能
原則3:早期テストで時間とコストを節約
原則4: 欠陥の偏在
原則5: 殺虫剤のパラドックスに注意
原則6: テストは実施内容次第
原則7: 「バグゼロ」の落とし穴
それぞれ詳しくご紹介します。
原則1.テストは欠陥があることは示せるが、欠陥がないことは示せない
ソフトウェアテストは前提として、欠陥があることは示せますが、欠陥がないことを完全には示せません。テストケースを実行して問題が出なかったとしても、偶然発生しなかったり、見逃したりしていることも考えられます。
そのため、「作成した全てのテストケースに問題がない=100%欠陥がない」とは言い切れず、過信は禁物です。
原則2.全数テストは不可能
ソフトウェアテストのテストケースを全て網羅しようとすると、さまざまな要素の組み合わせを考慮する必要があります。
結果としてテストケースは膨大なものとなるため、現実的に全てを実施することは不可能です。そのため、検証する価値の高いテストケースを選択して作成したり、実行上の優先順位を付けたりすることが重要となります。
原則3.早期テストで時間とコストを節約
ソフトウェアテストは、できる限り早期に実施することが理想といえます。ソフトウェアテストが後になるほど、欠陥が判明した際に多くのプロセスをさかのぼって対応しなければなりません。
つまり、早期に実施するほうが時間とコストを節約できるといえます。
原則4.欠陥の偏在
ソフトウェアの欠陥は、特定の機能やコンポーネントに偏りやすい傾向があります。これは、機能やコンポーネントによって、難易度や複雑度が異なるためです。
難易度が高い、あるいは複雑なものほど欠陥が生じやすいでしょう。そのため、欠陥の偏在を考慮してテスト工数を配分することが理想です。
原則5.テストの弱化
ソフトウェアテストでは、決まったパターンのテストケースを実施し続けると、新しい欠陥を発見することが難しくなります。
そのため、定期的にソフトウェアテストの方法を見直すことも考えましょう。
原則6.テストはコンテキスト次第
ソフトウェアテストの内容や方法は、テスト対象や目的、予算などさまざまな要素の影響を受けます。
そのため、「このソフトウェアはこうテストすべきだ」といった先入観を持つべきではありません。コンテキスト(状況や環境)次第でテストの内容や方法が変わってくることを念頭に置きましょう。
原則7.「欠陥ゼロ」の落とし穴
欠陥やバグが無く、テストがうまくいったとしても、そのソフトウェアを顧客やユーザーが満足してくれるかは別問題です。
たとえば、見た目やデザイン、ユーザビリティなどは、ユーザーの要求が満たされていなければ不満足につながってしまいます。欠陥やバグをゼロにすることに固執するのではなく、顧客やユーザーの要求に対する満足度には、常に注意するようにしましょう。
3.ソフトウェアテストの種類
ソフトウェアテストには、テストレベルやテスト技法ごとに様々な種類があります。どのようなテストがあるか、解説していきます。
3-1 テストレベルによる分類
テストレベルとは、ソフトウェア開発ライフサイクルの活動をレベル別に分類して実施する際のテストグループのことです。JSTQBでは「系統的にまとめ、マネジメントしていくテストの活動グループである」と定義されています。
ソフトウェア開発ライフサイクルモデルの代表例の一つである、V字モデルを例にすると以下のような種類があります。
単体テスト(ユニットテスト)
単体テスト(ユニットテスト)は、ソフトウェアのプログラムを構成する個々の要素(コンポーネント)に対して実施するテストです。
単体テストは、プログラムレベルの具体的な実装方法を決める「詳細設計」の妥当性を検証するものです。コンポーネントに入力したデータに応じて、適切な処理が行われ、詳細設計どおりの結果が出力されることを検証します。
結合テスト(統合テスト)
結合テスト(統合テスト)は、2つ以上のコンポーネントが正しく連携・相互作用するかを検証するテストです。
たとえば、コンポーネントAから送られたデータを、コンポーネントBが正しく表示できるか、といった複数要素をともなう検証を行います。結合するテスト対象は、それぞれ単体テストを実施し、バグを取り除いたものとなるため、単体テストが正しく完了していなければ、結合テストの段階で不具合が多発する恐れがあります。
結合テストは、ソフトウェアの機能や画面、それらの構成などを具体化する「基本設計」の妥当性を検証するものです。複数コンポーネントで構成された機能が基本設計どおりに動作することや、連携動作による副作用などがないことを検証します。
システムテスト(総合テスト)
システムテストは、全てのコンポーネントやサブシステムを統合したシステム全体が正しく振る舞うかを検証するテストです。
できる限り本番環境に近いテスト環境を構築して実施することが理想です。単体テストや結合テストが完了し、バグがひと通り取り除かれた前提で実施します。
システムテストは、顧客の要求にもとづきソフトウェアの機能や性能などを明確化する「要件定義」の妥当性を検証するものです。各機能が要件定義で定められた通りに動作することや、システム全体の性能が要件を満たすことなどを検証します。
受け入れテスト
受け入れテストは、ソフトウェアを納品し、実際に運用しても問題ないかを検証する最終的なテストです。システムテストにより、全体の品質を担保できた前提で実施します。
受け入れテストは、顧客やユーザーがソフトウェアに求めるものを明確化する「要求分析」の妥当性を検証するものです。顧客やユーザーの要求を満たす必要があるため、実運用に近い環境・手順で動作させ、要求に合致しない部分がないかを検証します。
インストールや設定といった導入段階の検証も含まれることが一般的です。受け入れテストは多くの場合、ソフトウェアを発注した顧客や独立したテストチームが行います。
各レベルの詳細について以下の記事で解説しています。
3-2 テスト技法による分類
ソフトウェアテストでは様々なテスト技法が用いられます。主な技法が以下の3種類です。
- ブラックボックステスト
- ホワイトボックステスト
- 経験ベースのテスト
それぞれの概要についてご紹介します。
ブラックボックステスト
「ブラックボックステスト」は、テスト対象の内部構造を考慮せず、外部から見た振る舞いに着目するソフトウェアテストです。
ソフトウェアに特定のインプットを与えて動作させた際に、要件や設計として想定されるアウトプットが得られることを検証します。なお、一般的にシステムテストは外部的な振る舞いに着目するため、ブラックボックステストの一種です。
ブラックボックステストの主な技法は以下の通りです。
- 境界値分析
- 同値分割法
- デシジョンテーブルテスト
- 組み合わせテスト
- 状態遷移テスト
ホワイトボックステスト
「ホワイトボックステスト」は、テスト対象の内部構造に着目するソフトウェアテストです。プログラムレベルで処理の分岐やデータの流れなどを把握したうえで、設計どおりの処理が行われるかを検証します。なお、一般的に単体テストはプログラムの処理分岐なども含めて検証するため、ホワイトボックステストの一種です。
ホワイトボックステストの主な技法以下の通りです。
- 制御フローテスト
- データフローテスト
経験ベースのテスト
「経験ベースのテスト」は、過去の経験を頼りに実施するソフトウェアテストです。テスト担当者自身の経験則や、過去のテスト結果から得た知見などを活用します。
主にテストケースを作成・選択するプロセスに経験を活用するのが特徴です。
前述の2種類では難しいテストケースを実施できる可能性がありますが、品質はテスト担当者やテストチームの経験量に大きく依存します。ブラックボックステストやホワイトボックステストを補完する位置づけのテストといえます。
経験ベースのテストの主な技法以下の通りです。
- 探索的テスト
- エラー推測
- チェックリストベースドテスト
テスト技法の種類については以下でより詳しく解説しています。
4.ソフトウェアテストの主要プロセス
ソフトウェアテストでは、さまざまなプロセスを正しい手順で進めていく必要があります。ソフトウェアテストの主要なプロセスは、次の6つです。
4-1 テスト計画
「テスト計画」は、ソフトウェアテストを進めるうえでの基本事項を明確にするプロセスです。
ソフトウェアテストの目的やテスト範囲、担当者、スケジュールなどを決めます。テスト計画に不備があれば、以降のテストプロセスにも悪影響が生じるでしょう。そのため、テスト計画から正確に実施することが重要となります。
4-2 テスト分析
「テスト分析」は、対象となるソフトウェアの要件や設計などを分析し、「何をテストすべきか」を明確にするプロセスです。
具体的なテストケースは作成しませんが、どのような観点でテストすべきかを決めておく必要があります。十分なテスト分析を行うことで、テストケースを作成する際の方向性がはっきりするでしょう。なお、テスト分析について詳しくは、次の記事をご覧ください。
4-3 テスト設計
「テスト設計」は、テスト分析に沿って必要なテストケースを作成し、「どのようにテストするか」を明確にするプロセスです。
テストケースを漏れなく作成しようとすると、膨大な量となり、負担が大きくなりやすいといえます。そのため、「同値分割法」や「境界値分析」といったテスト技法を活用し、効率化することが一般的です。テスト技法の種類について知りたい方は、次の記事を参考にしてください。
4-4 テスト実装
「テスト実装」は、テストケースを実行するために必要となる準備作業全般を行うプロセスです。たとえば、テストデータやテストアカウントの作成が挙げられます。
また、ソフトウェアテストの自動化を図る場合、テストコードの実装やテスト自動化ツールの導入が必要です。
テスト自動化について詳しくは、次の記事をお読みください。
4-5 テスト実行(実施)
「テスト実行(実施)」は、テストケースに沿って実際にソフトウェアを検証していくプロセスです。
テストケースの条件や手順のもとでソフトウェアを動かし、実際の振る舞いが期待結果と一致しているかを検証します。テスト実行の結果、NGのテストケースがある場合は、原因調査のうえ修正が必要です。
テスト実行について詳しくは、次の記事をご覧ください。
4-6 テスト完了
「テスト完了」は、ソフトウェアテストの結果を整理し、最終確認やフィードバックを行うプロセスです。
ひと通りテストケースを消化した後に実施します。テスト結果に問題がないことの確認や、作業上の改善点や問題点の振り返りなどが主な内容です。特に問題がなければ、ソフトウェアテストは完了となります。
5.ソフトウェアテストを成功につなげる方法
ソフトウェアテストの方法はさまざまですが、企業やチームに合わせた方法を選ぶことが大切です。ここでは、ソフトウェアテストを成功につなげる方法を3つ紹介します。
5-1 テスト自動化を図る
ソフトウェアテストのテストケースは、適切に選定したとしても相当数になることが少なくありません。
テスト担当者の負担を軽減したい場合は、テスト自動化を図るとよいでしょう。ツールやテストコードを活用することで、テストケースを自動で実行できます。
ただしテスト自動化の実施方法によっては、かえって負担増大につながる場合もあるため注意が必要です。
テスト自動化については、以下の記事をご覧ください。
5-2 テスト技法に関する知識を増やす
ソフトウェアテストを効率的に実施したい場合、テスト技法に関する知識を増やすことも効果的です。テスト技法を有効活用することでテスト設計を効率化でき、価値の高いテストケースを選定できるでしょう。
なお、テスト技法に関する理解を深めたい場合は、弊社のeラーニングをご活用ください。動画とテキストを組み合わせた専門家監修の教材を用いて、テストやソフトウェア品質について効率的に学習できます。

ソフトウェア品質セミナー eラーニング版「品質とテストの基本編」
ソフトウェアテストの意義と重要性、並びにソフトウェア業務の概観と品質の考え方を体系的に把握することを目的としています。そして、基本的な発想法の講義を実施し、実業務での活用の視点を提供します。
5-3 自社での実施が難しい場合は第三者検証を活用する
高品質なソフトウェアテストを実施するためには、テスト分析やテスト設計といった各プロセスのノウハウが必要です。
ソフトウェアテストに精通した人材を自社で確保できない場合は、外部のプロが実施してくれる「第三者検証」を活用するのもよいでしょう。
なおQbookを運営するバルテスでは、ソフトウェアテストの専門家が実施する第三者検証サービスを提供しています。自社でソフトウェアテストの実施が難しい場合は、ぜひご活用ください。
まとめ
ソフトウェアテストとは、ソフトウェアが期待どおりに動作するか、品質に問題がないかを検証する一連のプロセスのことです。
テストの種類は様々ありますが、テストレベルでの分類は以下の通りです。
- 単体テスト...詳細設計に対応しコンポーネント単体を検証
- 結合テスト...基本設計に対応しコンポーネントやシステムの相互作用部分を検証
- システムテスト...要件定義に対応し統合されたシステムが要件を満たすことを検証
- 受け入れテスト...要求分析に対応し対象システムが要求に妥当であるかを検証
テスト技法による分類は主に以下の3つです。
- ブラックボックステスト
- ホワイトボックステスト
- 経験ベースのテスト
ソフトウェアテストでは、さまざまなプロセスを正しい手順で進めていく必要があります。
あらゆるソフトウェアにはテストが欠かせません。高品質なソフトウェアテストを実施するためには、基本的な知識を身につけることが大切です。
本記事で紹介したソフトウェアテストの種類やプロセス、方法をぜひ参考にしてください。