【詳細解説】システム開発の各テストフェーズにおけるテストの違いと種類

一般的なシステム開発では、ウォーターフォール型の開発手法を採用している企業や現場が数多くあります。この開発手法の流れは端的に言うと、「設計→プログラミング→テスト」の流れとなっています。開発の流れは理解しているけど、以下のことに疑問を持ったことはないでしょうか?

  • 「フェーズごとにテストを行っているけど、違いはなに?」
  • 「テストは正直面倒くさい。一回でいい気がする。」

そこで今回は各テストフェーズにおける違いについてご紹介いたします。

フェーズごとにテストを行う理由や各フェーズでどのようなテストをするのか解説いたします。フェーズごとに解説を行うため、全2回にわたって解説いたします。

システム開発の各テストフェーズにおけるテストの違いと種類

システム開発の各テストフェーズにおけるテストの違いと種類

プログラムは人の手で作られるため、必ずバグが含まれます。
テスト工程は誤って混入したバグを取り除くために、必要不可欠です。

なぜフェーズごとにテストをするのか

各フェーズにおけるテストの違いを解説する前に、まずこの章ではフェーズごとにテストを実施する理由を改めて説明いたします。

結論から言えば、フェーズごとにテストを行うのは目的が異なるからです。

業務システムの運用テストとは?

業務システムの運用テストとは?

例えば、開発直後に行う単体テストと終盤に行うシステムテストでは目的が異なります。
前者は各プログラムのフロー分岐や命令処理の確認など、内部の細かいバグを確認しています。後者は本番の運用と同様にシステムを利用してみて、運用に支障がないかを確認しています。
見つけたいバグの違いが、フェーズごとにテストを行う理由となっているとも言えます。

単体テストとは何か?

前章ではフェーズごとにテストを行う理由をご紹介しました。
ここからは具体的に各フェーズにおけるテストの目的やテスト内容を解説いたします。
まずは単体テストから説明いたします。

単体テストとは文字どおり、モジュールやプログラム単体を確認するテストになります。
プログラム内部に注目しているため、ホワイトボックステストに分類されます。
単体テストでは主に制御フローテストとデータフローテストが実施されます。

単体テスト

単体テスト

テストの目的は詳細設計書やプログラム設計書どおりに、モジュールやプログラムが動作するかを確認することです。コーディングミスによる分岐誤りや間違った命令がないかを
確認します。
テスト実施者は基本的にコーディングしたプログラマー自身が実施します。

① 制御フローテスト:

制御フローテストとは、コーディングしたプログラムの分岐処理や命令を確認するテストです。プログラム内は数多くの分岐があり、条件によって様々なルートを通ります。また分岐後に行う命令処理も当然異なります。
「条件」「分岐」「分岐後の命令」を確認するのが、制御フローテストになります。

プログラムの複雑さによっては、制御フローテストは大変労力のかかるテストになります。
そのため、制御フローテストには粒度が存在しています。
「ステートメントカバレッジ」「デシジョンカバレッジ」「複合条件カバレッジ」です。
粒度が一番荒いのが「ステートメントカバレッジ」、一番細かく行うのが「複合条件カバレッジ」となります。

② データフローテスト:

データフローテストとは、主にプログラムの内で定義した変数が適切に使用されているかを確認するテストです。
プログラム内では数多くの変数や固定値が宣言・使用されています。データフローテストでは宣言した変数や固定値が使用されているかを確認しています。
近年ではプログラミング用のツールにデータフロー処理が実装されており、ツール側が発見してくれるケースがほとんどです。

結合テストとは何か?

次に結合テストにおける目的や内容について解説いたします。

結合テストとは

結合テストとは

結合テストとは、モジュールやプログラム単体を組み合わせて確認するテストになります。
詳細設計書単位のモジュールを組み合わせて実施します。モジュール同士を組み合わせた場合に、データの送受信にエラーがないかを確認しています。

例えばモジュールAとBがあり、モジュールA→Bの順に動作するシステムと仮定します。
モジュールAからBに向けて送信されるデータが、モジュールBに合わない場合はシステムが止まってしまいます。
郵便ポストには宅配便が入らないように、想定していないデータは受け取ることができないのです。
こうした各モジュール間の関係性を確認するのが、結合テストになります。

総合テスト(Comprehensive-Testing)

テスト目的は各モジュールやプログラムを組み合わせて、データの送受信に不備がないかを確認することです。単体テストがいくら完璧でも、想定していないデータがインプットされてはシステムが動かなくなります。

テスト実施者はコーディングしたプログラマー、もしくは開発チームの第三者が行います。

まとめ

いかがでしたでしょうか?
今回は各フェーズにおけるテストの違いについてご紹介しました。
改めて振り返っていきましょう。

最初はフェーズごとにテストが異なる理由をご紹介しました。
目的の違いが、フェーズごとのテストの違いを生み出しています。

次に単体テストとはどのようなテストか、またテストの目的をご紹介しました。
単体テストは設計書に沿って作成されているかを確認する、プログラミング内部に注目したテストとなります。

最後は結合テストがどのようなテストか、またテストの目的は何かをご紹介しました。
結合テストではモジュール同士を組み合わせた場合に、データの送受信にエラーがないかを確認しています。

冒頭でもご紹介したとおり、テスト工程は誤って混入したバグを取り除くために必要不可欠です。各フェーズにおけるテストの違いを理解し、適切にテストを実施しましょう。

無料相談・お問い合わせ
・見積もりの相談 (システム開発の費用を概算で知りたい方?)
・企画段階からの相談 (こんなアプリの開発できますか?)
・オフショア開発に不安のある方 (オフショア開発って何ですか?)
・ベトナムやONETECHに興味のある方 (ベトナムでビジネスしたいのですが)
・エンジニア人材不足にお悩みの方 (エンジニアを採用したいのですが?)
ご相談やお見積もりは全て無料で対応いたします。

下記入力フォームに入力し、送信をお願いいたします。後日、担当者から折り返しご連絡させていただきます。また、ご送信頂いた内容によっては、ご回答にお時間がかかる場合がございますのでご了承ください。

返信を残す

無料相談・お問い合わせ
・見積もりの相談 (システム開発の費用を概算で知りたい方?)
・企画段階からの相談 (こんなアプリの開発できますか?)
・オフショア開発に不安のある方 (オフショア開発って何ですか?)
・ベトナムやONETECHに興味のある方 (ベトナムでビジネスしたいのですが)
・エンジニア人材不足にお悩みの方 (エンジニアを採用したいのですが?)
ご相談やお見積もりは全て無料で対応いたします。

下記入力フォームに入力し、送信をお願いいたします。後日、担当者から折り返しご連絡させていただきます。また、ご送信頂いた内容によっては、ご回答にお時間がかかる場合がございますのでご了承ください。