単体テストの実施方法を種類別にまとめてみる【再入門】
はじめに
各テストの概要と意識したいこと【再入門】では、単体テストの種類として「機能確認テスト」「制御フローテスト」「データフローテスト」の3つを紹介しました。
今回はこれらの実施方法についてまとめていきます。
こんな人におすすめ
- 単体テストについて知りたい
- 機能確認テストについて知りたい
- 制御フローテストについて知りたい
- データフローテストについて知りたい
機能確認テスト
機能確認テストは、詳細設計書通りに動くかを確認するテストです。
実施方法
- 実際にモジュールを動作させて、詳細設計書通りに動くかテストを行う。
- 結果を確かめる。
私が経験した現場では、詳細設計書の欄外に確認者、確認日、結果(OK/NG)、NGの場合の備考を記載する程度の簡素なものが多い印象です。
制御フローテスト
制御フローテストでは、モジュールを構成する要素である「命令文」「分岐経路」「条件」のいずれかに着目し、これらが全て実行されるかを確認します。
実施方法
- ソースコードを元に、フローチャートを作成する。
- カバレッジ基準(網羅したい要素)を決める。
ステートメントカバレッジ:命令文を網羅
デシジョンカバレッジ:分岐経路を網羅
複合条件カバレッジ:条件を網羅 - カバレッジ基準を網羅する経路を抽出する。
テストを効率に行うためにも、できるだけ少ない経路で網羅できるように抽出します。 - 抽出した経路を通るようにテストを行う。
3.で抽出した経路を通る入力値を指定して実際にモジュールを動作させます。 - 結果を確かめる。
基本的にはカバレッジ100%を目指します。
オンラインショップ販売を例に考えてみる
【オンラインショップ販売の仕様】
・初回購入で定期購入契約をした場合、次回1,000円OFFクーポンを付与する。
・商品5,000円以上購入、もしくはクレジットカード決済の場合、ポイントを2倍付与する。
《ステートメントカバレッジ(命令文網羅)の場合》
すべての命令文を最低1度は通れば良いので、経路は1つで網羅できる。
《デシジョンカバレッジ(分岐経路網羅)の場合》
2つの条件分岐とも分岐後の経路は2本のため、経路は2つで網羅できる。
《複合条件カバレッジ(条件網羅)の場合》
すべての条件パターンを満たすためには、経路は4つで網羅できる。
データフローテスト
データフローテストでは、ソフトウェアの中で使われているデータや変数が「定義→使用→消滅」の順に正しく処理されているかを確認します。
プログラミング言語によっては、明確に定義しなくてもデータを使用できる場合がありますが、これはプログラミング言語側で自動的にデータ型を識別し定義処理を追加してくれているだけで、定義が必要であることに変わりはありません。そのため、データフローテストではこのような場合も不具合として扱います。
実施方法
- ソースコードを元に、データフローを作成する。
- 問題と懸念事項を確認する。
宿泊予約システムを例に考えてみる
【見積計算モジュール】
(1)部屋タイプを選択する。
(2)プランが選択されていなければ(1)に戻る
(3)宿泊人数を入力する。
(4)宿泊人数が0の場合(3)に戻る。
(5)合計金額を計算する。
(6)計算結果を表示する。
《問題と懸念事項》
- 定義されているが使用されないsystemDate
- 未定義のまま使用されているtotal
さいごに
単体テストの具体的なイメージはつきましたでしょうか。
フローチャートやデータフローの作成は時間がかかりますが、論理構造・データ構造を視覚化して欠陥を確実に見つけていきましょう。
Discussion