
テスト技法の種類をまとめる
業務でテスト設計を行うことになったのでテスト技法について学んでいきたいと思います。
1. なぜテスト技法を使うのか
テスト設計するときになぜテスト技法を使用するのか、それには以下の理由があります。
1.テストケースを効率よく作成するため
テスト設計を行う上で、考え得る全てのパターンをテストケースに落とし込み、実行できれば理想的ですが、全パターンを網羅するほど膨大な数のテストケースを、限られた予算と時間のなかで作成、実行するのは現実的ではありません。
仮に全てのパターンに対するテストケースを作成したとしても、ほとんど起こり得ないパターンも存在します。
また、全パターンのテストケースを網羅しようとすれば、貴重な工数や時間を浪費することにもなります。
そうした中で、効率的にテストケースを準備するためにテスト技法を活用します。
2.仕様を整理するため
仕様がきちんとまとまっていると有効なテストケースを設計しやすくなります。
しかし、開発工数の短縮や開発者の案件掛け持ち等で、実際の仕様が不明確なままテストケースを作成しなければならないこともあります。
そのような時にテスト技法を使うことで、仕様を整理しながらテストケースを作成することができます。
2. テスト技法の種類
テスト技法の種類は、大きく分けて下記の3つに分類されます。
・ブラックボックステスト技法
・ホワイトボックステスト技法
・経験ベースのテスト技法
以下にそれぞれの概要と各種類に含まれるテスト技法を紹介します。
2-1. 1.ブラックボックステスト技法
ブラックボックステスト技法ではモジュールの中身や作り(プログラムの構成と仕組み)を見ずに、インプットを処理した結果であるアウトプットを検証します。
内部構造を理解していなくても実行できるので、開発者以外の第三者が行うのが一般的です。
・同値分割法
正常に処理できる「有効同値」と、エラーとなる「無効同値」を使い、テストケースを設計する技法。
https://www.qbook.jp/column/1464.html
・境界値分析
同値クラスの境界に注目し、境界値を基にしてテストケースを設計する技法。※境界値とは、同値分割した領域の端、あるいは端のどちらか側で最小の増加的距離にある入力値または出力値のこと。

https://www.qbook.jp/column/646.html
・デシジョンテーブルテスト
テスト対象の条件と結果の組み合わせをデシジョンテーブルを使って整理し、各組み合わせを元にテストケースを導出するテスト技法。
https://shiftasia.com/ja/column/%E3%83%87%E3%82%B7%E3%82%B8%E3%83%A7%E3%83%B3%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB%EF%BC%88%E6%B1%BA%E5%AE%9A%E8%A1%A8%EF%BC%89%E3%81%A8%E3%81%AF/
・状態遷移テスト
状態遷移図をもとに、テストケースを設計する技法。
https://service.shiftinc.jp/column/4960/
・ユースケーステスト
ユースケースのシナリオをもとに。テストケースを設計する技法。※ユースケースとは、ユーザおよびシステムと、テスト対象となるシステム間の相互作用を記述したもの。
2-2. 2.ホワイトボックステスト技法
内部構造を理解した開発者によって行われます
・ステートメントテスト
コード内の実行可能なステートメントをテストすること。実行されたステートメント数を、テスト対象の実行可能なステートメントの合計数で除算することによって、カバレッジを計測する。
実行可能な命令文をすべてテストした場合に100%のカバレッジとなり、これらのカバレッジ指標を用いて、ソフトウェアの品質を評価することができる。

https://susakiworks.com/jstqb_04/
・デシジョンテスト
コード内の判定をテストし、実行したコードを判定結果に基づいて評価する手法。デシジョンテストは、条件分岐の網羅性を高めることにより、プログラムの品質を向上させることを目指す。
カバレッジは、テストにより実行した判定結果の数をテスト対象の判定結果の合計数で除算して計測する。

https://susakiworks.com/jstqb_04/
2-3. 3.経験ベースのテスト技法
仕様ベースおよび構造ベースのテスト技法といった体系的なテスト技法は使わずに、テスト担当者の能力、直感、過去の経験から習得した技術をベースにテストケースを作成する手法。
仕様や設定を見るだけでは難しいテストケースを作成できることがある点はメリットだが、テスト担当者のスキルや経験に大きく依存するため効果にバラツキがある。
・エラー推測
テスト担当者が経験に基づいてエラーが発生しそうな箇所を推測しテストケースを作成・実行する技法。
例:①数値の0→0による割り算でのエラーが起きる
②ヌル(null)→ヌルの値を参照して例外が発生する
③空白のリスト、要素数が1つのリスト→リストは複数の要素があることを前提としてコーディングしがち
④うるう年(2月29日)→特殊な日付
・探索的テスト
探索的テストは、仕様が十分に書かれておらず、テストケースを事前に設計できない場合に有効である。
また、スケジュール的な余裕がない場合に、テスト設計とテスト実行を同時並行的に行うことで、効率良くテストを進めることができる。
また、形式的なテスト技法でテスト設計を行ったあとに、それを補完する使い方をすることで、仕様漏れや仕様の誤りに基づく欠陥を検出することができる。
一方で仕様があいまいである場合に探索的テストを実施する場合、仕様を予想しながらテストを実行しなければならないため、実施するにはスキルや経験を必要とする。
探索テストは重大な欠陥を見つけるのに役立つが、スキルや経験に依存する点には注意する必要がある。
3. 最後に
学習を行って感じたことはテスト技法が思っていたよりたくさんあることに驚きました。
今回学んだことをテスト設計する際に意識して作成していきたいと思います。
最後まで、読んで頂きありがとうございました。