💯

単体テストの実施方法を種類別にまとめてみる【再入門】

2024/05/18に公開

はじめに

各テストの概要と意識したいこと【再入門】では、単体テストの種類として「機能確認テスト」「制御フローテスト」「データフローテスト」の3つを紹介しました。
今回はこれらの実施方法についてまとめていきます。

こんな人におすすめ

  • 単体テストについて知りたい
  • 機能確認テストについて知りたい
  • 制御フローテストについて知りたい
  • データフローテストについて知りたい

機能確認テスト

機能確認テストは、詳細設計書通りに動くかを確認するテストです。

実施方法

  1. 実際にモジュールを動作させて、詳細設計書通りに動くかテストを行う。
  2. 結果を確かめる。
    私が経験した現場では、詳細設計書の欄外に確認者、確認日、結果(OK/NG)、NGの場合の備考を記載する程度の簡素なものが多い印象です。

制御フローテスト

制御フローテストでは、モジュールを構成する要素である「命令文」「分岐経路」「条件」のいずれかに着目し、これらが全て実行されるかを確認します。

実施方法

  1. ソースコードを元に、フローチャートを作成する。
  2. カバレッジ基準(網羅したい要素)を決める。
    ステートメントカバレッジ:命令文を網羅
    デシジョンカバレッジ:分岐経路を網羅
    複合条件カバレッジ:条件を網羅
  3. カバレッジ基準を網羅する経路を抽出する。
    テストを効率に行うためにも、できるだけ少ない経路で網羅できるように抽出します。
  4. 抽出した経路を通るようにテストを行う。
    3.で抽出した経路を通る入力値を指定して実際にモジュールを動作させます。
  5. 結果を確かめる。
    基本的にはカバレッジ100%を目指します。

オンラインショップ販売を例に考えてみる

【オンラインショップ販売の仕様】
・初回購入で定期購入契約をした場合、次回1,000円OFFクーポンを付与する。
・商品5,000円以上購入、もしくはクレジットカード決済の場合、ポイントを2倍付与する。

《ステートメントカバレッジ(命令文網羅)の場合》
すべての命令文を最低1度は通れば良いので、経路は1つで網羅できる。
ステートメントカバレッジ

《デシジョンカバレッジ(分岐経路網羅)の場合》
2つの条件分岐とも分岐後の経路は2本のため、経路は2つで網羅できる。
デシジョンカバレッジ

《複合条件カバレッジ(条件網羅)の場合》
すべての条件パターンを満たすためには、経路は4つで網羅できる。
複合条件カバレッジ

データフローテスト

データフローテストでは、ソフトウェアの中で使われているデータや変数が「定義→使用→消滅」の順に正しく処理されているかを確認します。
プログラミング言語によっては、明確に定義しなくてもデータを使用できる場合がありますが、これはプログラミング言語側で自動的にデータ型を識別し定義処理を追加してくれているだけで、定義が必要であることに変わりはありません。そのため、データフローテストではこのような場合も不具合として扱います。

実施方法

  1. ソースコードを元に、データフローを作成する。
  2. 問題と懸念事項を確認する。

宿泊予約システムを例に考えてみる

【見積計算モジュール】
(1)部屋タイプを選択する。
(2)プランが選択されていなければ(1)に戻る
(3)宿泊人数を入力する。
(4)宿泊人数が0の場合(3)に戻る。
(5)合計金額を計算する。
(6)計算結果を表示する。

《問題と懸念事項》
データフロー

  • 定義されているが使用されないsystemDate
  • 未定義のまま使用されているtotal

さいごに

単体テストの具体的なイメージはつきましたでしょうか。
フローチャートやデータフローの作成は時間がかかりますが、論理構造・データ構造を視覚化して欠陥を確実に見つけていきましょう。

Discussion