単体テストと結合テストの違いとは?IT初心者向けに目的・実施内容・現場での使い分けを分かりやすく解説
結論として、単体テストは「部品ごとの動作確認」、結合テストは「部品同士を組み合わせた動作確認」です。
- 単体テスト(Unit Test):プログラムや機能を個別にテストする
- 結合テスト(Integration Test):複数のプログラムや機能を連携させてテストする
システムは多くの機能が組み合わさって動作しています。そのため、それぞれの機能が正しく動くだけでなく、機能同士が連携して期待どおりに動作するかを確認することが重要です。
単体テストとは
単体テストとは、プログラムや機能を最小単位で確認するテストです。
開発者が作成したプログラムや機能を個別に実行し、仕様どおりに動作するかを確認します。
例えば、ログイン機能であれば次のような項目を確認します。
- 正しいID・パスワードでログインできるか
- 誤ったパスワードでエラーになるか
- 必須項目が未入力の場合に警告が表示されるか
他の機能との連携は考えず、対象機能だけを確認するのが特徴です。
結合テストとは
結合テストとは、複数の機能やプログラムを組み合わせて正常に連携するかを確認するテストです。
単体テストで問題がなかった機能でも、他の機能と組み合わせると不具合が発生することがあります。
例えば、ログイン後にユーザー情報を取得し、画面へ表示する処理では次のような内容を確認します。
- ログイン後にユーザー情報が表示されるか
- データベースから正しく情報を取得できるか
- 権限に応じて表示内容が変わるか
機能同士の連携が正しく行われるかを確認するのが結合テストです。
単体テストと結合テストの違い
| 項目 | 単体テスト | 結合テスト |
|---|---|---|
| 目的 | 機能単体の動作確認 | 機能同士の連携確認 |
| 対象 | 1つの機能・プログラム | 複数の機能・システム |
| 実施タイミング | プログラム作成直後 | 単体テスト完了後 |
| 実施者 | 主に開発者 | 開発者・テスト担当者 |
| 確認内容 | 仕様どおりに動作するか | データ連携や画面遷移が正常か |
なぜ両方のテストが必要なのか
単体テストだけでは、他の機能との連携による問題は見つけられません。
例えば、ログイン機能と顧客情報表示機能がそれぞれ正常でも、ログイン後に顧客情報が表示されないことがあります。このような問題は結合テストで発見できます。
そのため、品質の高いシステムを提供するには、単体テストと結合テストの両方が欠かせません。
実際のIT現場での利用例
例:ECサイトの注文機能
単体テスト
- 商品をカートへ追加できるか
- 数量変更ができるか
- 合計金額が正しく計算されるか
結合テスト
- 注文後に在庫が減るか
- 決済後に注文履歴へ反映されるか
- 注文完了メールが送信されるか
例:Active Directoryを利用したログイン
単体テスト
- 認証プログラムが正常に動作するか
- エラーメッセージが表示されるか
結合テスト
- Active Directory認証後にファイルサーバーへアクセスできるか
- 権限に応じて共有フォルダーが利用できるか
実際のIT現場での流れ
- プログラムを作成する
- 単体テストを実施する
- 不具合を修正する
- 再度単体テストを実施する
- 複数機能を組み合わせる
- 結合テストを実施する
- 不具合を修正する
- システムテストへ進む
筆者が現場で経験したこと
ログイン機能とデータベース接続機能を個別にテストした際はどちらも問題ありませんでした。しかし、結合テストを行うとログイン後にデータ取得エラーが発生しました。
原因を調査したところ、データベースへ渡すユーザーIDの形式が一致していませんでした。単体テストでは見つからず、結合テストで初めて判明した不具合でした。この経験から、連携確認の重要性を強く実感しました。
業務でよくあるトラブル例
- 単体テストだけでリリースしてしまう
- 画面は表示されるがデータが取得できない
- 他システムとの連携でエラーになる
- データ形式が異なり正常に処理できない
- 権限情報が正しく引き継がれない
初心者が混乱しやすいポイント
- 単体テストだけで品質を保証できると思ってしまう
- 結合テストはシステム全体のテストだと思ってしまう
- 機能が動けば連携も問題ないと考えてしまう
- 単体テストと結合テストを同じ内容で実施してしまう
確認するポイント
単体テスト
- 入力値が正しく処理されるか
- 異常値でエラーになるか
- 仕様どおりの結果になるか
- エラーメッセージが適切か
結合テスト
- 画面遷移が正常か
- データベースとの連携が正常か
- 他システムとの通信に問題がないか
- データが正しく受け渡されるか
上司へ報告するポイント
- 単体テストの実施件数
- 結合テストの実施件数
- 不具合の件数
- 未対応の課題
- 再テストの予定
「テスト完了」とだけ報告するのではなく、「単体テスト完了」「結合テスト完了」と区別して伝えることが大切です。
エスカレーションするタイミング
- 複数機能で同じ不具合が発生している
- 原因が特定できない
- 外部システムとの連携に問題がある
- 設計どおりに動作しない
- 本番環境へ影響する可能性がある
関連するIT用語
- システムテスト
- 受け入れテスト(UAT)
- 回帰テスト(リグレッションテスト)
- テストケース
- テスト仕様書
- モック
- スタブ
- 品質保証(QA)
よくある質問(FAQ)
単体テストと結合テストはどちらが先ですか?
単体テストを先に実施し、問題がなければ結合テストへ進むのが一般的です。
結合テストだけではだめですか?
おすすめできません。単体テストで基本的な不具合を取り除いておくことで、結合テストでは連携部分の確認に集中できます。
インフラエンジニアや社内SEも結合テストを行いますか?
はい。サーバー、ネットワーク、Active Directory、ファイルサーバー、業務システムなど、複数の機器やサービスが連携する環境では結合テストを実施することが多くあります。
まとめ
単体テストは「機能単体が正しく動作するか」を確認するテスト、結合テストは「複数の機能やシステムが連携して正しく動作するか」を確認するテストです。
どちらもシステム品質を確保するために欠かせない工程であり、実施する目的が異なります。
IT業務では、まず単体テストで各機能の品質を確認し、その後に結合テストで連携動作を確認する流れが基本です。この違いを理解しておくことで、テスト工程の全体像を把握しやすくなり、現場でのコミュニケーションもスムーズになります。
