ソフトウェア(Webアプリ開発)テストの種類と関係性
ソフトウェアのテストは、その種類が非常に多く、それぞれが異なる目的を持って実施されます。
ここでは、よく使われるテストの種類とその関係性について、できるだけ詳しく解説していきます。
注意点
ほぼ同じテスト内容を指していても組織やプロジェクト、人によって呼び方が違ったりする(ex 総合テストとST)
定義は抑えつつ、自分の所属している組織のルールや発言者が意図している範囲を確認することが大事
テストの種類と概要
1. 単体テスト (UT:Unit Test)
-
目的: プログラムの最小単位(関数、メソッドなど)が意図したとおりに動作するかを検証します
-
特徴: 開発者が行うことが多く、自動化ツールが活用されます
2. 結合テスト (Integration Test)
-
目的: 複数のモジュールやコンポーネントを結合し、それらが相互に連携して動作するかを検証します
-
種類:
- 内部結合テスト (ITA): システム内部のモジュール間の結合を検証します
- 外部結合テスト (ITB): システムと外部システム(外部API、決済システム、SNS認証など)との結合を検証します
-
特徴:「統合テスト」と言うケースもある
3. システムテスト (ST:System Test)
-
目的: システム全体が、要求仕様を満たし、意図したとおりに動作するかを検証します
-
特徴:
- 結合テストが完了した後に実施される
- 機能テスト、性能テスト、セキュリティテストなどを含む
- 「総合テスト」というケースもある
4. 受入テスト (Acceptance Test)
-
目的: システムが、ユーザーの要求を満たし、運用に耐えられるかを検証します
-
種類:
- ユーザー受入テスト(UAT: User Acceptance Test):実際のユーザーが使用感や機能を確認します
- 運用受入テスト(OAT: Operational Acceptance Test):運用面での準備が整っているかを確認します
5. その他のテスト
-
スモークテスト: システムの「主要な機能」が動作することを簡単に確認するテスト
- 「煙が出ない」という意味で、このテストで問題がなければ、本格的なテストに進めるというイメージから名付けられました
- リリース可能な状態かどうかの初期確認
- 細かくは確認しない
- STやUATの前に実施されることが多い
-
回帰テスト(リグレッションテスト): システムに変更を加えた後、既存の機能が壊れていないこと(デグレがないこと)を確認するテスト
- ソフトウェア開発のライフサイクル全体を通して行われる(CI/CDの中など)
- リリース前
- バグ修正後
- 機能追加後
- ソフトウェア開発のライフサイクル全体を通して行われる(CI/CDの中など)
-
性能テスト: システムが、所定の負荷のもとで性能を発揮できるかを検証するテスト
- システム全体が負荷に対して耐えられるかを確認するため、システムテスト(ST)に含まれることが多い
- 主な種類:
- a) 負荷テスト:通常の負荷下でのシステムの動作を確認
- b) ストレステスト:極端な負荷下でのシステムの限界を測定
- c) スケーラビリティテスト:負荷の増加に対するシステムの対応能力を評価
- d) エンデュランステスト:長時間の連続使用下でのシステムの安定性を確認
-
セキュリティテスト: システムが、不正アクセスや情報漏洩に対して安全であるかを検証するテスト
- システム全体の安全性を確保するため、システムテスト(ST)に含まれることが多い
- 脆弱性の発見: システムにセキュリティホールがないか、既知の脆弱性(CVEなど)が含まれていないかなどを調べます
- 侵入経路の特定: 攻撃者がシステムに侵入する可能性のある経路を特定します
- リスク評価: 発見された脆弱性の危険度を評価し、優先順位付けを行います
- システム全体の安全性を確保するため、システムテスト(ST)に含まれることが多い
-
ユーザビリティテスト: システムが、ユーザーにとって使いやすいかを検証するテスト
- ユーザー受け入れテスト(UAT)に含まれることが多い
-
シナリオテスト: ユーザーが実際にシステムを使用する具体的なシナリオに基づいて、システムが期待通りに動作するかを確認するテスト
- ex ユーザーが商品を検索して購入する一連の操作が問題なく行えるか
- ユーザー受け入れテスト(UAT)やシステムテスト(ST)の一環として行われることが多い
テストの順番
一般的に、単体テスト → 結合テスト → システムテスト → 受入テストの順で実施されます。
ただし、開発手法によって順序は異なることもあります。
ITaとITbの「内部」と「外部」って何?
-
内部:開発中のシステムやアプリケーション自体を指します
-
外部:開発中のシステムの外にある、他のシステムやサービスを指します
ITBの具体例:
-
例1:オンラインショッピングアプリ
- 内部:ショッピングアプリ自体
- 外部:決済サービス(PayPalなど)テスト内容:アプリから決済サービスへの連携が正しく機能するか確認
-
例2:天気予報アプリ
- 内部:天気予報アプリ自体
- 外部:気象データ提供サービスのAPIテスト内容:アプリが外部APIから正しくデータを取得し、表示できるか確認
-
例3:SNSアプリ
- 内部:SNSアプリ自体
- 外部:プッシュ通知サービステスト内容:アプリがプッシュ通知を正しく送信できるか確認
STとUATの違い
ST(システムテスト)とUAT(ユーザー受け入れテスト)は、どちらもソフトウェア開発の最終段階で行われるテストですが、目的や実施主体が異なります。
それぞれの違いを具体的に見ていきましょう。
STは、システムが技術的に完成していることを確認するテストであり、
UATは、システムがユーザーの要求を満たしていることを確認するテストです。
STが合格した後にUATが行われ、両方のテストに合格することで、システムがリリースされます。
ST(システムテスト)
-
目的: 開発されたシステム全体が、設計どおりに正しく機能するかを検証します
-
実施主体: 開発チームやテスト担当者が実施します
-
テスト内容:
- 機能テスト: すべての機能が仕様通りに動作するかを確認します
- 性能テスト: システムが、想定される負荷に耐えられるかを確認します
- セキュリティテスト: システムが、不正アクセスや情報漏洩に対して安全であるかを確認します
- 互換性テスト: 他のシステムとの連携が問題なく動作するかを確認します
- 信頼性テスト: システムが安定して動作し続けるかを確認します
-
テスト環境: 本番環境と同じか、それに近い環境で実施されます
UAT(ユーザー受け入れテスト)
-
目的: 開発されたシステムが、実際のユーザーのニーズを満たし、業務に利用できるかを検証します
-
実施主体: 実際のシステムのユーザー(エンドユーザー)が実施します
-
テスト内容:
- 使いやすさ: システムが直感的で使いやすいかを確認します
- 業務への適合性: システムが、実際の業務にスムーズに組み込めるかを確認します
- 期待通りの結果が得られるか: システムが、ユーザーの期待する結果を出せるかを確認します
-
テスト環境: 本番環境と同じか、それに近い環境で実施されます
STとUATの違いをまとめた表
まとめ
ソフトウェアテストの種類は、テストの目的や対象によって多岐にわたります!
これらのテストを組み合わせることで、高品質なソフトウェアを開発することができます!