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

「結合テスト」と「システムテスト」の違いや使い分けについて調べた結果、わかりやすい説明があったのでメモしておきます。

そもそも何がわからなかったのか

まずV字モデルと言われてよく目にするのか以下の画像です。

image
(wikipediaより引用)

一般的に「結合テスト」と「システムテスト」という用語を見ると、

結合テストは、
異なるモジュールを結合して、正常に動作するかどうかをテストします。
(V字モデルでいうと基本設計部分のテスト)

システムテストは、
実際のユーザの動作に近い状態で行い、システム全体が正常に機能するかどうかをテストします。
(V字モデルでいうと要件定義部分のテスト)

などがよく見かける記述です。

この定義だけを見ると、名前的にそうだよねと納得できるのですが、実際にテスト項目を作成することを考えると、「結合テストはシステムテストでまかなえるのでは?」と疑問に思いました。

例えば、システムテストのテスト項目を1つ作るとすると

1. ブラウザで https://www.google.co.jp/ にアクセスする。
2. 検索フォームに「テスト」と入力しEnterを押す
3. 検索結果が表示されることを確認する

な感じ。

このテストを実行すると内部でいろんなモジュール(関数とか)が連携して動いて、その結果、予期した結果が確認できる想定な訳ですが…

内部でいろんなモジュール(関数とか)が連携して動いて、その結果、予期した結果が確認できる

これって結合テストにもなってるよね?という話ですね。

こう言うと「単体テストも要らないの?」という話になりそうですが、単体テストについては、テスト範囲が最小限(メソッド単位)なのでテスト結果のフィードバックが早く、問題の特定や修正が楽というメリットがあるので、そこは分けて実施するのがいいかなと思ってます。

違い

そんな感じで、結合テストの存在意義を見失い始めていた訳ですが…
Twitterを眺めていてわかりやすいと思った2つの違いについての説明が以下になります。

「結合テスト」は機能要件に対するテスト
「システムテスト」非機能要件に対するテスト

こう考えると、それぞれのテストの目的がはっきりするし、他の人にも説明しやすいなと感じました。

ようは、

結合テストは
* 機能テスト

システムテストは
* 負荷テスト
* セキュリティテスト
* ユーザビリティテスト

を確認すればいいということですね…なんだかスッキリしました。

Scroll to Top