結合テストの観点を理解しよう
ソフトウェア開発において、テストは品質を担保する上で大変重要な工程です。ソフトウェアのテストをレベルに分けると、「単体テスト(コンポーネントテスト)」「結合テスト」「システムテスト」「運用テスト」の4つに大別できます。
ソフトウェアの品質を担保するには、各テスト工程における検証を通じ、バグの洗い出しと、その改修を行う必要があります。
「結合テスト」は、その中でも中盤から後半にかけて実施するテストで、単体テスト済みの複数のコンポーネントを組み合わせてさまざまな項目をテストします。
結合テストは一般的に他のテストと比べても長い時間をかけて行われますが、スムーズかつ有意義なテストにするためには、結合テストの観点を正しく理解する必要があります。「結合テストは難しい」というイメージもありますが、実際にやってみるとさほど難しくはありませんので、ぜひ体得してエンジニアとしてのスキルを磨きましょう。
システム開発の工程を再確認
テストについて解説していく前に、それぞれのテストがシステム開発工程のどこに位置するのかを確認しておきましょう。
システム開発の工程には、「ウォーターフォールモデル」「アジャイルモデル」「プロトタイプモデル」などがありますが、ここでは伝統的な「ウォーターフォールモデル」を念頭に置いて、システム開発の工程について解説していきます。
要件定義:RD(Requirements Definition)
要件定義フェーズは、システム化計画やシステム企画フェーズで作成した計画書をベースにして、ユーザーやクライアントが実現したいことを機能要件、技術要件にまとめる工程です。要件は「機能要件」と「非機能要件」に分かれます。要件定義書が成果物となり、内容についてクライアントやユーザーの合意を得た上で基本設計フェーズに進みます。
基本設計(外部設計):UI(User Interface)
基本設計フェイズでは、要件定義で決定した内容に従って、主にユーザーインターフェースを設計します。プロジェクトの規模にもよりますが、基本設計書は一般的に大まかな機能ごとに作成されます。「システム構成図」「画面一覧」「帳票一覧」など、数十種類の資料が成果物となります。
詳細設計(内部設計):DD(Detail Design)
詳細設計フェーズでは基本設計書の内容に従い、システムに搭載する機能をモジュールごとに分割して、詳細設計書にブレイクダウンしていきます。「機能仕様書」「データフロー図」「データベース設計書」などもここで確定していきます。
プログラミング:PG(Programing)
主にプログラマーが詳細設計書の内容に従ってプログラミングを行います。プログラミングとコーディングを同義と考える方もいますが、プログラミングはプログラムを作成する作業全般のことで、コーディングはプログラミング言語を用いてソースコードを作成することを意味します。つまりコーティングはプログラミング作業の一部です。
製造・単体テスト:M(Manufacture)、UT(Unit Test)
詳細設計書に基づいて作成したプログラムが、設計書通りの動きをするかどうかを確認します。プログラマー自身がテスト仕様に基づいてテストするケースが大半ですが、テスターと呼ばれる担当者がテスト工程を担当することもあります。
結合テスト:IT(Integration Test)or JT(Joint Test)
単体テストで問題がなければ、複数のモジュールからなるサブシステム全体のテストを行います。ここで、各サブシステム間のインターフェースに問題がないか、各サブシステムの連携が正常に行えているかなどの確認を行います。
システムテスト(総合テスト):ST(System Test)
結合テストフェーズで、各サブシステムに問題がないことを確認できたら、システム全体を動かして不具合がないかどうかを確認します。要件定義通りの動きをしているかを確認しますが、パフォーマンスチェックも行います。
また、アクセスが集中した時や処理データ量が急増した時など、イレギュラー時の動きについても確認します。
運用テスト:OT(Operation Test)
運用テストは、開発したシステムを納品・リリースする前に行う最終工程です。実際の本番環境でシステムが正常に稼働するかどうか、誤操作などで不具合が起きないか、操作性に問題がないかなど、起こりうるトラブルをすべて想定して細かくチェックを行います。
ここで不具合を発見できないと、クライアントやユーザーに重大な損害をもたらす事もあるため、小さな不具合も見逃せない重要な工程と言えます。この後、システム移行(リリース)の工程を経て、システムの「保守・運用」フェーズへと進みます。
ぜひ『マイナビIT エージェント』をご活用ください!
結合テストの目的
結合テストは、モジュール間の連携やデータの受け渡しなどに問題がないことを確認するのが目的です。ここで不具合が発見されると、仕様書に遡って仕様書の修正、プログラムの修正が行われることもあります。システムテストで大きな問題が起きないようにするためにも、結合テストを確実に実施しておくことが大切です。
単体テストと結合テストの違いと関係性
前述した通り、単体テストはプログラム毎にテストを行います。単体テストを行う目的は、プログラム単位の不具合を発見し、早期に修正して結合テストの効率を上げ、ソフトウェアの品質を担保することです。
単体テストは、主に「条件網羅テスト」と「境界値テスト、異常値テスト」の2種類に分けられます。
「条件網羅テスト」は一般的によく行われるテストで、詳細設計書に記述されたロジックの条件を網羅して、仕様通りに動作するかどうかを確認します。一方「境界値テスト、異常値テスト」では、本来受け付けてはならないイレギュラーなデータを意図的に入力して、それらが正しく弾かれるかどうかを確認します。
これらのテストを行うことで、1つ1つのプログラムの品質を確認でき、結合テストを行う下地を作ることができます。
結合テストの観点は内部と外部で異なる
結合テストには、同一サブシステム内でモジュール間で行う「内部結合テスト」と、サブシステム間の機能連携について確認を行う「外部結合テスト」があります。機能と機能同士の連携が正常に行われているかどうかを確認する点ではどちらも共通していますが、細かく見るとそれぞれ観点が異なります。
「内部結合テスト」では、1つのサブシステム内における機能連携の観点から確認するのに対し、「外部結合テスト」では、サブシステム間や他のシステム間との機能連携の観点から確認を行います。
テスト観点リストを作成することも多い
テストの観点を見逃すことがないよう、「テスト観点リスト」を作成してテストを行う開発者もいます。
結合テストを行うエンジニア達が「テスト観点」を理解はしていても、属人的な判断に委ねてしまうと、エンジニアによって温度差が生じ、必要なテストが漏れてしまうリスクがあります。
そこで役立つのが「テスト観点リスト」です。システム開発は、さまざまな設計書、仕様書に基づいて進められていきますが、テストにもテストとしての仕様書が必要です。
「テスト観点リスト」には定型パターンがありませんので、システムの種類や特性ごとに個別に作成する必要があります。「システムテストの観点に基づくサンプル」や「結合テスト計画書」の記述項目などが以下、IPA作成のガイドブックなどにも載っていますので、ぜひ参照してみてください。
【参照1】:高信頼化ソフトウェアのための開発手法ガイドブック(IPA:独立行政法人 情報処理推進機構) 【参照2】:ソフトウェアテスト見積りガイドブック(IPA:独立行政法人 情報処理推進機構)
テスト観点リストの作成方法
ソフトウェア品質評価の国際規格に「ISO/IEC9126」があります。「ISO/IEC9126」は、品質特性として機能性・信頼性・使用性・効率性・保守性・移植性の6つを挙げていますが、テスト観点リストを作成する際はそれらを「大きな観点」から「小さな観点」にブレイクダウンしていきます。 たとえば、品質特性の中で「機能性」を1つの観点にして次のようにブレイクダウンしてみましょう。信頼性・使用性・効率性・保守性・移植性についても同様に記述します。
(観点リストの例)
大分類 > 中分類 > 小分類 > 細分類 > テスト観点
・機能性> 機能テスト>画面表示>レイアウト>配置・サイズ・タイトル
・ 〃 > 画面項目 >文字の内容・文字サイズ・文字の書式・初期値...
以上はあくまでも1つの例です。「テスト観点リスト」は自由に作成して構いません。作成し、改廃して、組織ノウハウとしていきます。エンジニアのミーティングで衆知を集め、「テスト観点リスト」の完成度を高めていけば、テストはより効率的、効果的になり、品質向上に大いに役立つでしょう。
IT業界に精通した専任アドバイザーと豊富な求人で、
あなたの転職活動を丁寧にサポートします。
テストの観点を適切に洗い出すことが重要
ソフトウェア開発で各種テストを行う際は、まずテスト計画を策定し、テストの目的や範囲、テストシナリオなどを決定します。これらを決定するためには、各テストの観点を洗い出しておく必要があります。
特に結合テストは、複数のモジュールが関係してくるためテスト内容も複雑になりやすく、テストの観点を見失わないよう明確に定義することが重要です。要件定義書を読み解いたり、さまざまなテストパターンと照らし合わせたりして、テスト観点を洗い出しましょう。
テストエンジニアの力量が試される場面でもある
結合テストをはじめとする各種テストは、「テストエンジニア」と呼ばれる専門のエンジニアが担当することが多いです。テストエンジニアは、テスト計画の策定からテストの結果報告、改善案の提案まで、テスト工程の全般を担います。
そのため、テストの観点をしっかりと理解することは、テストエンジニアとしてのスキルの土台になるのです。逆に言えば、ここができていないと、テストエンジニアとしてスキルアップ、ひいては年収アップにも繋がらないと考えられます。
テストエンジニアの年収は、「マイナビエージェント職業別年収ランキング/職種図鑑」で「品質管理/QA/QC」の平均年収を参考にすると526万円(※2024年10月執筆時点)、経済産業省2017年発表の「IT関連産業の給与等に関する実態調査結果」から近い職種の「SE・プログラマ(ソフトウェア製品の開発・実装)を参考にすると、平均年収568.5万円と分かりました。
国税庁2020年発表の民間給与実態統計調査における民間企業平均年収は433万円なので、テストエンジニアをはじめとする品質管理関係のITエンジニアは一般平均年収よりも、やや高めであることが分かります。この数字も、確実なテストを行えるスキルが前提となっていると言えるでしょう。
【参考】:マイナビエージェント職業別年収ランキング/品質管理/QA/QC ※【平均年収 調査対象者】2020年1月~2020年12月末までの間にマイナビエージェントサービスにご登録頂いた方 【参考】:IT関連産業における給与水準の実態① ~ 職種別(P7) 【参考】:民間給与実態統計調査-国税庁
結合テストの種類や手法も知っておこう
結合テストにはいくつかの種類や手法があります。テストを計画する際は、これらを活用してテストケースを設計していきます。以下、代表的な結合テストの種類やその手法について紹介します。
■インターフェーステスト それぞれのプログラムやモジュールが、互いに正しく連携して動くかどうかを確認するテストです。AのプログラムからBのプログラムに正しくデータが引き渡しをされているか、といった観点で検証します。
■ブラックボックステスト 内部構造は把握せず、ユーザーの視点で、入力したものから正しい出力が得られているかを確認します。このテストでは開発の知識は求められませんので、開発関係者以外のメンバーや、初心者でも行えることから、費用対効果の高いテストであるといえます。
■業務シナリオテスト こちらはさらに実際の業務を想定した動作確認を行うテストです。業務に則した操作が中心となるため、実際にシステムを操作、利用するユーザーに行ってもらう場合もあります。イレギュラーな操作を行うことが重要で、たとえば、本来あり得ないような数値やデータを入力したり、エンターキーを何度も叩いたり、といったことを実施します。
■負荷テスト 負荷テストは、システムに最大の負荷をかけた場合の動作状態を確認し、システム停止やパフォーマンス低下が起こらないかを確認するテストです。たとえば、想定する最大のアクセス数があった場合や、想定する最大のデータ量を処理した際のパフォーマンスなどを確認します。
テストのスケジュールも考慮する
結合テストは納期がタイトになると、スケジュールを圧迫することが少なくありません。しかし、テストの自動化ツールやシミュレーターソフトなどを利用することで結合テストを効率化し、その負荷をかなり軽減することができますので、ツールの活用も検討してみましょう。
こうしたツールに関する知識や技術も持っていれば、テストエンジニアとしての価値も高まります。スキルを身に付けることでどのようなキャリアを積めるのか、転職エージェントなどを利用して確かめてみましょう。
エンジニア転職のご相談はぜひ
『マイナビIT エージェント』へ!
システムの品質アップの鍵はテスト
システムはどんなに手を掛けて開発しても、本番で大きなトラブルを招くと、失うものも大変大きなものになります。クライアントやユーザーに多大な迷惑を及ぼすばかりか、その企業の顧客に対しても損害を与え、企業の根幹を揺るがす事態も起こり得ます。
多くのシステム障害の原因の大半は、イレギュラーケースを想定した結合テストや総合テストをしていないことにあります。これは不可抗力ではなくヒューマンエラーです。
エンジニアの成果は、作成したシステムの品質で決まります。品質を高めるには、高いテストスキルを持つことです。これを読まれたエンジニアの皆さんは、ぜひテストに関するスキルを磨き、ITエンジニアとしてキャリアアップを目指してください。
そこでぜひご活用いただきたいのがマイナビIT エージェントです。
マイナビIT エージェントは、IT・Webエンジニア向けの無料の転職⽀援サービスです。
IT・Webエンジニアの転職事情に詳しいキャリアアドバイザーが、あなたのご経験やスキルをお伺いし、転職活動のプランをご提案致します。
アドバイザーは企業側の人事担当者と直接連携を取れますので、求人票に載っていない企業情報も確認することができます。残業時間や給与面など、働き方などをしっかり確認の上で応募企業を選んでいくのが良いでしょう。
・資格やプログラミングの勉強をしているけれど、企業が求めるレベルに達しているのかわからない ・スキルアップをして市場価値を上げていける企業の選び方を知りたい ・数多くあるITエンジニアの職種の中で、自分に向いている仕事は何か知りたい
こうした悩みを抱えていらっしゃる方は、まずは無料登録でキャリアカウンセリングをおすすめ致します。
マイナビエージェントに無料登録して
転職サポートを受ける
編集部オススメコンテンツ
アンドエンジニアへの取材依頼、情報提供などはこちらから