実験計画法とは何か?HAYST法をソフトウェアテストを例に解説

2020年11月13日

実験計画法の概要

実験計画法とは、効率のよい実験方法を設計し、結果を適切に解析することを目的とする統計学の応用分野です。実験計画法は医学、工学、心理学、マーケティングなど様々な分野で用いられます。
同値分割法、CFD法、HAYST法など手法は様々ですが、「効率の良い実験を設計する」という実験計画法の目的はどの方法にも一貫しています。
ここでは代表的な実験計画法であるHAYST法について、ソフトウェアテストを例に解説していきます。

なぜ実験計画法は必要なのか?

ソフトウェアの結合テスト

ここからは実験計画法がなぜ必要なのかを解説していきます。
ソフトウェア開発のテストは、通常単体テスト結合テストに分かれています。
単体テストはソフトウェアの部品であるモジュールのテストを行います。
単体テストに合格したモジュールであっても、モジュールの組み合わせによって不具合が発生する場合があります。この組み合わせで生じる問題の発見をするのが結合テストです。
結合テストは、個別に開発したモジュールを1つずつ結合させながらテストすることが望ましいです。
単体できちんと機能するモジュールでも、一度にそれらを結合すると、エラーが発生したときにどのモジュールの組み合わせが原因になっているのか分からないためです。
個別にモジュールを開発して1つずつ組み込んでいけば、「モジュールAとモジュールBを組み合わせをした時にソフトウェアが動かなくなった。これらの組み合せに問題があったのだな。」と、ソフトウェアに不具合が生じたときに、原因の探索が容易になります。
このモジュールを1つずつ組み合わせて結合テストを行う方法をここでは「総当たりテスト」と呼ぶことにします。

総当たりテストの限界

結合テストを行う際、モジュール同士の組み合わせに問題がないかを確認するテストは何回行えばよいのでしょうか。
例えば、7つのモジュールからなるソフトウェアで結合テストを行う場合を考えてみましょう。
先ほど紹介したように、モジュールを1つずつ組み合わせながらテストを行う総当たりテストであれば、7つのモジュールに必要なテストの回数は21回になります。これは高校数学で学ぶ「C」を使った組み合わせの計算から導き出されます。

  • 7つのモジュールから2つを組み合わせる
    7C2
    =(7×6)÷(2×1)
    =21

上記の例ではモジュールの数は7つでしたが、モジュールの数が15個に増えれば必要なテストは105回(15C2)になり、30個に増えればテストは435回(30C2)にまで増加します。
この数字から、総当たりテストを実施する場合、モジュール数が増加すればするほど、その増加率以上にテスト回数が増えることが分かります。
近年のソフトウェア開発においては、DevOps というソフトウェア運用形態やゲームのβテストなど、ソフトウェアをリリースしてからも継続的に仕様変更を加える機会が増え、運用の中でモジュールが追加されることが増えてきました。その結果、ますます結合テストは複雑になり、総当たりテストの方法で求められるテストは膨大な回数になります。
このようなことから、結合テストを総当たりテストだけで実施するのは限界があるため、テストを効率的に行うために実験計画法が用いられます。

HAYST法

ここからは実験計画法の1つであるHAYST法を紹介していきます。
上記のような膨大なテスト回数が必要な状況で、より効率的にテスト計画を立て時間短縮を可能にするのが、HAYST法です。HAYST法は「直交表」を用いてテストの回数を減らすことができます。

直交表

モジュールが A~G の7つの場合における直交表を以下に示します。

テスト \ モジュールABCDEFG
1回目
回目
回目
回目
回目
回目
回目
回目
表1:直交表

表1の中に記入されている「1」は該当するモジュールを組み込むことを表し、「0」は組み込まないことを表します。

直交表は「どの2列をとっても、すべての組み合わせが同数回現れる性質(直交性)」を持っています。上の表でFとGの列に注目すると、(F, G) = (0, 0), (0, 1), (1, 0), (1, 1) の組み合わせがそれぞれ2回ずつ表れていることが分かるでしょう。

直交表の通りに 8回のテストをすると、すべての組み合わせを網羅したソフトウェアテストができます。
これは「統計学的に正しい手抜き」によってテスト回数を減らしているのです。総当たりテストでは7つのモジュールで 21回必要だったテスト回数を、HAYST法では 8回に減らすことができました。
同様に、総当たりテストで105回だった15個のモジュールのテスト回数をHAYST法では16回に減らすことができます。モジュールが30個の場合であっても、HAYST法であれば32回のテストで済みます。

HAYST法のメリット

HAYST法のメリットは以下の通りです。

  • 効率的にテストができること
  • ノウハウに依存せず、機械的に実施できること

結合テストを実施する場合、総当たりテストで行うよりも、HAYST法を採用したほうが、テスト回数が少ない効率的なテストが実施できることは、すでに見てきた通りです。
HAYST法のメリットは効率性だけでなく、ノウハウに依存しない点も挙げられます。
バグチェックを始めとしたソフトウェアテストでは、ベテランのエンジニアと新人エンジニアでチェックの成果に大きな違いが出てしまうことがあります。
例えば結合テストでは、総当たりテストのテスト回数を人間がすべて実施することは事実上不可能です。そのため、想定されるモジュールの組み合わせからいくつかを選び、テストすることになるのですが、ベテランのエンジニアであれば、これまでの経験から問題が出そうなモジュールの組み合わせに見当をつけることができます。
一方、新人エンジニアにはベテランのエンジニアのようなノウハウがないため、適切なモジュールの組み合わせを見つけることができず、テストが終わった後で不具合が見つかるような状態になってしまいます。
しかし、HAYST法はソフトウェアテストの組み合わせを洗い出せるので、新人エンジニアでも必要なテストが分かり、ノウハウがなくとも成果を出すことができます。

参考