【マイナビITエージェント】あなたの転職活動を無料でサポートいたします
「単体テスト」と「結合テスト」の違いとは?
開発の現場では、エラーを検知する「テスト」作業が非常に重要です。ここでは、「単体テスト」と「結合テスト」はどういったものなのかを、システム開発の工程とともに紹介します。
どちらもシステム開発で重要な工程の1つ
システム開発を行う上で、エラーや不具合はつきものです。どんなに細かくチェックを行っても、実際動かしてみると予期しないエラーが出たり、求めている機能が使えなかったりすることは多々あります。
そこで、必要になるのが「テスト工程」です。作成したシステムを納品するまでに、顧客が求める要件が満たされているか、たとえエラーが出力されてもシステムが稼働するような作りになっているかを地道にテストしなければなりません。
そんなテスト工程のうち、よく知られているのが「単体テスト」と「結合テスト」です。同じシステム開発において実施されるテスト工程ですが、「単体テストは機能を小さい単体でテストする」、「結合テストは複数のモジュールを組み合わせてテストする」といった違いがあります。
それぞれのテストを行う目的やタイミングは異なりますが、どちらもシステム開発では欠かせない重要な工程の1つです。
システム開発の流れ
そもそも、このシステム開発はどのような流れで行われるのでしょうか?システム開発は決められた手順通りに進めていきます。例えるなら、家を建てる過程と似ています。
一般的には、「要件定義→外部設計→内部設計→プログラミング(構築)→単体テスト→結合テスト→システムテスト→運用テスト→システム移行」といった流れをたどります。
なお、「インフラエンジニア」と「アプリエンジニア」ではプログラミングの有無など、多少工程は変化します。今回は「アプリのシステム開発」を基準に紹介します。
・要件定義
要件定義とはシステム開発プロジェクトを進める前に、顧客にとって必要な機能や要件をまとめる作業のことです。プロジェクトが進んでいくとともに要件定義に立ち返ることも多く、目的をはっきりさせる工程でもあります。プロジェクトが上手くいくかは要件定義で決まると言っても過言ではありません。
・外部設計
外部設計では要件定義で作成した内容をもとに、外見的な見た目の部分を設計していきます。ユーザーの使いやすさに影響を与える部分になるので、使いやすいシステムを作るために大切な工程になります。
・内部設計
内部設計では、システムの中身であるプログラミングの設計をします。外部設計はユーザー側からの視点よりでしたが、内部設計では開発者側からの視点よりで設計していきます。
・プログラミング(構築)
内部設計でプログラミングの設計が決まったら、設計書通りプログラミングを行っていきます。ただプログラミングを行うのでなく、設計書を作成した人やテストを行う人と積極的にコミュニケーションを行うのも大切です。
・単体テスト
後で詳しく紹介しますが、単体テストではプログラミングの粒度(単位)ごとにテストを行っていきます。この単位はモジュールと言われることもあります。単純作業になりがちなため、より効率が求められる工程でもあります。
・結合テスト
こちらも後で詳しく紹介しますが、結合テストは複数のモジュールを組み合わせて、正しく機能しているかを検証します。結合テストはテスト項目の洗い出しが難しい部分でもあります。
・総合テスト(システムテスト)
総合テストでは全ての作成したプログラムが、要件定義で作成したシステム要件通りに正しく動くかをテストする工程です。性能や機能のテストを行います。ここからは、アプリの基盤を作成したインフラエンジニアの人と協力して行っていくこともあるでしょう。
・運用テスト
運用テストでは実際にシステムを運用する顧客先の環境を設定し、システムに影響や不具合がでないかをテストしていきます。これまでのテストと比較すると実用性に重きを置いたテストとなっています。
・システム移行
システム移行は、古いシステムから新しく開発システムへ切り替える工程です。成功するか、ハラハラする工程でもあります。
・保守・運用
保守・運用では、システムが問題なく運用しているかチェックしたり、よりよい状態にシステムを稼働させることができないか、プログラムを修正したりします。システムは24時間365日稼働していなければならないものもあるため、常にシステムを監視する業務も含まれます。
システム開発のモデルの紹介
システム開発には、さまざまな種類の開発モデルが存在します。例えば、「ウォーターフォールモデル」、「アジャイル開発」、「プロトタイプモデル」、「スパイラルモデル」などです。ここでは、システム開発で最もよく使われる2種類のモデルを紹介します。
・ウォーターフォールモデル
ウォーターフォールモデルは、要件定義や設計などの上流工程から、テスト、保守・運用などの下流工程へ、順を追って行われていくのが特徴です。例えば、設計が完全に行われていないのに、プログラミングを行うことはありません。
スケジュール管理がしやすいので、大規模なシステム開発に適している開発手法と言えます。一方、工程でのミスが生じた場合の手戻りがある場合、時間を要してしまうのがデメリットです。
・アジャイル開発
アジャイルには「素早い、機敏な」という意味があります。アジャイル開発は文字通りスピード感のある開発手法です。短い開発期間で単位を区切り、変更や修正を行います。
メリットは、新しい技術開発などですぐに成果物が欲しいとき、とりあえず作ってみることができる点です。一方、スケジュール管理がしづらいのはデメリットです。
IT業界に精通した専任アドバイザーと豊富な求人で、
あなたの転職活動を丁寧にサポートします。
単体テストとは
ここでは、まず「単体テスト」について詳しく紹介します。上述したように、単体テストでは、プログラミングの対象単位ごとにテストを行っていきます。具体例を詳しく説明します。
単体テストの目的
単体テストは「Unit Test(UT工程)」とも呼ばれる通り、メソッドや関数などの1つ1つの小さな単位ごとに行うテストのことです。1つの画面や1つの機能で実施される動作をテストすることが目的となっています。
しかし、実際にシステム開発で作るプログラムでは、画面や機能が複数存在している場合が多いです。そのため、動作の連携に関しては単体テストではなく、後で紹介する結合テストでチェックを行います。
単体テストの観点
一般的に、単体テストは条件分岐を網羅する観点からテストを行います。理由としては、条件分岐を網羅することで、品質をある程度は確保できるからです。
ただし、コスト、納期、品質のバランスの観点から、100%の品質を確保するテストはできないことは頭に入れておきましょう。
単体テストのやり方
単体テストの手法の種類はさまざまです。代表的な手法である、「ホワイトボックステスト」と「ブラックボックステスト」を取り上げて紹介します。
・ホワイトボックステスト
ホワイトボックステストは、プログラムが設計したとおりに動作するかを1つ1つ網羅的に確認するテストです。つまり、「開発者側の視点」に立ったテストとも言えます。
例えば、設計書ではエラーが発生すると定義された文字列を入力し、出力結果が正常かどうかを検証します。ホワイトボックステストのメリットは、1つ1つのモジュールに対して網羅的に検証できることです。一方、デメリットは工数が増えてしまうことです。
・ブラックボックステスト
ブラックボックステストは、開発するシステム自体の仕様を満たしているかどうかを確認する機能のテストです。つまり、「利用者側の視点」にたったテストと言えます。内部のプログラムについては考慮しないため、「ホワイトボックス」とは逆の「ブラックボックス」と呼ばれています。
テスト例として、設計書で0~100までの数値を正常と設定した場合、境界付近である値(例えば、0、-1など)を選んでテストします。理由としては、境界付近にプログラムの欠陥が多いためです。
ブラックボックステストのメリットは、利用者の要件を満たしていることが確認できる上に、工数を抑えることができる点です。一方で、プログラムの内部処理が適切に行われているのかわからない点はデメリットです。
単体テストの仕様書を作成する
単体テストを実施する際は、単体テスト仕様書と呼ばれるドキュメントを用意します。仕様書を作成する際は、「入力手順」「テスト方法」「テスト観点」などを詳しく記載しましょう。単体テストの仕様書を丁寧に作成すると、網羅的にテストを行うことが可能になり、結果的にシステムの品質を上げられます。
ぜひ『マイナビIT エージェント』をご活用ください!
結合テストとは
結合テストでは複数のモジュールを組み合わせて、正しく機能しているかを確認します。ここからは結合テストについて詳しく紹介します。
結合テストの目的
結合テストは「Combined Test(CT工程)」とも呼ばれており、複数のモジュールを組み合わせて行うテストのことです。「モジュールを結合させたときに、設計したように動作するのか」「想定外の状況のエラーが出力されても、システム要件が満たされているか」といったことを検証するのが目的です。
また、単体テストで正常を確認できたモジュール同士を組み合わせるだけでなく、その他の外部モジュールを結合したテストも行うことがあります。
結合テストの観点
結合テストは要件定義に基づいて、機能要件や非機能要件の観点からテスト項目を洗い出します。単体テスト同様に、コスト、納期、品質のバランスの観点からテスト項目を選定することが大切です。
単体テストと違い、結合テストではシステムの全体的なデータの流れを把握ができる技術が必要になります。1つ1つの機能にエラーがなくても、連携させると問題が発生する可能性があるためです。
結合テストのやり方
結合テストの手法としては、「インターフェーステスト」「ブラックボックステスト」の2つが代表的です。具体的に紹介します。
・インターフェーステスト
インターフェースとは、モジュール同士を接続したときに、データの引き渡しを仲介する仕組みのことを指します。インターフェーステストは、結合テストの中では「定番」と言ってもいいほど一般的なもので、「連結テスト」とも呼ばれます。
インターフェーステストでは、機能間やモジュール間でデータを引き渡す際に、引き渡されるべきデータがきちんと引き渡されているか、連携に関わるモジュールが設計した通りに正常に動作しているかなどを検証します。
・ブラックボックステスト
単体テストで説明した通り、ブラックボックステストはプログラムの内部構造を考慮しないで、入力に対して正常な出力結果を得ることができるか検証するテストです。
結合テストでは、単体テストで正常を確認できたモジュール同士を結合して、ブラックボックステストを実施することで、仕様を満たしているかどうかを確認します。
また、この2つ以外に「トップダウンテスト」と「ボトムアップテスト」があります。「トップダウンテスト」は上位モジュールを呼び出した後に、下位モジュールヘと移行してテストを進めていく方式です。「ボトムアップテスト」はプログラムの下位階層にあるモジュールから、優先的にテストを進めていく方式です。
単体テストと結合テストを実行するエンジニアは?
システム開発において重要な役割であるテスト工程ですが、実際の業務では誰が実施するのでしょうか?ここでは、テスト工程を担うエンジニアについて解説します。
基本はテストエンジニアが行う
テスト工程を行うのは「テストエンジニア」と呼ばれる業種です。テストエンジニアはテストの実行だけでなく、テスト計画の策定、結果の分析、改善提案まで幅広い技術と知識を求められます。
近年は品質管理やセキュリティーがさらに重要視されているため、大きな責任も伴います。また、効率向上のために「IaC」のようなテスト自動化ツールを導入する企業もあり、常に新しい知見が必要です。
テストエンジニアの年収
テストエンジニアの年収について、類似の職種である「品質管理/QA/QC」を参考に紹介します。
「マイナビエージェント 職種図鑑」での「品質管理/QA/QC」の平均年収は526万円(※2023年9月執筆時点)、経済産業省2017年発表の「IT関連産業の給与等に関する実態調査結果」から近い職種の(顧客サポート/ヘルプデスク)を参考にすると、平均年収390万円と分かりました。
国税庁2020年発表の「民間給与実態統計調査」における民間企業平均年収は433万円なので、品質管理/QA/QCの年収は調査媒体によってバラつきがあることが分かります。
テストエンジニアとしてキャリアを積んだら、さらなるキャリアアップを目指して資格取得に挑戦してみるのもおすすめです。システムエンジニアやプロジェクトリーダーなど、年収アップが期待できる業種への転職も視野に入れましょう。
【参考】:マイナビエージェント 職種図鑑 ※【平均年収 調査対象者】2020年1月~2020年12月末までの間にマイナビエージェントサービスにご登録頂いた方 【参考】:IT関連産業における給与水準の実態① ~ 職種別(P7) 【参考】:民間給与実態統計調査-国税庁
テストを行う際の注意点
ここでは、単体テストや結合テストを行う際の注意点を見ていきます。効率的かつ、高品質なテストを行うために確認しておきましょう。
テストに必要なものを事前に確認する
効率的にテストを実施するには、必要なものが何かをしっかり確認して準備しておく必要があります。機能によってはテストデータを作成したり、テスト結果を検証したりするためのツールが必要になる場合があります。
いざテストを実行する段階になって準備しても間に合わないので、スケジュールに余裕がある段階でしっかりチェックしておくことが重要です。
時間と労力のバランスを考える
単体テストは最小単位でのテストになるため、大きなシステムになればなるほど膨大な時間と工数がかかります。また、結合テストでも複数のモジュールを組み合わせる必要があるため、全てを完璧にテストしようとすると、その労力は計り知れません。
そのため、時間と労力のバランスを考えながら、優先順位をつけて実施することが重要です。
もしも、「これまでとは異なるシステムで、自分のテスト技術を試してみたい」といった希望がある場合は、転職を視野に入れてみましょう。転職エージェントでは、転職のプロがスキルに合った企業を探してくれます。
エンジニア転職のご相談はぜひ
『マイナビIT エージェント』へ!
不具合を放置しない
大きなシステムになると、多くの不具合やエラーが生じることもあります。その際、確認や報告が遅れたり放置されたりすると、大きな問題に発展してしまいます。当然ながら、テストを実施するだけではなく、不具合が無事に解決するまでフォローすることが大切です。
テストの違いを理解して不備のない開発を目指そう
「単体テスト」と「結合テスト」は、システム開発における重要な工程の中の一つです。「単体テスト」と「結合テスト」では、似ている部分も存在しますが、それぞれ目的、観点、手法は異なります。テストエンジニアを目指す方は特に、テストの細かい違いをしっかり理解することが大切です。
また、最近ではテストを自動化する「IaC」と呼ばれるテストツールが注目を集めています。テストツールを導入することで、テストの工数の短縮が期待できるでしょう。
今後、システムの品質向上やセキュリティーの強化はますます重要になるため、テストエンジニアの需要も高まることが予想されます。そのため、転職をすることで年収がアップすることも期待できます。
しかし、いざ転職しようと思っても「好条件の転職先が見つかるのか」「自分に合う職場はあるのか」など、不安に感じる方も少なくありません。
そこでぜひご活用いただきたいのがマイナビIT エージェントです。
マイナビIT エージェントは、IT・Webエンジニア向けの無料の転職⽀援サービスです。
IT・Webエンジニアの転職事情に詳しいキャリアアドバイザーが、あなたのご経験やスキルをお伺いし、転職活動のプランをご提案致します。
アドバイザーは企業側の人事担当者と直接連携を取れますので、求人票に載っていない企業情報も確認することができます。残業時間や給与面など、働き方などをしっかり確認の上で応募企業を選んでいくのが良いでしょう。
・資格やプログラミングの勉強をしているけれど、企業が求めるレベルに達しているのかわからない ・スキルアップをして市場価値を上げていける企業の選び方を知りたい ・数多くあるITエンジニアの職種の中で、自分に向いている仕事は何か知りたい
こうした悩みを抱えていらっしゃる方は、まずは無料登録でキャリアカウンセリングをおすすめ致します。
エンジニア転職のご相談はぜひ
『マイナビIT エージェント』へ!
編集部オススメコンテンツ
アンドエンジニアへの取材依頼、情報提供などはこちらから