システムテストはソフトウェア開発のテストレベルの一つになります。
システムテストは総合テストと呼ばれる場合もあり、開発したシステムやソフトウェアの振る舞いや能力が要求定義の内容を満たしていることを確認するテストになります。
本記事では、システムテストの概要、テストの内容、テストベース、結合テストとの違いに関して解説します。
システムテストとは
システムテストの主な確認内容は下記の二点となります。
- システムやソフトウェアの振る舞いや能力が要求定義の内容を満たしていること
- システムやソフトウェアの品質が信頼できるものであること
ソフトウェア開発モデルの一つ、ウォーターフォールモデルの上流工程(品質を決める工程)と下流工程(品質の確認を行う工程)の関係性を示した「V字モデル」を参照すると、システムテストは上流工程の要件定義に対応していることがわかります。
上図の通り、システムテストは要件定義の内容を満たしていることを確認することが目的のテストレベルになります。
システムテストで実施するテストの種類
システムテストでは、機能テスト、非機能テスト、変更点のテスト(リグレッションテスト)など、様々なテストを実施しますが、テスト工程の終盤に差し掛かったシステムテストでは主に非機能的な特性に着目したテストを実施します。
具体的なテスト項目はシステムやソフトウェアの仕様、能力、性質、用途など、様々な要因によって異なりますが、一般的には下記のようなテストを実施します。
非機能テストの実施項目
- 負荷テスト
システムやソフトウェアの使用量の最低値、標準、最高値での動作を評価するテスト - ストレステスト
システムやソフトウェアの使用量の最高値を超えた条件下での動作を評価するテスト - 使用性テスト
システムやソフトウェアをユーザーが利用する上での有効性、効率性、満足度を評価するテスト - 相互運用性テスト
二つ以上のシステムやソフトウェアが情報交換を行い、交換した情報を処理できることを判定するテスト - 保守性テスト
システムやソフトウェアの修正のしやすさを判定するテスト - 信頼性テスト
システムやソフトウェアの機能として、指定された条件で指定期間実行できることを判定するテスト - 移植性テスト
システムやソフトウェアの環境を移す際の移植のしやすさを判定するテスト - セキュリティテスト
システムやソフトウェアが仕様上認められた権限の範囲で動作し、データへのアクセスが限定的、かつ、データが保護されていることを判定するテスト
※参考:大西 建児,佐々木大西 建児,佐々木 方規,鈴木 三紀夫,中野 直樹,福田 里奈,町田 欣史,湯本 剛,吉澤 智美. 「非機能テスト」.『ソフトウェアテスト教科書 JSTQB Foundation 第4版 シラバス2018対応』.翔泳社,第4版 (2019/9/17),126-127
機能テストの実施内容
前述の通り、システムテストでは主に非機能的な特性についてのテストを行いますが、機能的な振る舞いについてのテストも行います。
システムテストレベルにおける機能テストは、要求仕様書や機能仕様書などのテストベースに基づいた、ソフトウェアの動作や振る舞いの完全性、正確性、適切性などの機能的な特性についてのテストになります。
テストを行う際の技法としては「同値分割法」「境界値分析」「デシジョンテーブルテスト」「状態遷移テスト」「ユースケーステスト」などのテスト技法があり、テスト内容に応じて適切な技法を使うことで網羅的にテストを実施します。
システムテストにおける機能テストの内容やテスト技法については、下記記事で丁寧にまとめられていますので、興味のある方はぜひ一度ご確認ください。
参考:システムテスト・総合テストとは|目的や観点、手法を紹介(Sqripts)
システムテストのテストベース
システムテストのテストケースの基となるテストベースは下記のような情報となります。
- システム要求仕様
- ソフトウェア要求仕様
- リスク分析レポート
- ユースケース
- ユーザーストーリー
- 状態遷移図
- システムマニュアル
- ユーザーマニュアル
単体テスト(コンポーネントテスト)や結合テスト(統合テスト)の主なテストベースはシステムやソフトウェアの設計に関する情報でしたが、システムテストの主なテストベースは設計の基となった要求仕様や機能の振る舞いに関する情報となります。
システムテストと結合テストの違い
システムテストと結合テスト(統合テスト)は実施内容と実施環境が異なります
実施内容の違い
システムテストでは主に非機能的振る舞いに着目したテストを実施します。
主なテスト内容が非機能テストとなる理由については「V字モデル」を参照するとわかりやすくなると思います。
システムテストは単体テスト(コンポーネントテスト)、結合テスト(統合テスト)を終えた後の工程となります。
単体テストや結合テストでは主に機能的振る舞いに関してテストを行っているため、テスト工程が順番に消化できていれば、システムやソフトウェアの細かい機能に関しては仕様通りに動くことが保証されている状態となります。
そのため、テスト工程の次のステップとなるシステムテストでは、細かい機能が実際に一つのシステムとして動いた際に仕様通りに動くか、また、動いた結果が要求定義の内容を満たしているか確認することがテスト内容となり、これらのテスト内容は主に非機能テストの内容となります。
実施環境の違い
システムテストでは機能面、非機能面の全てに関してテストを行うため、開発段階の最終テストの位置付けとなる場合が多いです。
そのため、システムテストでは開発環境ではなく、本番環境でテストを行うことが好ましいとされています。
環境が違うとプログラムの処理結果が変わる場合があるため、開発環境では発生しなかった故障が本番環境で発生する場合があります。
このような環境の違いによる故障発生のリスクを軽減するためにも、システムテストは本番環境で行うことが好ましいです。
システムテストと結合テストの違いをまとめると、下記の通りとなります。
- システムテスト
システムやソフトウェアの振る舞いや能力に着目したテスト - 結合テスト(統合テスト)
インターフェースやコンポーネント同士の相互処理に着目したテスト
まとめ
システムテストの概要は下記の通りとなります。
- システムテスト
システムやソフトウェアの振る舞いや能力に着目したテスト
システムテストは受け入れテストの直前の工程となり、リリースの可否を決定する重要なテスト工程になります。
単体テストや結合テストとの違いを意識し、適切なシステムテストを行うことで、仕様に沿わない故障や欠陥は全て洗い出すようにしましょう。