鉄道の調べ  旅先料理の調べ  ビールコレクション

直交表探索クラウド(直交表の調べ)

JavaApplet で作った「直交表探索」のプログラムです。 ウェブ上でクリックひとつで直交表が生成できます! 無料の直交表作成ツールとしてお使いください。

直交表探索クラウド (powered by JavaApplet/swing)

この直交表探索クラウドは、実験回数、因子数、水準数と強さを設定して、それを満たす直交表を探索します。

このプログラムでは直交表を G行列経由で探索するアルゴリズムを採用しているため、 水準数はすべて同じで、素数か素数のべき乗の範囲で探します。

パラメータ例と試行回数:
( 9, 4, 3, 2) 157回目で発見
(16, 8, 2, 3) 2557095回で発見

直交表とは

直交表とは2次元の行列で、任意の列を(強さ)個選択して、選択した列の行毎の組を取り出したとき、 その要素の組み合わせが均衡して出現しているものです。
実際の例として、以下の行列を見てください。

例. 実験回数8個、因子4個、水準数2、強さ3の直交表
0 0 0 0 
1 0 0 1 
1 0 1 0 
0 0 1 1 
1 1 0 0 
0 1 0 1 
0 1 1 0 
1 1 1 1 

これはどの3列を取っても、その行の要素の組は、(0 0 0), (0 0 1), ..., (1 1 0), (1 1 1)の が均衡して出現しています。確認してみてください。

直交表の使い方

実験計画法や品質工学

直交表はどこに使うのでしょうか。
本来的な使い方は実験計画法や品質工学で使います。 品質工学ではタグチメソッドとして有名です。 ここではソフトウェアテストでの使い方を紹介します。

ソフトウェアテスト

ソフトウェアテストに直交表を使います。

それでは、ソフトウェアテストにどのように、この直交表を使うのでしょうか?
直交表を使う目的は、テストの効率化、テストコストの削減です。 もちろん、闇雲に効率化するのではなく、ある網羅性を保証してコストを低減することを目的としています。

この直交表では、どのような網羅性をソフトウェアテストで保証するのでしょうか?
これは「テストケースの入力として、テスト対象(この個数が因数)の値(この種類数が水準数)で関係(この関係する種類数が強さ)する組み合わせが均衡に出現する」という網羅性です。
この網羅性がソフトウェアテストにおいて、ちょうどいいのか、それとも弱すぎるのか、または強すぎるのかは、分かりません。

直交表はこのソフトウェアテストの網羅性を保証する低コストな方法を与えることができます。 ソフトウェアテストと直交表の関係は、上記の括弧書きで書いたように、直交表で言う「強さ」は上記の関係数であり、「水準数」は値の種類数であり、「因子」はテスト対象の種類数です。 そして「サイズ」または「実験回数」が試験項目数になります。

例えば、テストケースの入力として、相性診断システムを考えます。 性別、年齢、身長、体重、年収、趣味、家族構成、夢、希望、特技・・・などの各種の入力があります。この種類数が因子になります。 年齢で年上、年下、同年代といった値の種類数が水準数となります。 趣味と夢、希望、特技そして年収が同時にテストに関係していると思えば、これらの個数が強さになります。

直交表に関する誤解

多くの教科書やサイトで紹介されている直交表は強さを2に限定している直交表が多く、網羅性を制限しています。 例えば、L4, L8, L18などと書かれている直交表は強さ2に限定した制限された直交表です。 これらの直交表が、制限されている直交表と考えず、直交表のすべてであるかのような誤解された記載が多いので、注意してください。 但しこの制限が直ちに悪いということではなく、あるソフトウェアシステムのテストでは十分かもしれません。
この直交表作成ツールでは強さを2に限定せずに、任意の強さが設定できるようにしています。
またオールペア法も、制限された網羅性の保証になります。

直交表の作り方

直交表の作成方法の原理(直交表の作り方の考え方)

G行列を経由して直交表を生成するアルゴリズムを利用しています。

ここでG行列は以下の性質を満たす行列です。
G の任意の行の組み合わせは、それぞれ1次独立です。

水準数はすべて同じで、素数か素数のべき乗であれば、G行列が求まれば、以下の式で直交表が生成できます。

OA = G・θ

但し、θはサイズが水準数のべき乗であり、要素には水準のすべての組み合わせを得られる1列の行列の集合です。
・は、各θの要素(1列の行列)を乗算して、その結果を並べたものです。例を参照してください。

例. OA(8, 5, 2, 2)は以下で得られます。

G = 0 0 1
    0 1 0
    1 0 0
    1 0 1
    1 1 0

θ = 0  0       1  1
     0, 0, ..., 1, 1
     0  1       0  1

OA = G・θ = 0 1 0 1 0 1 0 1  <--- 行と列を入れ替えると直交表になります
             0 0 1 1 0 0 1 1
             0 0 0 0 1 1 1 1
             0 1 0 1 1 0 1 0
             0 0 1 1 1 1 0 0

直交表作成プログラムの作り方

このプログラムでは、この G行列経由の探索を行って、直交表を作っています。
アルゴリズムの概略は以下の通りです。

(1) G行列の候補として、行列を順に生成します。
(1-1) このときに任意の行が 0ベクタにならないように生成します。
(1-2) 最初から順に生成するのでなく、G行列の性質を利用して、効率的に生成する初期値を与えます。
(2) 生成した G行列候補が G行列であるかの妥当性をチェックします。
(2-1) 現在の実装では G行列候補から直交表を生成し、それが直交表になっているかで確認しています。
(3) チェックして妥当性が確認されたG行列が発見できれば、それから直交表を生成します。

この直交表作成ツールの特徴

(1) 途中で停止、そこから継続探索ができます
(2) このときに必要なのは G行列のみですので、これを保存すれば、いつでも継続が可能です
(3) 任意の G行列から探索が可能です
(4) 探索を停止して表示される G行列を直接編集して、継続探索が可能です
(5) 1万回の探索ごとに G行列の途中経過を表示します

このプログラムで見つけた直交表の例

実験回数 16 因子数 8 水準数 2 強さ 3
0 0 0 0 0 0 0 0 
1 1 0 0 0 0 1 1 
1 0 1 0 1 0 0 1 
0 1 1 0 1 0 1 0 
1 1 0 0 1 1 0 0 
0 0 0 0 1 1 1 1 
0 1 1 0 0 1 0 1 
1 0 1 0 0 1 1 0 
1 1 1 1 0 0 0 0 
0 0 1 1 0 0 1 1 
0 1 0 1 1 0 0 1 
1 0 0 1 1 0 1 0 
0 0 1 1 1 1 0 0 
1 1 1 1 1 1 1 1 
1 0 0 1 0 1 0 1 
0 1 0 1 0 1 1 0 
バックトラック: 2557095回で見つかりました

実験回数 27 因子数 6 水準数 3 強さ 2
0 0 0 0 0 0 
1 0 2 1 0 2 
2 0 1 2 0 1 
0 0 1 1 1 0 
1 0 0 2 1 2 
2 0 2 0 1 1 
0 0 2 2 2 0 
1 0 1 0 2 2 
2 0 0 1 2 1 
1 1 0 0 0 0 
2 1 2 1 0 2 
0 1 1 2 0 1 
1 1 1 1 1 0 
2 1 0 2 1 2 
0 1 2 0 1 1 
1 1 2 2 2 0 
2 1 1 0 2 2 
0 1 0 1 2 1 
2 2 0 0 0 0 
0 2 2 1 0 2 
1 2 1 2 0 1 
2 2 1 1 1 0 
0 2 0 2 1 2 
1 2 2 0 1 1 
2 2 2 2 2 0 
0 2 1 0 2 2 
1 2 0 1 2 1 
バックトラック: 969602回で見つかりました

コンタクト:鉄道の調べ管理人


鉄道の調べ  旅先料理の調べ  ビールコレクション

Copyright © 2011-2012 GOMI Hiroshi All Rights Reserved