プログラムを開発する上で、正しい処理を行っているかを確認するテスト作業は必ず行います。仕様書をもとにプログラムを開発していく場合は、仕様通りに処理されているかを入念に確認していく必要があります。
今回は、テストの中でも特に重要な部分を占めている結合テストについてご紹介します。
結合テストとは?
一般的に、プログラム開発におけるテストは大きく分けて
- 単体テスト
- 結合テスト
- 統合テスト
- 受入テスト
の4つの工程に分類されます。
その中でも結合テストとは、開発した複数のプログラムを組み合わせた場合に、想定通りに動作しているか、また不具合がないかを確認するテストです。
想定通りに動作していなかったり、不具合が見つかった場合はデバッグを行います。
デバッグについては、こちらの記事でも詳しく紹介しているのでぜひご確認ください。
結合テストの目的
総合テストの目的はJSTQB(Japan Software Testing Qualifications Board)において設定されています。インターフェースの品質向上や機能的、非機能的の動作が仕様通りであることを検証します。さらに、システムやインターフェース、コンポーネントにおいての欠陥の検出やリスクの軽減などです。
総合テストにおいては、システムとコンポーネントの間において相互処理に焦点をあてることが必要です。
結合テストの重要性
それぞれのテスト範囲については、会社やプロジェクトの規模によって方針が変わってきます。
主に単体テストは各プログラムやモジュール毎の動作、結合テストは単体テストで動作を確認したプログラムを組み合わせて、一連の処理として正しく動作しているかを確認するテストです。
統合テストは、プログラムを実際の業務さながらに動作させて、問題なく仕様通りに動作しているかを確認するテストです。
当然、統合テストに入るためには、一連の処理が正しく動作しているかを確認する結合テストをクリアしなければなりません。
結合テストで各プログラム・モジュール間の連携・動作を確認することは非常に重要となってきます。
結合テストの種類
結合テストにはいくつか種類があります。
複数のプログラムを組み合わせて行うテストのため、様々な観点から動作確認、不具合の有無を確認していきます。
インターフェーステスト
インターフェーステストでは、プログラムそれぞれの機能が、組み合わされた時に正しく連携を取れているかを検証します。
例えば、プログラム間で値の受け渡し処理が行われた場合は、値を正しく渡したか、受け取り後の値に不具合が生じていないか等を確認します。
結合テストの中では、インターフェーステストは最も多いテストパターンとなります。
ブラックボックステスト
ブラックボックステストでは、システムの内部構造については考慮せず、データの入出力の結果のみに着目してテストします。
例えば、値を入力するとそれに応じてデータベースに検索をかけて結果を出力する処理をテストする場合は、検索処理のロジックの中身は確認せず、入力する値とそれに対応する正しい出力結果が返ってきたかどうかだけを確認します。
仕様を満たしているかどうかのみを検証するテスト手法になります。
業務シナリオテスト
業務シナリオテストでは、実際の業務を想定したテストを行います。統合テストとテストの方針は似通っていますが、ここではイレギュラーな操作も検証していきます。
実際の業務で多くのユーザーが利用するシステムの場合は、開発側が想定していなかったイレギュラーな操作が行われる場合があります。
例えば、想定していない値が入力されたデータがデータベースに登録された場合、検索をかけて正しく出力されるのか、イレギュラーなケースとして検証していきます。
他にも、システムにログインしているユーザー2人が、1つのデータに対して同じタイミングで変更処理を加えた場合の排他制御はどうなっているか等、業務で起こりうる様々なイレギュラーパターンを検証していきます。
負荷テスト
負荷テストでは、システムに負荷をかけた状態のパフォーマンス低下や、エラーの有無を検証していきます。
例えば、多くのユーザが同時にログインして使用するシステムの場合は、それによってシステムダウンしないか、想定しているアクセス数の中ではパフォーマンスが低下しないか等を確認します。
他にも、検索対象のデータが何万件も膨大にある場合、出力までの時間がどれぐらい掛かるのか、想定している待機時間を超過しないか等も、負荷テストとして検証していきます。
結合テストの実施方式
結合テストの実施方式は、トップダウンテストとボトムアップテストの2つがあります。
これら2つのテスト方式についてご紹介します。
トップダウンテスト
トップダウンテストでは、上位モジュールを呼び出して、そのまま下位モジュールへと進んでいく際の流れをテストします。
システムの処理は、上位モジュールから下位モジュールへと進んでいくのが基本的な流れです。
上位モジュールとは、要は下位モジュールを呼び出す立場にあります。
PCを例に挙げるならば、PC自体が上位モジュール、そこから起動されるアプリケーションが下位モジュールといったイメージなります。
トップダウンテストは上位モジュールに下位モジュールを結合させたテストを行うため、下位モジュールが動作しなかったり不具合がある場合は、問題を早期に発見することが出来ます。
下位モジュールが未実装の場合でも、スタブと呼ばれる代替のモジュールを作成して一時的にテストを行う場合があります。
テストの際に、何度も上位モジュールの動作を併せて確認することになるため、重要である上位モジュールの信頼性を高めることが出来るというメリットもあります。
トップダウンテストは、新規のシステム開発向けのテスト手法と言えます。
ボトムアップテスト
ボトムアップテストは、トップダウンテストとは逆に下位モジュールからテストしていきます。
下位モジュールは上位モジュールと比べて数が多くなるため、開発の早い段階からテストを両立して行うことが出来ます。
上位モジュールが未実装の場合でも、ドライバと呼ばれる代替のモジュールを作成して一時的にテストを行う場合があります。
ボトムアップテストでは、後からテストする上位モジュールに何か不具合が見つかった場合、その影響で下位モジュールを全て修正しなければいけない可能性もあります。
そのため、既存システムの修正・変更向けのテスト手法と言えます。
【テストタイプ別】結合テストにおける実施方法
総合テストでは、それぞれのプロジェクトに優先度があります。テストの中でも機能テストと疎通テストにおいては、先に終わらせていないと次のテストをした場合不具合が発生する確率が高くなります。
逆にユーザビリティテストに関しては、結合テスト以外でおこなった方がいい場合もあります。それでは、次に説明するそれぞれのテストにおける実施方法を説明していきます。
- 機能テストの実施方法
- 疎通テストの実施方法
- 性能テストの実施方法
- 回帰テストの実施方法
- セキュリティテストの実施方法
- ユーザビリティテストの実施方法
機能テストの実施方法
機能テストとはプロダクトマネージャーや上流工程が設定した仕様通りに動作することを確認するテストです。機能テストの例として、ECサイトでの商品購入ができる、希望する商品を選べるなどを含めた機能が挙げられます。
現在は動作していない機能を動作するようにふるまうためのstub(スタブ)や、必要なリクエストをおこなうmock(モック)などがありますが、どの部分までがstubやmockであるかを把握しておくようにしましょう。機能テストを結合テストでおこなっておくことで、受入テストやシステムテストにおいて不具合が見つかる可能性を削減できます。
疎通テストの実施方法
疎通テストとは、システムとシステムの間でリクエストと返答が正常にできるか検証するテストです。システムの間以外でも、ネットワークを経由してデータの送信ができるかどうかも確認します。
APIやソフトウェアやミドルウェアの間の部分で、telnetやpingなどを実行することで疎通することが一般的です。機能テストと同じように、結合テストで疎通テストをおこなうことで次のプロセスに進んだ時に不具合が出にくくなります。そのため、機能テストと疎通テストは結合テストの中でも特に重要です。
性能テストの実施方法
性能テストとは、ユーザーが実際に利用して問題ないかどうかを確認するテストです。例えば、多くのユーザーが同時にアクセスした時に想定通りに動作をするのかを確認します。
回帰テストの実施方法
回帰テストとは退行テストやリグレッションテストともよばれており、変更した部分とは違った所で不具合がでないかどうかの検証をするテストです。この不具合のことをデグレとよびます。不具合を修正した時に、他の箇所に不具合がでることがよくあります。
セキュリティテストの実施方法
セキュリティテストは、脆弱性ともよばれるサーバー、システムなどの設計ミスや不具合やバグなどによるセキュリティ上の欠陥を確認するテストです。セキュリティシステムが通常通りに動いているかをはじめ、ソースコードや設計のチェックなどをおこないます。
ユーザビリティテストの実施方法
ユーザビリティテストは、ユーザーが実際に使ったときの使用感や操作感などを確認するテストです。ユーザーにとって使いづらいシステムであると不満に直結することから重要です。
結合テスト実施のポイント
結合テストを実施する際のポイントや、注意するべきことについてご紹介します。
単体テストでは問題がなかった箇所も入念にテストする
単体テストでは問題がなかった箇所も、結合テストでの動きを入念にテストしましょう。
プログラム間でデータの受け渡しが行われた場合、受け取った値によっては単体テストで正常に動いていた処理も不具合が発生する場合があります。
イレギュラーな値が入ってくる可能性も考慮して、様々なパターンで検証を行いましょう。
テスト実施後の確認は、実施者以外にも行ってもらう
結合テストの実施後は、テスト結果報告書を実施者以外にも行ってもらいましょう。
テストに抜け漏れがないかを、実施者以外にも再度確認してもらうことでテストの信頼性は高くなります。
また、実施者が気づけなかったイレギュラーなテストケースを発見してくれる可能性もあります。
スケジュールには余裕を持って取り組む
結合テストのスケジュールにはなるべく余裕を持って取り組みましょう。
重要なモジュールで不具合が見つかれば、全てのテストをやり直さなければならない可能性もあります。
特にボトムアップ方式でテストを行う場合は、上位モジュールとの連携に問題がないか注意する必要があります。
不具合が頻発する、テストのやり直しが入る可能性も考慮に入れて、余裕を持ったスケジュールを策定しましょう。
結合テストでよくある3つの質問
結合テストでよくある次の質問をまとめました。
- 結合テストにおける「V字モデル」とは何ですか?
- 結合テストと単体テストの違いは?
- 結合テストにおける注意点はありますか?
質問1.結合テストにおける「V字モデル」とは何ですか?
結合テストにおいてV字モデルとは、開発におけるプロセスに対してするべきテストを明確にすることです。おこなうテストを明確にすることで、チェック漏れを防止するはたらきがあります。
質問2.結合テストと単体テストの違いは?
結合テストと単体テストでは、テスト範囲が異なります。単体テストは1つの機能に対して個別におこなうことに対して結合テストは複数の機能に対して動作の確認をすることです。
質問3.結合テストにおける注意点はありますか?
結合テストは単体テストと比較して、時間や手間がかかるほか正確性に欠けることがあります。そのため、前もって該当しているモジュールの単体テストをおこなうことが一般的です。
まとめ
結合テストは、プログラム間の連携を確認する、システム開発には欠かせない重要なテスト工程です。
実施方式であるトップダウンテストとボトムアップテストは、どちらが良い方法であるかは一概には言えませんが、開発したシステムではどちらの方式を取ればより正確性の高いテストが出来るのかを考慮していきましょう。