jcunit's blog

JCUnitの開発日誌(ログ)です。"その時点での"JCUnit作者の理解や考え、開発状況を日本語で書きます。

PICTや他のシステムとの比較

PICTというMicrosoftの製品があることをJaSSTで知り合った方から教えていただいた。
PICTについては以下で詳しく述べられているのだが、

http://msdn.microsoft.com/en-us/library/cc150619.aspx

世間で出回っている様々な製品が与えられた条件に対して、何件でAllpairのテストを出力するかを比較する表が掲載されていた。
(実はこれのおかげで、JCUnitが出力するテスト件数がどうも多すぎることも分かり、改良も行った)

私が実装したのはIPOと呼ばれる All-pair生成アルゴリズムだが、このアルゴリズムには三箇所ほど、実装のやり方によって生成されるテストケースの大きさや、生成に要する時間といったことに影響が生じるポイントがある。
以下の3つだ。

  1. 各因子をどういう順番で処理するか?
  2. 水平方向にテストケースを拡張するとき、選択すべき水準が複数あるときにどれを選ぶか?
  3. 垂直方向にテストケースを拡張するとき、どの水準を選んでも良い時にどれを選ぶか?

ちなみに、このアルゴリズムの詳細については"Foundations of Software Testing: Fundamental Algorithms and Techniques"( Aditya P. Mathur)という本の4.11に詳述されている。


最初の項目、因子の順序については、また改めて報告したい。
今回は、2つ目と3つ目について行った実験について。
今回はこの2つについて、都合3種類の方式を用意した。
選択すべき水準が複数ある・どれを選んでも良い時は以下のうちのどれかを行う。

  1. 最初に見つかったものを選ぶ。(Naive)
  2. Tripleをもっとも多く網羅するものを選ぶ。(Greedy)
  3. どれでもいいものの中で偏りがでないように、呼び出しごとにカウンタをインクリメントし、可能な候補の数で割った余りを用いて選ぶ。(Modulo)

これらのそれぞれと他システムとの比較も合わせて示した表が以下だ。

# Task JCUnit(Naive) JCUnit(Greedy) JCUnit(Modulo) AETG PairTest TConfig CTS Jenny DDA AllPairs PICT
1 3^4 9 9 9 9 9 9 9 11 ? 9 9
2 3^13 27 22 25 15 17 15 15 18 18 17 18
3 4^15 3^17 2^20 73 39 41 41 34 40 39 38 35 34 37
4 4^1 3^30 2^35 52 31 31 28 26 30 29 28 27 26 27
5 2^100 22 20 18 10 15 14 10 16 15 14 15
6 10^20 286 255 273 180 212 231 210 193 201 197 210

Naiveはいささか、他システムに比べテストケースが多い。Greedyは他システムに対してそれほど遜色がない。その一方で、#5では20分近くかかっている。これはたまらん。
「値が偏るから、垂直方向への拡張が増えるんじゃないの?」という単純な疑問を持ったので試してみたModuloが思いの他バランスがよい。

100件が1000件になるとさすがに管理が面倒なので辛いのだが、なんとかまあ、許容範囲と言える気もする。

もうちょっといろいろいじってみようっと。