基本的なテスト技法である「境界値分析」(Boundary-Value Analysis、BVA)についてのホワイトペーパーが面白いと聞いて、さっそく読んでみました。わずか7ページで読みやすいですし、基本的なコンセプトから誤解しやすいポイント、注意点などが具体例付きでまとめられていて、とてもいい内容だと思いました。
Research Compendium - International Software Testing Qualifications Board - Boundary Value Analysis According to the ISTQB® Foundation Level Syllabus (pdf)
第6章の「Dealing with seamless transitions」の例は、自分でしっかり考えたことのなかったものだったので、簡単に紹介してみます。
銀行の送金プログラムを例として、以下のような仕様を考えます。
取引の手数料は、取引金額の1%。ただし手数料の下限は1ユーロ。有効桁数は小数点2桁まで。
シンプルに考えると、「1%が1になる上限」である「100」が境界値になります。取引金額100ユーロまでは、手数料は固定の1ユーロだなと。100ユーロを超えると1%の計算も1ユーロを離れ、取引金額に比例していくと。
よって、以下の2つの「同値パーティション」が特定できたことになります。
- EP1: 取引金額 0.00ユーロ から 100.00ユーロ。手数料は1ユーロ固定。
- 上限の側のカバレッジアイテム(テストすべき入力)は、100.00、100.01。3値BVAの場合は加えて 99.99。
- EP2: 取引金額 100.00ユーロ以上。手数料は取引金額の1%。
- 下限の側のカバレッジアイテムは、100.01、100.00。3値BVAの場合は加えて 100.02。
さて、これで何も問題なさそうですが、これらのテストにおける出力を見てみましょう。
| 同値パーティション | 入力値 (取引金額) | 100ユーロまでの固定値 | 取引金額の1% | 出力値 (手数料) |
|---|---|---|---|---|
| EP1 | 99.99 | 1.00 | 1.00 | 1.00 |
| EP1 | 100.00 | 1.00 | 1.00 | 1.00 |
| EP2 | 100.01 | 1.00 | 1.00 | 1.00 |
| EP2 | 100.02 | 1.00 | 1.00 | 1.00 |
そう、この4つの入力値はすべて、「100ユーロまでの固定値」「取引金額の1%」が1ユーロになり、出力値がどちらの数字を「採用」したかがわからないのです。これでは、境界の実装が誤っていた場合に検知することができません。
このホワイトペーパーでは、データの変化(data transision)に応じた新しい同値パーティションを定義するとしています。
- EP1: 取引金額 0.00ユーロ から 99.49ユーロ。手数料は1ユーロ固定だが、取引金額の1%は1ユーロ以下である。
- EP2: 取引金額 99.50ユーロ 以上 100.49ユーロ 以下。取引金額の1%は1ユーロである。
- EP3: 取引金額 100.50ユーロ以上。取引金額の1%は1ユーロを超える。
先と同じ表を作ると、以下のようになります。
| 同値パーティション | 入力値 (取引金額) | 100ユーロまでの固定値 | 取引金額の1% | 出力値 (手数料) |
|---|---|---|---|---|
| EP1’ | 99.49 | 1.00 | 0.99 | 1.00 |
| EP2’ | 99.50 | 1.00 | 1.00 | 1.00 |
| EP2’ | 100.49 | 1.00 | 1.00 | 1.00 |
| EP3’ | 100.50 | 1.00 | 1.01 | 1.01 |
EP1’、EP2’、EP3’で、「取引金額の1%」が違っており、手数料が決まるロジックを確認できるようになりました。
テスト技法を勉強してけっこう長いですが、このようなケースについてあまり考えたことがなかったというのが正直なところです。
第7章の「Further practical considerations」にも興味深い話がありますので、「境界値分析なんて基本だぜ!」という方にも読んでいただきたいです。
