単体テストと結合テストの違い

そんなあなたの疑問に答えます!

私たちが普段使っているメールソフトやスマートフォンアプリは、いくつものテストを乗り越えてリリースされていることをご存じでしょうか。
システム開発において、テストはユーザーが不利益を被るような欠点がないかを確かめる非常に重要な工程です。今回は、システム開発のテストのもととなる「単体テスト」と「結合テスト」の特徴や違いについて解説していきます。

システム開発におけるテストとは

システム開発においてテストとは、想定した通りに動作するかを確認することを指します。
どのようなシステムを作るか、を考える段階からテスト計画を立て、開発終盤で実際にシステムに対してテストを行います。(GENZでは要求定義の段階から、お客様とテスト計画に入らせていただきます。)

求められた機能が正しく動作するかを確認する機能テスト、どの程度のアクセスまでは処理落ちせずに対処できるかを試す負荷テスト、情報流出の恐れがないかを確認するセキュリティテストなどさまざまなテストがあります。

システムに対してのテストの流れは以下の通りになります。

システム開発におけるテストの流れ

先ほどの例で挙げた機能テスト・負荷テスト・セキュリティテストは、全てシステムテスト(総合テスト)の工程で行います。システムテストでは、システム全体の機能が想定通りに動くかを、実際の使用環境に近い状態で確認します。その前段階で行うのが、単体テスト結合テストです。単体テストと結合テストを正しく行わないと、システムテストに途方もない時間がかかってしまうため、両者の特徴や違いについて理解することは重要です。

単体テストとは

システム開発のテストで最初に行うのが単体テストです。
単体テストとは、システムのひとまとまりの機能や画面などの小さな単位1つ1つを対象にして行うテストを指します。※UT(Unit Test)とも呼ばれます。
単体テストの実施には、テスト対象の機能をすべて洗い出し、どの部分でどのようなテストを行うかを定義し、実際にテストする前の準備を充分に行う必要があります。

テストの準備については、以下の記事も参考にしてみてください。
【ゼロからわかるシステムテスト入門】ーテスト観点とはー

単体テストで出来ること

単体テストを行うことで、個々の機能や画面が想定された通りの動きをしているかについて確認することができます。
家計簿アプリの開発を例に考えると、家計簿を入力する画面で額面を入力した際に、入力画面に正しく表示されるかを単体テストで確かめます。

単体テストで出来ること

単体テストを完了することで、次の段階である結合テストに移行する品質担保ができ、結合テストがよりスムーズに行えるようになります。

結合テストとは

システム開発で単体テスト完了後に行うのが結合テストです。
結合テストとは、機能や画面を複数にわたり行き来するような動作を確認するテストのことです。※IT(Integration Test)やCT(Combined Test)と呼ばれることもあります。
単体テストよりも複雑な内容をテストするため、完了までの時間は長く、不具合の原因特定や不具合の修正に時間がかかる場合があります。
結合テストを実施する際には、テスト対象の機能や画面推移の流れをすべて明確にし、どの部分でどのようなテストを行うかを定義し、実際にテストする前の準備を充分に行うことが重要です。

結合テストで出来ること

結合テストを行うことで、複数の機能や画面が連携して行う動作に不具合がないかを確認することができます。
家計簿アプリの開発を例に考えると、家計簿を入力する画面で額面を入力した際に、入力画面とは別の画面である資産内訳参照画面に入力が反映されているかを、結合テストで確かめます。
単体テストは支出が入力できた時点で完了なのに対して、その先の内容もテストする結合テストは単体テストよりもクリア条件が厳しく、不具合が発生しやすくなります。

結合テストで出来ること

結合テストを正しく完了させることで、システムテストへと移行する品質担保ができます。さらに、システムテストで不具合が発見された際に、不具合の原因が結合テスト済みの部分の連携ではないことが分かるため、原因が特定しやすくなります。

単体テストと結合テストの違い

単体テストと結合テストの特徴をまとめると下の表のようになります。

単体テスト結合テスト
テスト対象ひとまとまりの機能や画面複数の機能や画面
実施時期システム開発で行うテストの初期段階テスト対象の単体テスト終了後
目的(できること)1つの機能、画面が正しく動作しているかを確認する。機能間、画面間でデータや表示の連携が正しく行われているかを確認する。
不具合原因調査に要する時間短い長くなる場合がある
不具合の発生頻度高い低い
不具合修正の難易度低い高い

まとめ

単体テストと結合テストは、テストの対象や目的が大きく異なります。

システム開発をおこなう上で、段階的にテストを実施することで、複雑なシステムであっても問題をフェーズ毎に特定し、修正することで、複雑なアプリケーションが正常に稼働することができるのです。

株式会社GENZでは、ソフトウェアテストを中心にITに関するお困りごとに幅広く対応しております。お問い合わせの段階では、プロジェクトの詳細やスケジュール・仕様が確定していなくても、解決したい課題にあったテスト内容を一緒に考えさせていただきます。
社内でテストを計画、実施することが困難な場合に、少ないリソースでテストが行えるのもGENZの強みです。

機能テストからセキュリティテストまでGENZ一社で一気通貫に対応することも可能です。ソフトウェアテストについて、ご不明な点やご質問がございましたら、お気軽にお問い合わせください。

ここまで長々と読んでしまったあなた、、、

GENZと一緒にテストを進めましょう!

お問い合わせ

その他、システム開発に関する記事はこちらもご参考になさってください。
【Sqripts】 https://sqripts.com/
Sqriptsはシステム開発における「Quality(品質)」に関する情報を
エンジニアが理解しやすい「Script」に変換して伝えたいという想いから生まれた
“エンジニアリングを進化させる品質メディア”です。