アプリ開発やサイト制作のスマホ端末実機検証・テスト-Remote TestKit

テスト設計技法の紹介(2):削減型・標的型のブラックボックス型技法

削減型・標的型のブラックボックステスト技法を紹介します。
前回はテスト設計技法の導入として、技法の分類について解説をしました。今回から4回分は具体的な各技法の解説を行います。まず初回は削減型・標的型のブラックボックステスト技法を紹介します。

1. 紹介する技法

今回紹介する技法の名前と分類、概要を以下に挙げます。

同値分割法 境界値分析 All-pair法
分類 削減型のブラックボックステスト技法 標的型のブラックボックステスト技法 削減型のブラックボックステスト技法
概要 ひとつの因子を「同値クラス」と呼ばれる範囲に排他的に分割し、各クラスから代表的な値をひとつだけ実際の入力とする技法。 同値分割法とセットで用いられる。ある因子の2つの同値クラスでの境界となる値について、潜在バグである可能性が高いと考え、その値を実際の入力とする技法。 複数の因子による組合せを考える「組合せテスト技法」のひとつ。3つ以上の入力要素がある際、任意である2つの入力要素についてのみ組み合わせを網羅する技法。

2. 同値分割法

2.1 考え方

同値分割法とは、システムの振る舞いに影響をあたえる因子(入力要素や出力要素)のひとつについて、その因子を同じ性質をもつ範囲に分割するテスト設計技法 です。同値クラスに分割できたら、各クラスからは代表的な値をひとつだけ実際の入力値にします。そうすることで、なるべく少ない数で、すべての性質を網羅するような入力値のセットを設計することが可能になります。

同値分割法はひとつの因子に着目する技法ですが、実在するシステムの振る舞いを決定する因子がひとつのみであることは稀で、たいていは複数の因子が複雑に作 用しあいます。その際は複数の因子を同時に扱う「組合せテスト」や「ドメインテスト」などの技法を用いる必要がありますが、いずれにせよまずはひとつずつ の因子を個別に考える必要があります。そのため、同値分割法は数ある設計技法のなかでも、最も基礎的な技法であると言えます。

2.2 具体例

文字だけの説明ではイメージが湧きにくいので、簡単な例題を用いて同値分割法を解説するため以下のような仕様を考えます。

  • 0以上100未満の整数を受け取り、その整数を出力する。
  • そうでない値が入力された場合はエラーとする。

2.2.1 同値クラスの分割

この仕様は以下のように、数直線上に3つの同値クラスの分割を表現することができます。

同値クラスの分割

なお、実はこの例題の仕様は曖昧であり、「そうでない値」はもしかしたら数字以外の文字列を受け取るかもしれません。そうすると話は数直線上のみでは表現しきれないものとなりますが、ここでは簡潔に説明するため、数字のみを受け付けるものとして考えます。

2.2.2 代表値の決定

同値クラスの分割ができたら、あとは各クラスから代表的な値をひとつずつ決定するのみです。たとえば以下のような値を選び方が考えられます。

  • 有効クラス①:50
  • 無効クラス②:-100
  • 無効クラス③:200

何をもって「代表的」とするかは設計者の主観に頼ることになりますが、代表値の選び方によってテストの質が変わることはあまりないため、ここでは議論の対象とはしません。

2.3 注意点

同値分割法を扱ううえで一番の注意点は、「同値クラスの分割の仕方に、唯一の正解があるわけではない」ことです。逆に言えば同じ仕様でも、観点や切り口によってさまざまな分割の仕方が考えられ、どれが正しい正しくないという議論にはあまり意味がないのです。

簡単な例ではありますが、「3の倍数か5の倍数ならOK、そうでなければNG」という仕様を考えたとき、以下の2通りの分割が考えられます。

  • 「5の倍数ではない3の倍数」「3の倍数ではない5の倍数」「3の倍数でありかつ5の倍数」「3の倍数でも5の倍数でもない数」の4つ同値クラスに分割
  • 「3の倍数もしくは5の倍数」「3の倍数でも5の倍数でもない数」の2つの同値クラスに分割

前者はより細かい粒度での分割、後者は粗い粒度での分割であり、どちらも正しい同値クラスの分割です。実際のテストの際は、テスト目的やテストレベルに応じてより妥当な方を選びます。

なお、この例のように粒度によって分割の仕方が変わる場合、粒度を粗くして複数の同値クラスをまとめる行為を「ズームアウト」、逆に粒度を細かくしてひとつの同値クラスをさらに細かい同値クラスに分割する行為を「ズームイン」と呼びます。

3. 境界値分析

3.1 考え方

境界値分析は同値分割法とセットで用いられ、2つの同値クラス間の「境界」に着目するテスト設計技法です。プログラミングを勉強しはじめた当初、if文の不等号ミスをした経験がある方も多いと思いますが、まさにそういったバグをピンポイントで発見するためのテスト設計が境界値分析になります。

3.2 具体例

同値分割法と同じ例題について考えてみましょう。さきほど示した同値クラスの分割例では3つの同値クラスができ、2つのクラス間境界が存在します。また、そこに対して境界値分析を適用すると以下のようになります。

同値クラスの分割

3.3 注意点

境界値分析において注意すべきは、仕様に明記されていない境界値をどこにとるかという点です。上記の例であれば「0以上」という仕様に対して0はすぐ思いつきますが、もう片方を-1ではなく1にしてしまうと②の無効クラスからは境界値が挙がらないため、バグを見逃してしまう可能性が高くなってしまいます。この例は単純ですが、実際に境界値分析を扱う場合はかなり複雑な場合が多いので、その際にはしっかりと「ひとつの同値クラスからは必ずひとつ(以上)境界値を抽出する」ことを念頭におきましょう。

4. All-pair法

4.1 考え方

ここまで同値分割法と境界値分析を解説してきました。これらはひとつの因子に着目した技法ですが、複数の因子を組み合わせて考える必要がある場合にどうするべきか。その問題に対する解説として、組み合わせテスト技法のひとつであるAll-pair法を紹介します。

組み合わせテスト技法にはさまざまなものがあります。基本的な考え方はどの技法も共通で、3つ以上の因子を組合せる場合、全組み合わせを作成すると数が膨大になってしまうため、すべての2因子間の組み合わせのみ網羅するというものです(イメージしにくい表現かもしれませんが、次節で具体例を紹介します)。これは「たいてのバグは高々2因子の不慮な組み合わせによって発生する」という仮説にたって生まれたアイデアです。

ただし、そういった組み合わせはひとつに定まるものではなく、いろいろなパターンのものが作成できます。代表的な作り方として、以下のものが挙げられます。

直交表(を用いる技法) All-pair法
分類 2因子間の組み合わせを網羅しつつ、3つ以上の因子の組み合わせについてもなるべく偏りがないように作る技法。 直交表とは違い、3つ以上の因子の組み合わせについては考慮せず、なるべく組み合わせ数を少なくする技法。禁則処理も可能。

直交表はとても有用な技法ですが、実際に適用する際の手順が複雑なため、この連載ではツールを活用することで比較的手軽に適用可能なAll-pair法に焦点をしぼって解説をします。

なお、先ほど組み合わせテストは2因子間の組み合わせのみにフォーカスすると説明しましたが、正確にはAll-pair法は3因子以上の組み合わせを網羅することを可能です。すなわち「5因子中、すべての3因子間の組み合わせは網羅し、4因子以上の組み合わせの網羅性は考慮しない」というようなことを実現することも可能です。ただし、ここでは簡単のため、次節の具体例では2因子間の組み合わせの網羅についてのみ扱います。

4.2 具体例

以下のようなWebアプリケーションのテスト環境に関する例題を考えましょう。

  • 対応OS:WindowsXP, WindowsVista, Windows7
  • 対応ブラウザ:IE8, Firefox17
  • 解像度:800×600, 1024×768

単純に考えると、この例題では「対応OS」「対応ブラウザ」「解像度」の3つの因子の組み合わせは全部で3 * 2 * 2 = 12通りとなります。しかしこれら全ての環境についてテストを実施するのは非常に大変です。そこで、この例題に対してAll-pair法を適用すると、組合せは以下の6通りになり、組合せ数は半減します。

対応OS 対応ブラウザ 解像度
1 WindowsXP Firefox17 1024×768
2 WindowsXP IE8 1024×768
3 Windows7 Firefox17 1024×768
4 WindowsVista IE8 1024×768
5 WindowsVista Firefox17 1024×768
6 Windows7 IE8 1024×768

この6通りの組み合わせは、すべての2因子間の組み合わせを網羅しています。たとえば「対応OS」と「対応ブラウザ」に着目しましょう。

対応OS 対応ブラウザ
1 WindowsXP Firefox17
2 WindowsXP IE8
3 Windows7 Firefox17
4 WindowsVista IE8
5 WindowsVista Firefox17
6 Windows7 IE8

「WindowsXP」に対して「Firefox17」と「IE8」が組み合わさっており、「WindowsVista」「Windows7」についても同様のことが言えます。次に因子を「対応ブラウザ」と「解像度」にしぼって見てみましょう。

対応ブラウザ 解像度
1 Firefox17 1024×768
2 IE8 800×600
3 Firefox17 800×600
4 IE8 1024×768
5 Firefox17 800×600
6 IE8 1024×768

やはり、組み合わせは網羅されています(対応ブラウザと解像度は2 * 2 = 4通りの組み合わせしかあり得ませんので、この場合は重複も出ます)。因子を「対応OS」と「解像度」にした場合も同様です。

しかし、この6通りの組み合わせの中には例えば「WindowsXP」「Firefox17」「800×600」という組み合わせは存在しません。すなわち、すべての2因子間の組み合わせは網羅されていますが、3因子間の組み合わせについては網羅されてない、ということです。そのかわり組み合わせの数を約半分にすることができるというのがAll-pair法(および組み合わせテスト技法)の特徴です。

4.3 注意点

上記の例題のような単純な場合は比較的簡単に組み合わせを作成できますが、因子数や水準(因子の取りうる値)数が増えるととても人手では扱えなくなります。そこで、実際の開発ではAll-pair法を適用する場合、ツールを用いて自動化をすることが推奨されます。

All-pairを実装したツールで現在もっともよく使われているもののひとつがAll-pair法による組合せ生成エンジンであるPICTと、そのPICTをExcelから利用可能にしたPictMasterです。これらの使い方については本記事の最後に参考文献を掲載しているので、ぜひご参照ください。

今回は削減型・標的型のブラックボックス型技法として、同値分割法、境界値分析、All-pair法の3つのテスト設計技法を紹介しました。どれも活用シーンの多い重要な技法ですので、日頃の業務で活用できるものがあればぜひトライしてみてください。

次回は網羅型のブラックボックス型技法について解説を行います。

参考文献:
テスト技術者資格制度 Foundation Level シラバス 日本語版
© International Software Testing Qualifications Board VER2011
© 日本語翻訳版Japan Software Testing Qualifications Board Version 2011.J02

テスト技術者資格制度 Advanced Level シラバス 日本語版
© International Software Testing Qualifications Board VER2007
© 日本語翻訳版Japan Software Testing Qualifications Board Version 2007.J03

All-pair法自動化ツールの解説「テスト設計の自動化(1)組み合わせテスト支援ツール」
http://itpro.nikkeibp.co.jp/article/COLUMN/20121106/435221/
© 1995-2012 Nikkei Business Publications, Inc.

執筆者プロフィール みけねこ

某IT企業勤務。入社以来B2B、B2C系のWebシステムの開発やテストに従事。現在は社内の開発支援ツールの開発や、テスト工程も含めた標準開発プロセスの整備を担当。興味のある分野は振る舞い駆動開発とテストコードの自動生成。