dip Engineer Blog

Engineer Blog
ディップ株式会社のエンジニアによる技術ブログです。
弊社はバイトル・はたらこねっとなど様々なサービスを運営しています。

ウォーターフォール開発におけるテストについて

事業会社の開発工程におけるテストとは?

こんにちは! スマートフォンアプリ開発課でiOSアプリ開発をしている城戸健汰です! 今回は、現在僕が行っている「テスト」というものについて説明していきます。 僕もテストを始める前は、「テスト」ってなんだろう?単体テスト?結合テスト?総合テスト?何が違うんだろうと思っていました。

ですが現在上記のうちの「総合テスト」を進めている上で、開発工程の全体を学ぶ機会がありましたので、整理しながら説明していきたいと思います。 これを読んだ人は「テストって何?」という段階から「なるほど...」となるでしょう。是非見ていってください。

前提

テストの話をする前に、前提条件として最低2つの話をしなければなりません。

  • ウォーターフォール開発とは
  • V字モデルとは

以上の2点の話です。順番に解説していきます。

ウォーターフォール開発とは

ウォーターフォール開発とは、開発手法の1つです。 この開発手法は、僕が現在参画しているプロジェクトで採用されている開発手法です。 ウォーターフォール開発は「開発手順がシンプルで分かりやすい」という特徴があります。

大まかな手順としては、システムに搭載する機能や仕様を細かく定義してから開発をスタートさせ、 その後1つ1つの工程をしっかりと完了させながら行うという手順です。

メリットとしては、品質を担保したシステム開発を行いやすいスケジュールや進捗管理がしやすいという点が挙げられます。 デメリットは、開発が長期化しやすいことや、仕様や計画が変更しにくいという点が挙げられます。

ウォーターフォール開発の他に開発手法は数多くありますが、今回はそちらについては触れませんので是非調べてみてください。

V字モデルとは

f:id:kenta-kido:20220303140309j:plain
v字モデル
V字モデルは上記の画像のことを指します。 説明としては - V字の左側に、開発工程を上流工程から並べられている。 - V字の右側に、左の開発工程に対応したテスト工程を並べられている。 - V字の左右を見比べることで、実施されるテストがどの開発内容を検証するためのテストか、どの観点で行われるテストかを示している。

今回上記で紹介したV字モデルは、ウォーターフォール開発の開発工程そのものとなります。

V字モデルの概要の説明は以上となります。ここからはこのV字モデルの右側の"テスト"について1つ1つ説明していきます。

単体テスト

単体テストは、上記のV字モデルでもあるように、詳細設計においてのテストです。 単体テストは、プログラムが書かれた後に行われる最初のテストでもあります。

単体テストの目的と特徴

単体テストの目的としては、プログラムを1本ずつ個別に実行し、不具合を取り除くところにあります。

特徴としてはロジックの条件分岐などを網羅してテストを行わなければならないため、結合テストや総合テストに比べてテストケースが多くなる場合が多いです。 単体テストの代表的なものとしては

  • 条件網羅テスト
  • 境界値テスト
  • 異常値テスト

が挙げられます。興味のある方はぜひ調べてみてください。

結合テスト

結合テストは、単体テストを実施した後に行われるテストです。 また、V字モデルの基本設計の観点から行われるものです。

結合テストの目的と特徴

結合テストの目的は単体レベルで動作するようになったユニットを組み合わせて実際に動作するかどうかをテストします。 具体的には、データの受け渡しなどが正常に行われるか、データを渡すタイミングは適切かどうかなどを検証します。

単体テスト後の結合テストは、後に控えた「総合テスト」「受入テスト」の2つのテストレベルにも影響し、テスト実施の工数や品質に大きな影響を与えることになるので 結合テストは重要な立ち位置にいます。

例えば 結合テストで不具合があったにもかかわらずそのまま次の総合テストに行ってしまうと、不具合の発生箇所の特定が難しくなります。 結合テストで出た不具合は確認範囲が小さく、不具合発生場所の特定が容易ですので、結合テストを漏れなく行うことは品質担保においてかなり重要と言えますね。

結合テストの代表的なものとしては

  • 機能テスト
  • 疎通テスト
  • 性能テスト
  • 回帰テスト
  • セキュリティテスト
  • ユーザビリティテスト

などが挙げられます。こちらも興味のある方はぜひ調べてみてください。

総合テスト

総合テストとは実際に僕が最近行ったもので、受入テスト前のテストです。 V字モデルの要件定義の観点からテストを行います。

総合テストの目的と特徴

総合テストの目的は、要件を満たしているかの確認を行うことが目的です。 既存に完成されているプロダクトの新機能の追加などを行うプロジェクトの際の総合テストは、既存の機能が正しく動いているかどうかを確認します。

総合テストは、開発側が行う最後のテストになります。総合テストの後に行われる「受入テスト」は発注側の顧客や、品質を管理するチームに依頼をすることが多いようです。 「このシステムはちゃんと動いて、お客様の役に立てるかどうか」を全体的に確認するテストなので重要と言えます。 "作ったシステムの卒業テスト"と言われることもあるそうです。

エビデンスについて

テスト工程においてエビデンス(証明)というものがあります。 エビデンスとはその和訳の通り、自分がテストした項目がしっかり動いたという記録を残すためにあります。

もし管理者に「このテストどうだった?」と指摘された際にエビデンスを取っておくことをしていればそれがそのまま証明になります。 エビデンスには写真や動画や項目のチェックなどいろいろな形が考えられます。 品質を担保するためにもエビデンスというものを知っておくのもいいかもしれません。

まとめ

今回は、開発工程におけるテストについてお話ししました。 具体的には、単体テスト、結合テスト、総合テストについて説明しました。 3つのどのセクションにも「このテストは重要」と書いてあります。テスト観点が違うので、どのテストも非常に重要なテストとなってくることを理解していただければと思います。