結合テストとシステムテストの違い

テストエンジニア テスト手法 品質保証QA

結合テストとは、単体テストが完了したプログラムモジュールや外部モジュールを本番環境同様に組み合わせ、正しく動作するか検証を行うテストです。
障害の検出が主な目的であり、プログラムの品質を確保するために行います。

一方、システムテストとは、開発したシステムが機能的・動作的・性能的に仕様書通りであることや、システムを利用するにあたって利用者の実際の業務が問題なく遂行できるかを検証するためのテストです。
想定される利用者の業務ごとにいくつかの操作手順をまとめたシナリオを作成し、これを検証項目とします。

システムテストは開発側の最終検証工程であり、本番と同じ環境ですべての不具合が解消されていることが理想とされます。
ここで言う不具合とは利用者の業務遂行を妨げる要因であり、例えば大勢で同時にシステムを操作した場合にも問題なく動作するかなどを検証する性能テスト(負荷テスト・耐久テスト)などもシステムテストの範疇になります。
当然、性能テストにあたってはハードウェアのスペックも検証内容に含まれます。

また、「操作方法がわからない」など、システムの操作性、すなわち使い勝手の悪さも検証されます(ユーザビリティテスト)。
ユーザビリティテストでは、ユーザインターフェース(画面デザイン)やマニュアルも検証内容にあたります。

システムテストの中でも特に重要なのはセキュリティテストです。
SQLインジェクションやクロスサイトスプリクティングなど、セキュリティ対策がきちんと施されているかを検証します。

以上のようにシステムテストとは、システム全体を俯瞰した検証になるため、プログラム以外の部分に修正が及ぶ場合があります。

・OSの設定値
・DBの設定値
・HTTPサーバなどのミドルウェアの設定値
・画面体裁
・マニュアル

受入テストとは
ちなみに受入テストとは、一般的には発注者側が行う最終確認テストであり、このテストに合格することで納品・検収が完了します。
ただし、システム部門の存在しない企業などでは発注者側に受入テストを行うリソースがないこともあります。
このような場合には、受入テストを受注側で肩代わりして行うか、もしくは受入テストを行わずシステムテストの報告書の確認だけで検収が完了する形になります。

納品時の品質低下を防ぐため、大企業などでは開発部門が行うシステムテストの後に、最終検査を行う専門の検査部門が存在します。
開発部門とは部署が違うので、受入テストと同様に非常に厳しい検査を受けることになるかと思います。

参考までにソフトウェアの開発工程を表す図としてよく利用される「V字モデル」を見てみましょう。

開発工程のV字モデル


ウォーターフォール開発では、単体テストの後に、結合テスト → システムテスト → 受入テストの順番で開発工程が流れていきます。

アジャイルの開発工程


アジャイル開発ではシステムテスト受入テストはこの図の中に現れていませんが、通常、最終イテレーションの中に組み込まれるか、最終イテレーション後に計画されることになるかと思います。
RTリグレッションテスト(回帰テスト・デグレードチェック)をシステムテストの1つとして解説している書籍等もありますが、現代の開発手法においては RT は、それぞれのテスト工程の中で自動的に実施されるものであり、単独の検証工程とはみなさないのが一般的ですね。

参考: 単体テスト(ユニットテスト)とは
参考: 結合テストとは

コメント