コラム

  • 2020.11.10
  • ソフトウェアテスト
  • #テストレベル
  • #テスト実行
  • #基礎知識

結合テストとは?実施の目的や観点などを紹介

/

ソフトウェア開発において、テストの実施は品質を担保するうえでも重要な工程です。 ソフトウェアテストは確認対象の粒度によって以下の4つの段階(レベル)に分けることができます。

・コンポーネントテスト(単体テスト、ユニットテスト)
・結合テスト
・システムテスト
・受け入れテスト

本記事ではそのなかでも「結合テスト」に注目し、重要な考え方と実施の際に気をつけるべきポイントについてご紹介します。

結合テストとは

結合テストは、コンポーネントテストを実施した後に実行されるテストです。さまざまな観点のテストの目的(テストタイプ)で実施できることから、プロジェクトの中盤から終盤にかけて長い期間で実施されます。

結合テストでは、単体で動作するようになったコンポーネントを組み合わせることで実際に動作する状態に近いソフトウェアの挙動を確認します。具体的には、データの受け渡しが正常に行われるか、データを渡すタイミングは適切かどうかなどを検証します。

 

ユーザー認証の一部を例に挙げてご説明します。

・入力フォームが表示される(画面X)

・パスワードが伏せ字で表示される(機能A)

・パスワードが一致した場合認証に成功する(機能B)

 

このように「画面X=>機能A=>機能B」を一括りにして表示やデータの入力などが 仕様通りに動作するかテストを行います。

どのような画面と機能を一括りにしてテストを実施するかは、企業やチームによって変わります。

 

V字モデルにおける結合テスト

V字モデルとは

出典:株式会社SHIFT、日経BP「駄目パターンに学ぶ 失敗しない ソフトウェアテスト 実践ノウハウ」114ページ 図3 「V字モデルを用いたテストレベルの説明」を基に作図

ソフトウェアの品質を保つためには、各開発工程に対して行うテストを明確にしておく必要があります。V字モデルを参考にできるプロジェクトであれば、漏れなどを減らすことができます。

V字モデルとは、開発の上流工程とテスト工程を対に並べたモデルです。上流工程ですり合わせた粒度を流用できるため、共通の認識が得やすくなります。  

 

V字モデルを採用した場合に結合テストと紐づく上流工程

V字モデルにおいて、結合テストは基本設計と対になります。

例えば、基本設計の段階で「画面遷移」にまで言及されている場合、結合テストでは画面遷移に関してまで検証を行います。

 

結合テストが重要となる理由

コンポーネントテストの実施後に結合テストが重要となる理由は、結合テストで考慮することが、あとに控えた「システムテスト」「受け入れテスト」の2つのテストレベルにも影響し、テスト実施の工数や品質に大きな影響を与えることにあります。

 

開発者にとって、結合テストで得られたフィードバックは具体的で確認範囲が比較的小さく、不具合が発生している箇所の特定が容易になるケースが多くあります。一方、そのほかのテストレベルで得られるフィードバックは抽象的であることが多いため、不具合箇所の特定に時間を要するケースがあります。

このことから、なるべく結合テストの段階で不具合を発見する必要があります。

 

なお、結合テストはコンポーネントテストを経て独立した機能を組み合わせていく、最初のテストです。テストの対象やテストの目的、インプットする情報などが多岐に渡るため、他のテストレベルと比較して一層事前のテスト計画が重要になります。

 

また、結合テストは、「機能を組み合わせて行う」という性質上、テストの粒度が人によってばらつきやすくなります。そのため、テストを実施する前にチーム内で粒度の認識を合わせておく必要もあります。

 

その他のテストレベル

改めて結合テスト以外のテストレベルでテストしたい領域を確認してみましょう。

 

コンポーネントテスト(単体テスト、ユニットテスト)とは

コンポーネントテストは、機能ごとに独立したプログラムを単体でテストする段階です。

プロジェクトによっては、単体テストやユニットテストといわれているケースもあります。

機能A、機能B、機能Cのように各機能が正常に動作するかを検証します。

 

例えば、

機能A:パスワードが伏せ字で表示される

機能B:パスワードが送信される

などです。

 

システムテストとは

システムテストでは、あらかじめ実務で想定されるようなシナリオを設計しておく必要があります。そのうえで実際に本番環境で使用するハードウェアを利用したり、本番と同等の環境で動作させながら行います。

例えば、ユーザーがパスワードを忘れてしまったと想定しテストを行ったり、実際にアクセスが集中することを想定して負荷をかけるなどのテストを実施します。

 

受け入れテストとは

受け入れテストは、ユーザー側の観点で行うテストです。システムの発注者側で実際のビジネスでソフトウェアが運用できるかどうかを確認します。

具体的には、エラーのメッセージが後続の業務の遂行に与える影響があるかといった、業務レベルの検証を行います。

 

結合テストの実施方法

結合テストでは、さまざまな目的でテストを実施できます。

ここではテストタイプ別に結合テストを実際に実施する例をご紹介します。

 

テストタイプとは、テストで確認したい目的別に分類したものです。

一般的には以下の6つに分類されます。

 

・機能テスト

・疎通テスト

・性能テスト

・回帰テスト

・セキュリティテスト

・ユーザビリティテスト

 

結合テストでは、基本的にはどのテストタイプにおいても行うことが理想的ではありますが、プロジェクトによって優先度が変わります。

なかでも「機能テスト」「疎通テスト」に関しては、これらを行っていないと結合テストの次のテストレベルを行う際に、不具合が多く発生する可能性があるため特に重要になります。

また反対に「ユーザビリティテスト」はその性質上、結合テストのなかで行うには向いていないこともあります。

これらをふまえて、それぞれのテストタイプを確認してみましょう。

 

機能テストとは

ソフトウェアの機能が、上流工程やプロダクトマネージャーが決めた仕様通りに動作するか検証するテストです。

結合テストにおける機能テストの実施方法

ここでのテスト対象となるのは、例えばECサイトにおいては「会員登録ができること」「商品購入ができること」「問い合わせを送ったら返信メールが返ってくること」などの機能です。

ここのECサイトでは問い合わせを送った際、返信メールが返ってくると想定します。

メールを送信する部分の機能が未実装(作成中)の場合は、この処理をモック(mock)にすることでメールを送信するために必要なリクエストやその先の処理を行うレスポンスが得られているかまでを確認することができます。

他にもスタブ(stub)など、現在はない機能をすでに動作するように振る舞うための仕組みもあります。

これらを利用する際は、どの部分までがモックやスタブなのかを記録しておくことが重要です。

このようなテストを結合テストで行っておくと、次のテストレベルであるシステムテストや受け入れテストで不具合が多く見つかり手戻りが増える可能性を削減できます。

 

疎通テストとは

システム間でリクエストとレスポンスが成立するかどうかを検証するテストです。

例えば、ネットワークを経由するシステムA、システムBでデータの行き来ができるか確認するようなテストが該当します。

結合テストにおける疎通テストの実施方法

ネットワークを経由する、データを保存する場所が変わる、ミドルウェアやソフトウェア、API(アプリケーションインターフェース)の境界にあたる箇所でping やtelnetなどを実行したり、実際のデータを渡すことで疎通していることを確認します。

ここでもこのようなテストを行うことで、結合テストから次のテストレベルを行った際に手戻りが多く発生してしまう可能性を削減できます。

このことから、「機能テスト」「疎通テスト」の2つのテストは、結合テスト内では特に重要なテストタイプであるといえます。

 

性能テストとは

実際のユーザーの利用に耐えられるかどうか検証を行います。

結合テストにおける性能テストの実施方法

同時アクセス数を増やした場合に、レスポンスが想定した時間内に返ってくるかなどです。

例えば、業務システムにおいて、業績に関するレポートの CSV エクスポートを10名が同時に実行した場合に5秒以内に返ってくるかというようなテストを行います。

 

回帰テストとは

回帰テストは、リグレッションテストや退行テストとも呼ばれます。

システムが複雑になってくると変更を行った場所とは別のところに影響が出るケースもあるため、システムの改修を行っていない部分に不具合が発生しないか(デグレ)検証するテストです。

結合テストにおける回帰テストの実施方法

理想は変更があった箇所を含め全体的に仕様に基づいた挙動をするか実行する方法ですが、現実的ではありません。そのため、ある程度影響が出そうな範囲を絞ってテストを実施します。

例えば、ユーザー認証の部分を変更した場合、Cookieの処理の部分で影響が出る可能性があります。すでにログインしているユーザーの挙動がどうなるかなどを確認します。

 

セキュリティテストとは

悪意のあるユーザーにシステムが攻撃されても大丈夫かどうか、検証を行うテストです。パラメータに対して、攻撃コードを入れて実行します。セキュリティテストは、必ず本番で使用するデータから切り離された環境で行ってください。

結合テストにおけるセキュリティテストの実施方法

例えばユーザー認証を行う際の に対して、<script> タグを入れた時にJavaScript が実行されてしまうケースがないかどうか確認します。

また、パラメータとしてSQLを渡した場合にエスケープされるかどうかなども例になるでしょう。

前に出た認証の例えが継続して使われている認識で合っていますか?

 

ユーザビリティテスト

ソフトウェアで実際に業務を行ったり、シナリオを想定してユーザーの操作感や使用感などを検証することが、ユーザビリティテストです。

結合テストにおけるユーザビリティテストについて

結合テストはさまざまな目的で実施することが可能です。しかし、あくまで機能の一部分を確認するため、実際の操作感や使用感などを検証するユーザビリティをテストするには向かないケースが多いでしょう。

 

まとめ

本記事では結合テストについてご紹介しました。

ソフトウェアテストは4つのテストレベルに分割されますが、なかでも結合テストは、あとの工程に影響を与えやすく、うまく実施されていないと、のちに不具合が発生し、手戻りが多くなる可能性があります。そのため、テスト工程のなかでも結合テストは重要な位置にあります。

のちの工数に無駄を生まないためにも、品質を保つという観点からも、テストの対象や目的、インプットするデータを明確にし、テストの粒度をチーム内で共有しておくことが重要です。

それに加えて、各テストタイプの性質を理解したうえで、プロジェクトに合わせて適切なテストタイプを選択したうえで行いましょう。

関連サービス