Help us understand the problem. What is going on with this article?

ペアワイズ法を使ってテストケースを自動で削減する

More than 1 year has passed since last update.

どうもmiyachi(@_38ch)です。
あるSNSを開発していてテストをする場合に、よくある例として、どのデバイスでやるか、どのブラウザでやるか、どのログイン認証方法でやるかみたいな話が出てきます。

テストケースを決める因子としては、

  • デバイス:Mac, Windows, iPhone, iPad, Android
  • ブラウザ:Safari, Chrome, Firefox, IE
  • ログイン認証方法:Facebookログイン、Twitterログイン、Googleログイン、Instagramログイン

これだけで、全てのケースを網羅しようとすると、

デバイス数(5つ) x ブラウザ数(4つ) x ログイン認証方法(4つ) = 80通り

80通りもあるわけです。
まぁ頑張って手分けしたらできるけど、できればやりたくないレベル。

ペアワイズ法を使ってテストケースを圧倒的に少なくする

ペアワイズ法とは、簡単にいうと、「アプリのバグって基本的に、1つ、もしくは2つの因子によって引き起こされるよね。だから3つ以上因子があったとしても、すべての組み合わせ確認する必要ないよね」的な思想に基づくテストケース作成法です。

ただ、自力でペアワイズ法をすでにあるテストケースに適応するのは、ちょっと難しいので、Microsoftが公開しているオープンソースの「PICT」とういうツールを使いましょう。

以下のステップで導入できます。

$ git clone https://github.com/Microsoft/pict.git
$ cd pict/
$ make
$ sudo install -m 0755 pict /usr/local/bin/pict

これでpictコマンドが使えるようになったので、次はテストケースをpictが読めるように書いてあげましょう。書き方は超シンプルでこんな感じ。

デバイス : Mac,Windows,iPhone,iPad,Android
ブラウザ : Safari,Chrome,Firefox,IE
ログイン認証方法 : Facebookログイン,Twitterログイン,Googleログイン,Instagramログイン

これを.txtの拡張子で保存してあげる。

PICTにテストケースを削減してもらう

ではTerminalから先ほど、単純計算で80通りあったテストケースがどれくらい少なくなったのか見てみましょう。

実行

$ pict test_case.txt

結果

デバイス    ブラウザ    ログイン認証方法
Windows Firefox Facebookログイン
iPad    Safari  Twitterログイン
Android Chrome  Googleログイン
Windows IE  Instagramログイン
iPad    Firefox Googleログイン
iPhone  IE  Googleログイン
Windows Safari  Googleログイン
iPhone  Safari  Instagramログイン
iPad    IE  Facebookログイン
iPhone  Firefox Twitterログイン
Mac Safari  Facebookログイン
Android IE  Twitterログイン
Mac IE  Googleログイン
Mac Chrome  Twitterログイン
iPhone  Chrome  Facebookログイン
Android Firefox Instagramログイン
Windows Chrome  Twitterログイン
iPad    Chrome  Instagramログイン
Android Safari  Facebookログイン
Mac Firefox Instagramログイン

たったの20通り (1/4) に減っている!!

※ MacでIEとか組み合わせ的におかしいものは、条件書いて落とせるので詳細ググってみてください。

単純にケースが知りたい時は、/sをお尻につけて実行してあげましょう。

$ pict test_case.txt /s
    Combinations:   56
    Generated tests:20
    Generation time:0:00:00

それ本当に信頼できるのって方は、Microsoftが出してる論文読んでみてください。
Pairwise Testing in the Real World: Practical Extensions to Test-Case Scenarios

mitch0807
猫と銭湯が好きな文系出身若手エンジニアです。 大学ではコンピューターサイエンス学んでないので、お手柔らかにお願いします。
https://miyach.in
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away