ソフトウェアの品質を学びまくる2.0

ソフトウェアの品質、テストなどについて学んだことを記録するブログです。旧ブログからゆっくり移行中です。http://blog.livedoor.jp/prjmng/

ドリル勉強会第6回、ペアワイズ法 - その1

 原因結果グラフ・原因流れ図・FL図、そして補習会に参加し、第6回の「ペアワイズ法」もぜひ出たかったのですが、あいにく都合が合わず。
 参加されるみなさんの実況&togetterを楽しみにしております!

勉強会の予習問題

 せっかくなので、予習問題だけでもやっておこうと思います。
第6回勉強会 予習問題
コーヒー、紅茶、お茶、オレンジジュースを購入できる紙コップ型自動販売機の組合せテスト設計をしなさい。条件は以下の通り。
  • カップは、普通サイズと、大サイズの2つを選択できる
    → 全ての飲み物で普通サイズ:80円、大サイズ100円とする
  • 砂糖について、普通、少なめ、多め、無しを選択可能
    → ただし、お茶とジュースは対象外
  • クリームについて、普通、少なめ、多め、無しを選択可能
    → ただし、お茶とジュースは対象外
  • お湯増量ボタンがある
    → ただし、ジュースは対象外
 ものすごく単純に考えると、
飲み物の種類4 * カップの種類2 * 砂糖の量の種類4 * クリームの量4 * お湯増量有無の種類2 = 256
という大量の組み合わせパターンがあります。こんなにジュースを飲むテストはつらい。
 この「カップの種類」などの条件を因子、「普通サイズ」「大サイズ」といった、因子のとる具体的な値を水準と呼ぶんでしたね。
 因子が10個、それぞれの因子が3つの水準を持っているとすると、組み合わせパターンは3^10 = 59,049。毎分1杯の飲み物を1日8時間飲み続けても、テスト工程が123日かかります。123日目でバグが発見された場合はプログラムを改修し、その後はリグレッション試験です。無理ですね。なので、組み合わせを減らそうぜ!ということになります。

組み合わせによって起こるバグの経験知

 某MLで紹介されていたNISTのセミナーの資料「Introduction to
Combinatorial Testing」
(googleDocs)によると、
  • 医療機器に関するリコールデータによると、組み合わせのバグのうちもっとも複雑なものは、4因子間の組み合わせ
  • より複雑なブラウザ・サーバのプログラムでも、せいぜい6因子間
だそう。たとえば5因子の組み合わせというのは、飲み物とカップの種類と砂糖の量とクリームの量とお湯の量をすべて指定して初めて出るというもの。こんなバグがたくさんあるのだとしたら、5因子の組み合わせは全部やらんとねってことになります。
 一方2因子なら、たとえば「砂糖多め、クリーム少なめ」を指定すると自動販売機が爆発した、といったものであり、飲み物の種類やお湯の量は問いません。なので、割と出やすい。
 ちなみにこの医療機器のケースでは、2因子の組み合わせだけで97%くらいのバグが出ています。「組み合わせの欠陥については90%くらい除去していれば、求められる品質を達成することができる」と判断するのであれば、2因子の組み合わせまでを網羅的に行うことで、コストを削減するという判断ができることになります。

どうやって減らすのか、なぜ減らしていいのか

 ここで例題に戻って
飲み物・・・コーヒー
カップ・・・普通
砂糖・・・普通
クリーム・・・普通
お湯・・・増量なし
という組み合わせを考えると。
 これは、5因子の組み合わせとしては所詮ただの1パターン。でも、2因子の組み合わせとしては、(コーヒー, カップ普通)、(砂糖普通, クリーム普通)、(カップ普通, お湯増量なし)という風に、5C2 = 10 個の組み合わせがパックされていることになります。
 ペアワイズ法では、この「パック」を全力で行うことで、全体的な組み合わせ数を減らします。
 ソフトウェアテスト技法ドリルによると、因子数nに対するテスト項目数のオーダーは、総当りだと2^n、2因子間の全組み合わせはn^2、直交表でn、ペアワイズでは√n。2水準の因子が100個あってもテストケースは16項目だそうで、それは確かにちょっとどうかと思いますが・・・。
ソフトウェアテスト技法ドリル―テスト設計の考え方と実際

ソフトウェアテスト技法ドリル―テスト設計の考え方と実際

 

  ちなみに、今回使うPictMasterでは、組み合わせを2因子以上にすることができます。高い信頼性が求められるソフトウェアでは、4因子・6因子として精度を高めるということも必要でしょう。

 勢い余って長くなったので、後半に続く・・・。