はじめに
こんにちは。アメリカで独学でエンジニアを目指している者です。
現在はRailsを勉強しているのですが、並行してソフトウェアテスト技法も学ぶことで、Railsチュートリアルの理解が深まるのではないかと考え、テスト技法の勉強を始めました。
今回学んだドメイン分析テストについて、記憶が薄れないうちに簡単にまとめておきたいと思います。
ちなみに、テスト技法はUdemyで勉強しています。とても分かりやすいので、テスト技法を勉強したいと思う方はぜひ見てみてください。
ドメイン分析テスト
ドメイン分析テストとは、複数の条件式が存在する場合に、条件漏れを防ぐためのテスト手法です。
この手法では、以下の3つのポイントを利用してテストケースを算出します。
- on:境界上の値
- off:境界のすぐ隣の値
- in:範囲内の任意の値
- out(参考): 範囲外の値
ポイント名 | 概要 | a >=20 | a>20 |
---|---|---|---|
on | 境界上の点 | 20 | 20 |
off | 境界に隣接する点(境界上の点を除く) | 19 | 21 |
in | on/off 以外のドメインの内側 | 25など | 25など |
out | on/off 以外のドメインの外側 | 15など | 15など |
ここで注意すべき点は、onは条件を満たす境界上の値である必要があるということです。
例えば、a > 20
の場合、on は境界値である必要があり on =20
ですが、この値はa >20
の範囲外になります
したがって、off の値を選ぶ際には、境界の内側に入るようにoff = 21
と選択する必要があります
ドメイン分析テストでは、この on, off, in の3つ を使用してテストケースを設計します。
ドメイン分析テストではこの中のon, off, inの3つを使用することになります。
テストは境界値にバグが潜みやすいのでon, offが使われるのはわかるとしてもoutではなくinが採用されている理由が不明ですよね。これについて例題を見ながら説明します。
例えば以下の例題があるとします
if x >= 5 && x + y > 12
# 処理A
else
# 処理B
end
この場合について、以下のようなドメインテストマトリックスという表を書く必要があります
変数 | 条件 | ポイント | 1 | 2 | 3 | 4 |
---|---|---|---|---|---|---|
x | x >= 5 | on | 5 | |||
off | 4 | |||||
in | 6 | 6 | ||||
x + y | x + y > 12 | on | 12 | |||
off | 13 | |||||
in | 15 | 15 | ||||
期待される結果 | A | B | A | B |
この表を見ると分かるように、変数 x の on/off を検証している間は、x + y の値を in に固定しています。
もし out を使用してしまうと、要件を満たさない値が含まれてしまい、正しくテストができなくなってしまいます。
そのため、on, off, in の3種類を使うことで、効率的に境界値をテストできるのです。
ドメイン分析テストの本質
ここで気づいた方もいるかもしれませんが、ドメイン分析テストは、複数の条件がある場合に「一方の条件を in で固定し、もう一方の境界値をテストする」という手法です。
これを理解すれば、複雑に考えずにスムーズに適用できるようになります。
最終的に、ドメインテストマトリックスを書くことで、4つのテストケースだけで網羅的にテストできると分かりました。
まとめ
本記事では ドメイン分析テスト について解説しました。
この手法は境界値テストの延長線上にあるテスト手法であり、以下のようなケースで有効です。
- 境界値テストを実施しようとしたが、条件が複数あるため、どのようにテストすればいいか分からないとき
- 複数の条件を組み合わせてテストケースを網羅したいとき
実際にテストを設計する際には、ドメインテストマトリックスを作成し、on, off, in の3種類をうまく使い分けることで、少ないテストケースで効率的にバグを見つけることができます。