システム開発の工程の「単体テスト」と「結合テスト」の違いを徹底解説!
個人利用が徐々に増えている
システム開発の工程の「単体テスト」と「結合テスト」の違いを徹底解説!
アンドエンジニア編集部
2021.08.03
この記事でわかること
単体テストと結合テストはシステム開発の中の一工程!
単体テストはメソッドや関数などの1つ1つの小さな単位ごとに行う
結合テストは複数のモジュールを組み合わせて行う

システム開発の流れの紹介

runtime environment

「単体テスト」や「結合テスト」とは、システム開発の工程の1つです。そもそも、このシステム開発はどのような流れで行われるのでしょうか?システム開発は決められた手順通りに進めていきます。例えるなら、家を建てる過程と似ています。

システム開発の工程の紹介

ここでは、簡単にですが、システム開発の工程がどのようなものかを紹介していきたいと思います。 システム開発の工程は、「要件定義→外部設計→内部設計→プログラミング(構築)→単体テスト→結合テスト→システムテスト→運用テスト→システム移行」のような流れをたどります。 なお、「インフラエンジニア」と「アプリエンジニア」でプログラミングの有無など、多少工程は変化します。今回は「アプリのシステム開発」を基準に紹介します。

インフラエンジニアはキツイのか?その仕事内容やスキル、将来性を解説!

・要件定義 要件定義では、システム開発プロジェクトを進める前に、顧客にとって必要な機能や要件をまとめる作業のことです。プロジェクトが進んでいくとともに要件定義に立ち返ることも多く、目的をはっきりさせる工程となっています。プロジェクトが上手くいくかは要件定義で決まると言っても過言ではありません。

プロジェクトの成否を左右する非機能要件の一覧について詳しく解説!

・外部設計 外部設計では、要件定義で作成した内容をもとに、外見的な見た目の部分を設計していきます。ユーザーの使いやすさに影響を与える部分になるので、使いやすいシステムを作るために大切な工程になります。

・内部設計 内部設計では、システムの中身であるプログラミングの設計をします。外部設計はユーザー側からの視点よりでしたが、内部設計では、開発者側からの視点よりで設計していきます。

・プログラミング(構築) 内部設計で、プログラミングの設計が決まりましたら、設計書通り、プログラミングを行っていきます。ただプログラミングを行うのでなく、設計書を作成した人と次に紹介するテストを行う人と積極的にコミュニケーションを行うのも大切です。

・単体テスト 後で詳しく紹介しますが、単体テストでは、プログラミングの対象単位ごとにテストをおこなっていきます。この単位をモジュールと言われたりします。単純作業になりがちなこともあり、効率が求められる工程でもあります。

新人が任されやすい単体テストとその仕様書の作成について徹底解説!

・結合テスト こちらも後で詳しく紹介しますが、結合テストは、複数のモジュールを組み合わせ、正しく機能しているか検証します。結合テストは、テスト項目の洗い出しが難しい部分でもあります。

・システムテスト システムテストでは、全ての作成したプログラムが、要件定義で作成したシステム要件通りに正しく動くかをテストする工程です。性能や機能のテストを行います。ここからは、アプリの基盤を作成したインフラエンジニアの人と強力して行っていくこともあるでしょう。

・運用テスト 運用テストでは、実際にシステムを運用する顧客先の環境を設定しに、システムに影響や不具合がでないかをテストしていきます。これまでのテストと比較すると実用性に重きを置いたテストとなっています。

運用テストってどんなテスト?目的や内容、注意すべきポイントとは?
運用テストと受入テストの違いとは? 相違点を理解してシステムの品質を高めよう!

・システム移行 システム移行は、古いシステムから新しく開発システムへ切り替える工程です。成功するか、ハラハラする工程でもあります。

・保守・運用 保守・運用では、システムが問題なく運用しているかチェックしたり、よりよい状態にシステムを稼働させることはできないか、プログラムを修正したりも行います。システムは24時間365日稼働していなければならないものもあり、常にシステムを監視する業務も含まれます。

【保守・運用】仕事内容や将来性、必要なスキルについて徹底解説!

システム開発のモデルの紹介

システム開発には、さまざまな種類の開発モデルが存在します。例えば、「ウォーターフォールモデル」、「プロトタイプモデル」、「スパイラルモデル」、「アジャイル開発」などです。ここでは、システム開発で最もよく使われる2種類のモデルを紹介します。

・ウォーターフォールモデル ウォーターフォールモデルは、要件定義や設計などの上流工程から、テスト、保守・運用などの下流工程へ、順を追って行われていくのが特徴です。例えば、設計が完全に行っていないのに、プログラミングを行うことはありません。 メリットとして、スケジュール管理がしやすいので、大規模なシステム開発に適している開発手法となっています。一方、デメリットは、工程でのミスが生じた場合の手戻りがある場合、時間を要してしまいます。

・アジャイル開発 アジャイル開発とはスピード感のある開発手法となっています。アジャイルとは、「素早い、機敏な」と日本語に訳されます。その名の通り、短い開発期間で単位を区切り、全体を作っていき、変更や修正を随時行う開発方法です。 メリットは、成果物がすぐに欲しいときや、新しい技術開発などでとりあえず作ってみるようなときに、適している最開発方法です。デメリットは、スケジュール管理がしづらいところです。

アジャイル開発の特徴、メリット・デメリット、DXとの関係など

単体テストと結合テストの概要紹介

Java program

これまで、システム開発の流れを見てきました。システム開発の中でシステムエラーを未然に防ぐために重要なのがテスト工程です。作成したシステムを納品するまでに、顧客が求める要件が満たされているか、たとえエラーが出力されてもシステムが稼働することができるような作りになっているかを地道にテストすることが必要です。

ここからは、単体テストと結合テストについて詳しく紹介していきます。それぞれの目的や観点、手法についても紹介しましょう。余談ですが、単体テストは「単テ」、結合テストは「結テ」などと略称で呼ばれることも多いです。

単体テスト

SQL

先ほども説明したように、単体テストでは、プログラミングの対象単位ごとにテストをおこなっていきます。具体例を詳しく説明しましょう。

単体テストの目的

単体テストは、UT工程とも呼ばれ、「Unit Test」の通り、メソッドや関数などの1つ1つの小さな単位ごとに行うテストのことです。1つの画面であったり、1つの機能であったりで実施される動作をテストすることが目的となっています。 しかし、実際にシステム開発で作るプログラムでは、画面や機能が複数存在している場合が多いです。動作の連携に関しては単体テストでは実施しません。後で紹介する結合テストで行うテストとなります。

単体テストの観点

単体テストは、一般的には条件分岐を網羅する観点よりテストを行うことが多いでしょう。理由としては、条件分岐を網羅することで、品質をある程度は確保できるからです。 テスト工程では効率が大切になってきます。そのため、コスト、納期、品質のバランスの観点から100%品質を確保するテストができないことは頭に入れておきましょう。それでは、具体的な手法について見ていきましょう。

単体テストの手法

単体テストの手法の種類はさまざまです。代表的な手法である、「ホワイトボックステスト」と「ブラックボックステスト」を取り上げて紹介しましょう。

・ホワイトボックステスト ホワイトボックステストは、プログラムが設計したとおりに動作するかを1つ1つ網羅的に確認するテストとなっています。つまり、「開発者側の視点」にたったテストと言うことができるでしょう。テスト例として、設計書ではエラーが発生すると定義している文字列を入力した場合の出力結果が正常か検証します。 ホワイトボックステストのメリットとして、1つ1つのモジュールに対して網羅的に検証できることです。一方で、デメリットは、工数が増えてしまうことです。

・ブラックボックステスト ブラックボックステストは、開発するシステム自体の仕様を満たしているかどうかを確認する機能のテストです。つまり、「利用者側の視点」にたったテストと言うことができるでしょう。また、内部のプログラムについては考慮しないため、「ホワイトボックス」とは逆の「ブラックボックス」と呼ばれています。 テスト例として、設計書で0~100までの数値を正常と設定した場合、境界付近である値(例えば、0、-1など)を選んでテストします。理由としては、境界付近にプログラムの欠陥が多いためです。 ブラックボックステストのメリットとして、利用者の要件を満たしていることが確認でき工数を抑えることができる点です。一方で、デメリットは、プログラムの内部処理が適切に行われているかわからないことです。

単体テストの仕様書を作成する

単体テストを実施する際は、単体テスト仕様書と呼ばれるドキュメントを用意します。仕様書を作成する際は、「入力手順」「テスト方法」「テスト観点」などを詳しく記載しましょう。単体テストの仕様書を丁寧に作成すると網羅的にテストを行うことが可能になり、結果的にシステムの品質を上げることができます。

新人が任されやすい単体テストとその仕様書の作成について徹底解説!

結合テスト

Digital

こちらも先ほど説明しましたが、結合テストでは、複数のモジュールを組み合わせ、正しく機能しているかテストします。詳しく紹介しましょう。

結合テストの目的 

結合テストは、CT工程とも呼ばれ、「Combined Test」の通り、複数のモジュールを組み合わせて行うテストのことです。モジュールを結合させたときに、設計したように動作するのか、想定外の状況のエラーが出力されても、システム要件が満たされているかを検証するのが目的です。

また、単体テストで正常を確認できたモジュール同士を組み合わせるだけでなく、その他の外部モジュールを結合したテストも行うことがあります。

結合テストの観点

結合テストは、要件定義に基づいて、機能要件や非機能要件の観点からテスト項目を洗い出します。単体テスト同様に、コスト、納期、品質のバランスの観点からテスト項目を選定することが大切です。

単体テストと違い、結合テストでは、システムの全体的なデータの流れの把握ができる技術が必要となってきます。1つ1つの機能にエラーがなくても、連携させると問題が発生する可能性があるためです。それでは、具体的な手法について見ていきましょう。

結合テストの手法

結合テストの手法としては、「インターフェーステスト」、モジュールを結合したときの「ブラックボックステスト」の2つが代表的です。具体的に紹介しましょう。また、ここでは、説明しませんが、結合テストの実施方式として、「トップダウンテスト」と「ボトムアップテスト」があります。

「トップダウンテスト」は、上位モジュールを呼び出した後に下位モジュールヘと移行してテストを進めていく方式で、「ボトムアップテスト」とは、プログラムの下位階層にあるモジュールから優先的にテストを進めていく方式です。それぞれについてみてみましょう。

・インターフェーステスト インターフェーステストは、結合テストの中では「定番」と言ってもいいほど一般的なものです。「連結テスト」とも呼ばれます。また、インターフェースとは、モジュール同士を接続したときに、データの引き渡しを仲介する仕組みのことを指します。 インターフェーステストでは、機能間やモジュール間でデータを引き渡す際に、引き渡されるべきデータがきちんと引き渡されているか、連携に関わるモジュールが設計した通りに正常に動作しているかなどを検証します。

・ブラックボックステスト 単体テストで説明しましたが、ブラックボックステストは、プログラムの内部構造を考慮しないで、入力に対して正常な出力結果を得ることができるか検証するテストです。 結合テストでは、単体テストで正常を確認できたモジュール同士を結合して、ブラックボックステストを実施することで、仕様を満たしているかどうかを確認するテストとなっています。

「単体テスト」も「結合テスト」もシステム開発で重要な工程の1つ

AIとは

「単体テスト」と「結合テスト」はシステム開発の工程の中のひとつとなっています。単体テストを行った後に、結合テストを行うことは理解できましたでしょうか。また、「単体テスト」と「結合テスト」では、似ている部分も存在しますが、それぞれ目的や観点、手法が異なります。さらに、結合テストでは、単体テスト以上に経験値や技術が必要です。最近では、テストを自動化する「IaC」と呼ばれるようなテストツールが注目を集めています。テストツールを導入することで、テストの工数の短縮が期待できるでしょう。

テストを専門とするテストエンジニアを目指す方は、これら単体テスト、結合テストについて深い知識を身に着けて、実際に業務を体験してみることをおすすめします。

最後まで読んでいただきありがとうございます!

テストエンジニアの求人の探し方と、そのポイントを解説!
Twitterをフォローしよう!
この記事をシェア
Twitter
Facebook
LINE
Hatena
アンドエンジニアの公式LINEができました! ピッタリの記事や役立つ情報が届きます!

編集部オススメコンテンツ

Sponsored
現場社員のリアルな声を「生配信」にてお届けいたします!
Sky株式会社
Sponsored
この記事をシェア
Twitter
Facebook
LINE
Hatena
アンドエンジニアの公式LINEができました! ピッタリの記事や役立つ情報が届きます!

編集部おすすめコンテンツ

Sponsored
現場社員のリアルな声を「生配信」にてお届けいたします!
Sky株式会社
Sponsored