ソフトウェアテストとは、開発したソフトウェアが正しく動作するか、求められる仕様を満たしているか、意図しない動作をしないかを確認する活動です。現在、ソフトウェアは私たちの生活や仕事を支える重要な存在となっており、不具合が発生すると、経済面での損失や時間の浪費、信用の失墜など様々な問題が発生し、場合によっては重大な事故につながることもあります。
そのためソフトウェアテストには、欠陥を見つけるだけでなく、品質を評価し、運用時のリスクをできるだけ低減する役割があります。
ここでは、ソフトウェアテストの概要を解説します。
ソフトウェア開発における「テスト」とは
現在、私たちの身の回りには多くのソフトウェアが存在しています。スマートフォンやパソコンだけでなく、家電や自動車、各種サービスにもソフトウェアが組み込まれています。
それほどまでに身近なソフトウェアの安全はどこで管理されているのでしょうか。
そこで、製品の安全を担保するのが、開発の工程でおこなわれるさまざまな「テスト」です。
テストは、そのときの工程や、目的に合わせてさまざまなものがあります。
一般的に「ソフトウェアテスト」と聞くと、作ったソフトウェアを実際に動かして、動作を確認するテストを想像しがちですが、それだけではありません。
上記のようなテストを「動的テスト」というのに対し、要件定義書、機能仕様書、構成仕様書、ソースコードのレビューなど、プログラムを実行しないおこなうテストを「静的テスト」とよびます。
ソフトウェアテストの主な種類
前述したとおり、ソフトウェアテストにはさまざまな種類があります。
それらは「工程」「品質の観点」「実行方法」「技法」の4つに分けることができます。
①工程による分類
- ■単体テスト
- ソースコード内の個々のプログラムや関数、クラスなどが正しく動作するかを検証する。ソフトウェアテストの中でもっとも小さい単位で、ユニットテストとも呼ばれる。
- ■結合テスト
- 複数のモジュールやコンポーネントを組み合わせ、連携が正しく行われるかを検証する。一般的には単体テストの後に実施される。
- ■システムテスト
- システム全体を対象に、仕様どおりに動作するか、性能や運用面に問題がないかなどを検証する。
- ■受入テスト
- 最終的な品質確認工程として、ユーザー視点で実際の業務を想定し作成した業務シナリオを基に、システムが要件どおりに動作するかを検証する。
②品質の観点による分類
- ■機能テスト
- テスト対象が、求められた機能や目的を正しく果たしているかどうかを検証する。
- ■性能テスト
- 応答時間、一定時間あたりの処理件数(スループット)、CPUやメモリの使用量などの観点から、システムの性能が要求を満たしているかを検証する。
- ■負荷テスト
- 想定される利用状況やアクセス集中時に、システムが安定して動作するかを検証する。必要に応じて、どの程度まで負荷に耐えられるかも確認する。
- ■ユーザビリティテスト
- 実際にそのシステムを利用するユーザーの視点から、使いやすさや分かりやすさに問題がないかを検証する。
- ■セキュリティテスト
- セキュリティ上の脆弱性やリスクを確認し、不正アクセスや情報漏えいなどの問題が起こらないように検証する。
③実行方法による分類
- ■動的テスト
- 実際にシステムやプログラムを動作させて、その振る舞いに問題がないかを検証する。
- ■静的テスト
- システムやプログラムを実行せず、仕様書・設計書・ソースコードなどを確認して問題がないかを検証する。
④テスト技法による分類
- ■ブラックボックステスト
- プログラム内部の実装を意識せず、入力に対して期待どおりの出力や振る舞いになるかを検証するテスト技法。機能テスト、システムテスト、受入テストなどで広く用いられる。
- ■ホワイトボックステスト
- プログラム内部の構造や処理の流れを考慮し、分岐や条件、経路などを確認しながら検証するテスト技法。主に単体テストや結合テストで用いられる。
- ■同値分割法・境界値分析
- 同値分割は、入力値や条件を、同じ結果となるデータのグループ(パーティション)に分け、その中から代表値を選んでテストするブラックボックステスト技法です。
境界値分析は、同値パーティションの境界上の値を重点的にテストする手法です。 - ■状態遷移テスト
- 状態とイベントの組み合わせを漏れなく整理し、状態遷移表(状態とイベントのマトリクス)や状態遷移図を用いてテストする手法です。
- ■ディシジョンテーブルテスト
- テストケースに漏れが生じないよう、入力データや入力条件の組み合わせに対する処理や出力結果を表(テーブル)に整理し、その表を使ってテストする手法です。
では、次に実際のテストでどのような作業をおこなうのか解説します。
- 【テスト実行前】
- テストを実施する前には、テスト計画を立てる必要がある。
そこでは、リソースの配分、スケジュールの設定、テストの終了基準の決定などを行う。
また、何をどのようにテストするのかを明確にし、必要なテスト条件を網羅できるようにテストケースを設計する。 - 【テスト実行時】
- テスト実行時には、テストを実施するだけでなく、結果を確認し、問題が見つかった場合には記録・分析を行う。
繰り返し実施するテストや定型的な確認は、自動化を取り入れることで、効率と品質の向上が期待できる。 - 【テスト実行後】
- テスト完了後は、結果を報告し、実施内容や発見された課題をドキュメントとして整理する。
これにより、次回以降に同様のテストを行う際の引き継ぎや改善に役立てることができる。
まとめ
- ソフトウェアテストは、工程、品質の観点、実行方法、技法などの切り口で整理できる。
- テストは、準備・実行・完了後の整理まで含めて進めることが重要である。
- 品質を確保するためには、適切な観点でテストを計画・実施することが必要である。
ここまで、ソフトウェアテストの概要から、実際の手順までを簡単に解説してきました。
これだけでも、ソフトウェアテストが多くの人と時間を割いておこなわれているかご理解いただけたかと思います。
【参考文献】
『ソフトウェアテスト教科書 JSTQB Foundation 第5版』



