「結合テスト」と「システムテスト」の違いや使い分けについて調べた結果、わかりやすい説明があったのでメモしておきます。
そもそも何がわからなかったのか
まずV字モデルと言われてよく目にするのか以下の画像です。
(wikipediaより引用)
一般的に「結合テスト」と「システムテスト」という用語を見ると、
結合テストは、
異なるモジュールを結合して、正常に動作するかどうかをテストします。
(V字モデルでいうと基本設計部分のテスト)システムテストは、
実際のユーザの動作に近い状態で行い、システム全体が正常に機能するかどうかをテストします。
(V字モデルでいうと要件定義部分のテスト)
などがよく見かける記述です。
この定義だけを見ると、名前的にそうだよねと納得できるのですが、実際にテスト項目を作成することを考えると、「結合テストはシステムテストでまかなえるのでは?」と疑問に思いました。
例えば、システムテストのテスト項目を1つ作るとすると
1. ブラウザで https://www.google.co.jp/ にアクセスする。
2. 検索フォームに「テスト」と入力しEnterを押す
3. 検索結果が表示されることを確認する
な感じ。
このテストを実行すると内部でいろんなモジュール(関数とか)が連携して動いて、その結果、予期した結果が確認できる想定な訳ですが…
内部でいろんなモジュール(関数とか)が連携して動いて、その結果、予期した結果が確認できる
これって結合テストにもなってるよね?という話ですね。
こう言うと「単体テストも要らないの?」という話になりそうですが、単体テストについては、テスト範囲が最小限(メソッド単位)なのでテスト結果のフィードバックが早く、問題の特定や修正が楽というメリットがあるので、そこは分けて実施するのがいいかなと思ってます。
違い
そんな感じで、結合テストの存在意義を見失い始めていた訳ですが…
Twitterを眺めていてわかりやすいと思った2つの違いについての説明が以下になります。
「結合テスト」は機能要件に対するテスト
「システムテスト」非機能要件に対するテスト
こう考えると、それぞれのテストの目的がはっきりするし、他の人にも説明しやすいなと感じました。
ようは、
結合テストは
* 機能テスト
システムテストは
* 負荷テスト
* セキュリティテスト
* ユーザビリティテスト
を確認すればいいということですね…なんだかスッキリしました。