概要
総合試験に触れる機会があるが経験の浅いというエンジニア向けに、「テスト技法」についてあらかじめ知っておくことで現在実施しているテストがどういった考えによってどういった目的で行われているかというのをより理解することにつながると思い、簡単にまとめようと思いました。
さまざまな技法についてざっとイメージを把握してくれたり、この技法についてもっと詳しく知りたいと思ってもらえたらありがたいです。
ホワイトボックステスト・ブラックボックステストの違い
・ホワイトボックステスト
プログラムの内部に重点をおいたテスト
作り手の目線で内部の処理(命令文や条件分岐など)を把握した上で、手法や網羅率を検討する。
単体試験と呼ばれる、部品・機能ごとの確認に使われることが多いです。
・ブラックボックステスト
プログラムの外部に重点をおいたテスト
ユーザー側の視点でシステムに触れ、入力した内容に対して出力される結果を確認する。
UI(ユーザーインターフェイス)の確認なども含まれており、結合試験のように全体の流れを確認する段階で使われることが多いです。
本稿で紹介する技法は全て「ブラックボックステスト」に分類される技法です。
また、技法の目的ごとで3つほどに分類でき、それぞれ下記のように呼ばれています。
・削減型
工数を考慮しつつテスト対象をなるべく少ないケースで実施できるように設計する。
・標的型
経験をベースにして、なるべくたくさんのバグを発見できるようにピンポイントに向けて設計する。
・網羅型
テスト対象の条件分岐・パターンを網羅するように設計する。
同値分割法
削除型
出力結果が同じになる入力値のグループを同値クラスといいます。
同値分割法は処理結果ごとに分けた同値クラスから、代表的な値をテストする技法です。
例:10〜19歳のみ適用できる割引があった場合
・無効な同値クラス:10歳未満
・有効な同値クラス:10歳以上、20歳未満
・無効な同値クラス:20歳以上
それぞれグループごとにランダムな値だけをテストすればよいので、その分下記のように効率よくケースを絞ることができます。
ケース1:6歳(割引が無効)
ケース2:18歳(割引が有効)
ケース3:87歳(割引が無効)
境界値分析
標的型
仕様条件の境界となる値とその隣の値に対してテストする技法です。
バクが混在してるであろう箇所をピンポイントでテストすることが目的となります。
有効な同値クラスの最小値と最大値が境界値となる為、上記の同値分割法で例に挙げた割引では[10歳]と[19歳]が境界値となります。
よって、「境界となる値とその隣の値」は[9歳]と[10歳]、[19歳]と[20歳]となります。
デシジョンテーブルテスト
網羅型
デシジョンテーブル(決定表)をもとに各組み合わせのケースを導出する技法です。
※デシジョンテーブルとは条件(入力)に対しその結果の動作(出力)を洗い出し、表形式にまとめたものです。
組み合わせ数が多いときは、その分リソースが十分に必要となります。圧縮は可能ですが対象の中身・処理を知らないとリスクがあり、スキル・経験が必要です。
状態遷移テスト
網羅型
同じ条件(入力)を実行しても常に同じ結果になるとは限らず、状態によって結果に違いが生じることがあります。
システムの状態が条件やイベントによって変化する状態遷移に着目したテストです。
有効な状態遷移が行われること、無効な状態遷移が行われないことを主に観点とします。
ユースケーステスト
網羅型
アクターとシステムのやり取りをまとめる事で、想定してないバグ、漏れが発見できます。
※アクターとは要件定義で設定されているユーザーや、システムを操作する管理者、対象システムを利用する外部システムなども含まれます。
いわゆるシナリオテストはユースケーステストより自由度の高いシナリオに基づき実行されます。
ペア構成テスト
削除型
パラメータが取りうる全ての組み合わせを網羅しようとすると、ケース数が膨大になってしまうことがあります。
一部のテストパターンを合理的な制限でしぼる手法で、2因子間の組み合わせを網羅しつつケースを絞ることができます。
ペアワイズ法のケースを作成する支援ツールなどを使用することが効果的です。
エラー推測
標的型
過去実際にバグが発生した事例から、ありがち、ありそうなバグを推測して実施することを言います。
しかし経験ベースのテストだけでは人的ミスになりかねません。
体系的な仕様・構築ベースのテストを設計した後、経験ベースの設計を組み込むのが望ましいです。
探索的テスト
標的型
事前にテストケースを作成せずに、経験ベースで実施する手法です。
ランダムに(適当に)検証を行う「モンキーテスト」と異なり、実施者の経験や知識への依存度が高いです。
網羅性が担保されにくいですが、準備などの時間が省かれスピードが速く、工数を削減できるなどのメリットがあります。
リスクベースドテスト
標的型
洗い出したリスクに重点をおいて、テストの優先順位を定める手法です。
顧客への影響度が高い、金銭の取り扱いに大きく関わるなど、基準は決まったものはなく各プロジェクトによってさまざまです。
主に参考にしたサイト
ホワイトボックステスト・ブラックボックステストについて
https://service.shiftinc.jp/column/4801/
デシジョンテーブルテストなど
https://www.veriserve.co.jp/gihoz/decision-table.html
経験ベースのテストケースなど
https://webrage.jp/techblog/testing_by_experience/