PICTや他のシステムとの比較
PICTというMicrosoftの製品があることをJaSSTで知り合った方から教えていただいた。
PICTについては以下で詳しく述べられているのだが、
http://msdn.microsoft.com/en-us/library/cc150619.aspx
世間で出回っている様々な製品が与えられた条件に対して、何件でAllpairのテストを出力するかを比較する表が掲載されていた。
(実はこれのおかげで、JCUnitが出力するテスト件数がどうも多すぎることも分かり、改良も行った)
私が実装したのはIPOと呼ばれる All-pair生成アルゴリズムだが、このアルゴリズムには三箇所ほど、実装のやり方によって生成されるテストケースの大きさや、生成に要する時間といったことに影響が生じるポイントがある。
以下の3つだ。
- 各因子をどういう順番で処理するか?
- 水平方向にテストケースを拡張するとき、選択すべき水準が複数あるときにどれを選ぶか?
- 垂直方向にテストケースを拡張するとき、どの水準を選んでも良い時にどれを選ぶか?
ちなみに、このアルゴリズムの詳細については"Foundations of Software Testing: Fundamental Algorithms and Techniques"( Aditya P. Mathur)という本の4.11に詳述されている。
最初の項目、因子の順序については、また改めて報告したい。
今回は、2つ目と3つ目について行った実験について。
今回はこの2つについて、都合3種類の方式を用意した。
選択すべき水準が複数ある・どれを選んでも良い時は以下のうちのどれかを行う。
- 最初に見つかったものを選ぶ。(Naive)
- Tripleをもっとも多く網羅するものを選ぶ。(Greedy)
- どれでもいいものの中で偏りがでないように、呼び出しごとにカウンタをインクリメントし、可能な候補の数で割った余りを用いて選ぶ。(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件になるとさすがに管理が面倒なので辛いのだが、なんとかまあ、許容範囲と言える気もする。
もうちょっといろいろいじってみようっと。