今回からソフトウェアテストに関するテクニックについて連載していきます。ただ,一口にソフトウェアテストといっても,非常に幅広いものです。そこで,ソフトウェアテストを分類,整理した上で,そのうちの主なテストの種類について取り上げていきたいと思います。
そこで今回は,まずソフトウェアテストの分類について解説していきます。
ソフトウェアテストの分類
皆さんは「○○テスト」というものをいくつか知っていると思います。ここでは,それらを工程・品質の観点・実行方法・技法という4つに分類し,さらにそれぞれに分類されるテストの種類について簡単に見ていきます。
工程
ソフトウェア開発は要件定義,設計,製造,テストといった段階を踏んで進められます。これらの段階を「工程」と呼びます。そしてテストの中でもさらに細かく工程に分割します。
まず,ソフトウェアを構成する最小単位(モジュール)に対して単体テスト(※1)をします。続いて,単体テストを行ったモジュールを組み合わせて統合テスト(※2)をします。そして最後に,モジュールをすべて統合し,さらにハードウェア・ミドルウェアなどとも結合してシステムテスト(※3)をします。
大きく分けるとこの3段階ですが,それぞれのテスト工程をさらに細かいフェーズに分割することがあります。そのフェーズは,上の3段階と同様にテスト対象の範囲によって分割するだけでなく,この後で説明する品質の観点をもとにフェーズを分けることもあります。
また,これらの3段階は開発者が行うテスト工程です。この後で顧客側が受け入れテストを行い,要求通りにソフトウェアが作られているかを確認,承認して,開発が完了します。
- ※1)
- JSTQBシラバス1.0.1版ではコンポーネントテスト,またはユニットテストと呼んでいますが,開発現場では単体テストのほうが一般的に使われていますので,本連載では単体テストと呼ぶことにします。
- ※2)
- 結合テストと呼ばれることもあります。
- ※3)
- 総合テストと呼ばれることもあります。
品質の観点
テストの主な目的は,バグを見つけることによって品質を確保することです。この「品質」にもさまざまな観点があり,その観点別にさまざまなテストがあります。
最も一般的なテストは,テスト対象がもつ機能を確認する機能テストです。テスト対象に入力を与えたり,動作させたりしたときに,正しい実行結果が出るかどうかを確認します。また,機能テストと同様に重要なテストとして性能テストがあります。ソフトウェアは,ユーザがストレスを感じない程度の時間内で実行されなければなりません。また,性能テストに関連して,テスト対象が実行できる限界のリソースを見極めるための負荷テストも必要になります。
また,近年重要性を増しているテストにユーザビリティテストとセキュリティテストがあります。ユーザビリティテストは,ユーザにとっての「使いやすさ」に着目したテストで,特に高齢者や障がい者などに配慮した「アクセシビリティ」の高い作りになっているかどうかの確認が必要になる場合があります。セキュリティテストでは,ソフトウェアの実行中に機密情報が漏洩しないことや,外部からの悪意を持った攻撃に耐えられることを確認します。
この他にも,信頼性や保守性などさまざまな品質を確認するためのテストがあります。
実行方法
テストの実行方法は,テスト対象を動かしてみて結果を確認するのが一般的ですが,これは厳密にいうと動的テストという手法です。それに対して,テスト対象を動かさずにテストをする静的テストというものがあります。ソフトウェアを構成するソースコードを読む,すなわちレビューするのは静的テストの1つですし,ソースコードの記述パターンをチェックする静的解析という技法があります。
テストケース作成技法
テストを実行するには,どのようなテストで何を確認するかという「テストケース」を作る必要があります。このテストケースを作るための技法には大きく2つの種類があります。
1つ目は,テスト対象を「中の見えない箱(ブラックボックス)」としてとらえたブラックボックステストです。テスト対象に入力を与えて,実行された結果が正しいかどうかを確認します。このときに,テスト対象の中でどのような処理が行われているかは気にしません。テスト対象の「仕様」に基づいたテストケースの作成技法です。
もう1つは,テスト対象を「中の見える箱(ホワイトボックス)」としてとらえたホワイトボックステストです。テスト対象に入力を与えた際に,どのような順序で処理が実行されたり,データの値が変化したりするのかを確認します。テスト対象の「構造」に基づいたテストケースの作成技法です。
また,これらの技法をあわせて,仕様と構造の両方に着目しながらテストケースを作成するグレーボックステストという技法もあります。

