Help us understand the problem. What is going on with this article?

【🔰エンジニア対象】第2回未経験エンジニアによる業界用語説明(下流工程①)

はじめに

こんにちは、Morley@未経験エンジニアです。

今回は、連載中の業界用語説明の第2回です。
ここでは未経験エンジニアが初めて客先常駐案件にジョインするに際し、知らなかった、理解が曖昧だったワードを表層的ではあるものの、理解することで用語から生じるハードルを少しでも下げることを目的に記事を書いています。(不定期更新)

対象者

IT業界未経験者
未経験エンジニア
新人エンジニア

前回記事

開発工程のうち、要件定義~実装までの記事をご覧になりたい方は前回記事
【🔰エンジニア対象】第1回未経験エンジニアによる業界用語説明(上流工程)
をご覧ください。

ウォーターフォール型の開発工程の振り返り

waterfall.png

ウォーターフォール型では、上図のような流れで開発工程を進めていきます。
前回は「上流工程」と呼ばれる要件定義~内部設計+実装について書かせていただきましたが、今回は「下流工程」と呼ばれる単体テスト~システムテストのうち、単体テストにのみ焦点を当てて書いていきますので、もし参考になりましたら、「いいね!」や「ストック」をお願いします。(当初、結合テストとシステムテストも同一記事で書く予定でしたが、思いのほか量が増えそうなので、切り離して投稿します)

単体・結合・システム(総合)テストの違い

テスト工程には「単体テスト」「結合テスト」「システム(総合)テスト」がありますが、その全体像がよくわからなかったので図を用いて説明したいと思います。各テストの対象範囲を示した図が下図になります。
(この記事では総合テストをシステムテストで表記します)

test-scope(hen).png

各テストの大きな違いは、テストの「対象範囲」です。
単体テストは「単体機能(機能毎)」
結合テストは「機能間・他システム間」
システムテストは「構築したシステム全体」

といったところでしょうか。
それでは、各テストについて調べていきます。

【1】単体テスト

(1)目的

単体テストの目的は、コーディングしたプログラムを1本ずつ個別に実行し、不具合(ロジックのミス)を取り除くことです。一般的には、ロジックの条件分岐を網羅するテストを行うため、結合テストや総合テストなどの他のテスト工程と比較しても、圧倒的にテストケースが多くなります。

(2)概要

実装が終了したら、テスト工程に入ります。テスト工程とは、前述の目的のとおり、作り上げたシステムが一つの問題も内包しない完璧な状態にするために不具合を洗い出す工程です。その出発点が「単体テスト」になります。

「単体テスト」とは、プログラム作成が終わった段階で行うテストで、プログラムを手続きや関数といった個々の機能ごとに分割し、それぞれについて動作検証を行う手法で、単体テストでは完成したばかりのプログラムを対象として、多くの不具合を取り除くことができる唯一の作業と言えます。正しく動作することは当然のことですが、単体テストは多く取り除くために、出せる限りの不具合を出しつくすことを最大の目的としています。

そのため、単体テストで可能な限りの不具合を取り除くことができれば、後工程のテストで不具合が生じる可能性を大幅に減らすことができるでしょう。「結合テスト」「システムテスト」で生じる不具合は、すべて単体テストの不備に起因するといっても過言ではありません。

また、裏を返せば、結合テスト以降では「なぜ単体テストで不具合を見つけることができなかったのか」といった原因究明や、再発防止対策も並行して実施しなければならないため、本来のテスト業務に注力できなくなります。

(3)メリット

単体テストは、さきほどのウォーターフォール型の開発工程図からもわかりますが、実装直後に実施します。そのため、次のメリットを受けることができます。

①開発者がそのコードにより「どのように動くべき」なのかを明確に記憶に留めている時期に検証できる点
②テスト対象を他のプログラムから切り離して検証できる点

ヒトはエグハウスの忘却曲線で示されているように時間とともに急速に物事を忘れていきます。そのため、実装直後の記憶が新しい時期に実施することはキャッチアップの時間を抑えることができます。また、単体テストは他のプログラムと結合する前に行うため、機能ごとに徹底的に検証できます。

(4)方法

単体テストは、着目する対象により大きく次の2つの方法があります。

①テスト対象の内部構造に着目する「ホワイトボックステスト」
②テスト対象の入出力に着目する「ブラックボックステスト」

またテスト対象となるプログラムに入力データを渡す「ドライバ」や、テスト対象から出力データが渡される「スタブ」を利用して単体テストを実施することもあります。

(4-1)ホワイトボックステスト

ホワイトボックステストは、プログラムが想定通りに動作するかを確認するテストです。テスト対象の“内部”を意識し、どのような構造であるかを踏まえたテストケースを作ります。何をどのようにテストするかと言う「テスト項目」は、分岐条件やエラー時のメッセージ出力設定など、プログラム内部の詳細情報について記載されている『詳細設計書』をベースに作成されます。ホワイトボックステストは条件分岐や繰り返し処理、例外処理など、あらゆる事態に対して動作確認を行えます。

プログラム上の記載ミスや処理間違いによるエラーなど、単純なミスがないかを検証できますが、ベースとなる詳細設計書の内容が間違っている場合は、ホワイトボックステストで不具合を検証することができない、と言うデメリットもあります。

このように、プログラムの構造やロジック、制御の流れなどが正常か否かを検証するため、「作り手側のテスト」とも言われています。

(4-2)ブラックボックステスト

ブラックボックステストは、プログラムが要求仕様を満たしているかを確認するテストです。テスト対象の内部を意識せず“外部仕様”から、想定される入力やそれに対する出力結果を確認するテストケースを作成します。またテスト項目は、人の目に触れるプログラムの動作が記載されている『基本設計書』をベースに作成されるため、テスト結果は人間が合否判断しなければならないことも多くあります。

ブラックボックステストは性能の確認だけでなく、使い易さや分かり易いデザインかなど、ユーザーの目に見える範囲のテストも行うことからUI・UXの観点での確認も含んでいます。そのため「ユーザー側のテスト」とも言われます。

単体テストのテスト方法は「ホワイトボックステスト」と「ブラックボックステスト」の2種類があることは先に述べた通りですが、単体テストは、前提として「ホワイトボックス」と「ブラックボックス」両面のテスト観点が必要であり、その全パターンを確認する必要がある、と言うことが最も重要です。

最後に

今回はウォーターフォール型の単体テストを取り扱いましたが、私自身が未経験であるがうえ、調べたものを解釈しているため、内容に相違がある場合がありましたら、ご容赦ください。その際はコメントや編集リクエストいただけると幸いです。

次回予定

【🔰エンジニア対象】第3回未経験エンジニアによる業界用語説明(下流工程②)

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした