カテゴリから探す
Geekly
コラム
技術・
テクノロジー
職種・
ポジション
Web・
ゲーム
転職準備
転職活動
  1. HOME
  2. Geekly Media
  3. 技術・テクノロジー
  4. 単体テストと結合テスト比較!技術的な違いからメリット・デメリットまで解説します。
  • 技術・テクノロジー

単体テストと結合テスト比較!技術的な違いからメリット・デメリットまで解説します。

システム開発で重要なのがテストです。システムの納品に至るまでには、ユーザーが望む機能が果たされていることや、エラーになってもシステムが止まらない作りになっているかを慎重にテストする必要があります。今回は、テストの中でも「単体テスト」と「結合テスト」について、技術的な違いやメリットとデメリットを交えてかいせつします。

 

単体テストとは

 

モジュールの動作テスト

 

 

ITシステムは、数々のプログラムの塊が集合することによって実現されています。ひとつひとつのモジュール(プログラムの部品)がしっかりと機能することで、システムとして成り立つのです。

自動車に例えるなら、ドアやタイヤなどの各パーツです。これらパーツのサイズや形が設計と違っていれば、組み立てても乗れない自動車になってしまいます。

システムも同じで、これらのモジュールひとつひとつに欠陥があれば、システムは動かない、あるいは誤動作を起こしてしまいます。

システムのモジュールに関しても、結合する前にモジュール単体でのテストを行います。ひとつひとつをしっかりとテストしておくことで、工程の手戻りを無くすことができるのです。

 

結合テストとは

 

モジュールを合わせた機能テスト

 

 

結合テストではモジュール単体でのテストをクリアしたモジュールと、その他外部モジュールを結合した状態でテストを行います。

自動車に例えると、本体やドア、タイヤといった部品をそれぞれ繫ぎ合わせ、設計通りにドアが開くのか、タイヤが連動して回るのか、それぞれに歪みがないかなどのテストです。

システムにおける結合テストも、モジュールを連携させた場合に、設計通り動くのか、あるいは想定外のオペレーションでのエラーでも、システムが止まることがないか(エラー処理や例外処理が入っているか)などをテストします。

結合テストを行うことで、ユーザーの業務に耐え得るシステムであることを確認します。

 

テストにも仕様書が必要

 

テストにも「テスト仕様書」が必要です。それは、テストパターンやその意味、テスト結果や原因までを記録していきます。

テストパターンでは、パターンに漏れがないように、全てのパターンを洗い出します。そして、パターンごとの結果も全て示しておく必要があります。

パターンについては、全てを網羅する必要があり、パターン漏れは許されません。ですので、ほとんどの場合マトリクスの表を作成します。

テスト仕様書は、ほとんどの場合作り手以外の人が読むことになります。他人が読み、実行することを意識して、読みやすく分かりやすいフォーマットと表現にしなければなりません。

テスト仕様書は、システムのテストが終了した後にも利用されるものです。何かしらの不具合が生じた時に、テスト仕様書を見ながら“問題のパターン”がテスト時点でどのような結果だったのか、また、どのようなアプローチでテストされたのかを確認し、根源を洗い出します。

単体テストや結合テストなどのテスト工程において、最も重要なモノがテスト仕様書なのです。

 

単体テストと結合テストの技術的な違い

 

単体テストではモジュールのプログラム把握が必要

 

 

単体テストで必要とされる技術は、その機能に特化した動作を把握していることと、動作するプログラムを熟知していることです。

単体テストでは、システムで使われる機能が細分化されたモジュールが完璧に機能していることを確認しなくてはなりません。

変数に入るべき値や、考え得る例外処理に至るまで、あらゆる角度からモジュールの機能をテストしますので、そのモジュールがどのように使われるのかを把握しておかなければなりません。

 

結合テストはモジュールを繋げた時の全体の把握が必要

 

 

単体テストを終えたモジュールを組み合わせた状態でテストを行います。この時必要な技術は、システムの全体的なデータの流れの把握です。

モジュール同士が繋がっているということは、システムに必要な機能は揃っているということで、ユーザーが行うオペレーションに近い動作で検証します。

モジュール単体では完璧に動くものでも、それらを結合すると不具合が起きる可能性があります。それはデータの受け渡しや、予期しないオペレーションによる例外処理などです。

また、結合テストでは、システムのセキュリティに及ぶまでを考慮してテストをする場合もあります。ですので、その業務に必要な技術の全てを把握しておくことも大切なのです。

 

単体テストを行うメリットとデメリット

 

メリット:ひとつのモジュールに特化して徹底したテストができる

 

 

単体テストを行う目的は、バグの無い完璧なモジュールを完成させるためです。そして単体テスト工程を行うことで、モジュールをしっかりとテストできるメリットがあります。単体テストが終わったモジュールの信頼性は高くなければなりません。

信頼性の高いモジュールを組み合わせることで、システムが機能するのです。結合テストにおいて、単体テストの信頼性はなくてはならないものなのです。

 

デメリット:コストがかかる

 

 

テストというイメージから、誰でもできてすぐに終わるという意識を持っている人が少なくありません。

しかし、単体テストでは、しっかりとシステムを把握しておかなければなりませんし、そもそも単体テストは非常にコストがかかるのです。

テスト仕様書やテストケースの作成でも工数がかかりますし、実際の単体テスト中にバグが見つかれば、その調査と改修を行わなければならないからです。

単体テストを見積もる際には、コーディングよりも大きなコストがかかることを意識しておかなければなりません。

 

結合テストを行うメリットとデメリット

 

メリット:品質が高まる

 

 

単体テストで信頼性のあるモジュールを結合しテストを行います。単体テストをクリアしたモジュールも、結合テストの段階で機能的な不具合や仕様バグが見つかることも少なくないのです。

結合テストで出た不具合は、最悪の場合モジュールの改修という手戻りを起こしますが、結合テストでモジュールバグや仕様バグといった致命的な不具合を洗い出すことが大切なのです。結合テスト経たシステムは、より品質を高めたシステムとなります。

 

 

デメリット:システム規模によっては時間がかかる

 

 

単体テストよりも多くの動作を考慮したテストですので、システムの規模によってはとても時間のかかる工程となります。更に、結合テストで洗い出される不具合は、大きな手戻りを意味します。

ひとつのモジュールに手戻りが発生すれば、テストの進捗自体に大きな遅れが発生してしまいます。これらを考慮すると、テスト工数は大きく予定しておく必要があるのです。

 

テストを自動化する判断

 

テストを自動化するテストツールが存在します。テストツールを導入することで、同じ動作の繰り返しなどに利用できます。これにより、テスト時間の短縮が実現できる可能性があります。

以下のようなテストにはツールを導入しても良いでしょう。

 

・値の入力

・連続した同じオペレーション

・過負荷テスト

しかし、テストツールはあくまでも、テスト対象のシステムに合ったものを選択しし判断しなければなりません。テストツールさえ使えばテストが短縮できるということで、先行してテストツールを導入してしまったという声もよく聞きます。

テストツールは万能ではありません。ですので、テスト仕様書にて洗い出したテスト項目から、自動化できるモノとそうでないものを切り分け、導入を検討する必要があるのです。

テストツールを利用するにはもちろんコストがかかります。テストツールに合わせたシナリオを別途作成しなければならないという工数も必要です。

テストを自動化する判断は、自動化が効率をあげるシステムであること、そして導入するタイミングなどの判断で、テストツールの価値が決まるのです。

 

まとめ

 

 

単体テストと結合テストでは、それぞれ観点が違います。また、単体テストをコーディングの過程で行い、実質では単体テスト工程を省略しているプロジェクトも存在します。

しかし、単体テストや結合テストなど、それぞれのテストにこうした観点の違いがあることを認識していれば、省略は正しい方法ではないことが分かります。

単体テストでも、結合テストでも、それぞれに技術的な違いがあることも分かりました。プログラミングからテストまでを行うエンジニアも、テストを専門とするエンジニアも、これらテストのメリットやデメリットも把握しておく必要がありますね。

 

佐久森

Geekly Media
ライター

この記事が気に入ったら
シェアしよう!

  • twitter
  • facebook
2+

関連記事

求人数×IT業界での紹介実績数で、納得の転職をサポート。IT業界専門だからこそできる提案力を実感してみてください。