RAKUS Developers Blog | ラクス エンジニアブログ

株式会社ラクスのITエンジニアによる技術ブログです。

イベント詳細についてはこちらをクリック

ソフトウェアテスト オールペア法のテストケース自動生成ツールを試してみた

こんにちは。新卒2年目のbadaikiです。業務でできることが徐々に増えていくなかで、まだまだ自分はできていないなと感じる日々を過ごしております。

はじめに

前回ではテストの網羅率の向上、可視化するディシジョンテーブルについて記事を書きました。

tech-blog.rakus.co.jp

ディシジョンテーブルは網羅率は高められるものの、ターゲットによってはすべてのケースを消化するだけでとんでもない工数がかかってしまうことがわかりました。 そこで今回はどうすればケース数を減らし、効率的にテストを実施できるかについて調べてみました。

以前私がテスト実施から参入した開発で、先輩社員がケースを作成したものを複数人で実施していくということがありました。条件がかなり複雑に絡み合う機能であったため、ケース数が爆発しているんだろうなーと予測していたのですが、いざケースを確認してみると予測していたケース数の1/3ほどのケース数で驚きました。聞くとオールペア法を活用していました。

オールペア法についてはケース数が減るよ。という知識しかなく、なぜ減らせるのか、漏れは起きないのかということまで理解できておりませんでしたので、この機に調べてみようと思いました。

オールペア法とは

オールペア法(ペアワイズ法ともいう)とは組み合わせテストの技法の1つです。

組み合わせテストとは、多数の入力条件の値をいろいろと組み合わせて実施するテストです。しかし前項でも述べたように、全ての入力条件で値の組み合わせを考えると、膨大な数になり全てをテストするのは現実的ではありません。例えば3つの選択肢があるプルダウンが4つあり、その組み合わせだけで 3の4乗 = 81ケース となるわけです。81ケースと聞くとできそうな気がしますが、それぞれが4つの選択肢になるだけで256ケースと3倍以上に増えてしまいます。

以降ではプルダウンのような入力条件を因子、その値を水準と呼びます。

ある文献*1ではソフトウェアのバグの7割から9割が1つまたは2つの因子の組み合わせによって発生していることが記されています。以下がそれを示した表です。

要因数 組込み機器(医療系) ブラウザ(Netscape サーバ(Apache データベース
1 66 29 42 68
2 31 47 28 25
3 2 19 19 5
4 1 2 7 2
5 2 0
6 1 4

そこで2つの因子の組み合わせをつくり、すべての水準の組み合わせのケースを作成するのがオールペア法という技法です。

例えば、プルダウンが3つの組み合わせを考えてみます。

因子 水準
プルダウンA 0,1
プルダウンB 0,1
プルダウンC 0,1,2

これの全組み合わせは 2 * 2 * 3 = 12ケース 。

これをオールペア法で作成するには

1. まずそれぞれの因子のペア(AB、AC、BC)を作成し、水準の組み合わせの全パターンを作成します。

AB AC BC
00 00 00
01 01 01
10 02 10
11 10 11
11
12

2. 1で作成した水準の組み合わせをAB列から順に取り出します。

No
1 0 0
2 0 1
3 1 0
4 1 1

3. 次にAC列、BC列と順に当てはまる行に割り付けていきます。このときに着目しているペア以外のペアも同じ組み合わせが現れないように割り付ける必要があり、これがケース数を最小にするために重要です。←これがややこしいです。例えばAC列の(10)を割り付けるとき、(1,0,0)の組み合わせではなく、(1,1,0)の組み合わせにします。AC列の(00)を割り付けるときに(0,0,0)の組み合わせが既に出来上がっており、BC列の(00)が2か所で作成されてしまうためです。

No
1 0 0 0
2 0 1 1
3 1 0 1
4 1 1 0
5 0 0 2
6 1 1 2

このようにオールペア法で作成すると今回の例ではケース数が12ケースから6ケースと半分になりました。ただし、理屈がわかっても実際自分で作成しようとすると難しいです。。。加えて、実際のシステムでケース作成を行う場合には、A=0のときはB=0になるなどの制約条件があるとさらに複雑になってきます。上記の例は簡単な例でしたが、複雑になっていくと考えるを諦めてしまいそうですよね。実は制約条件も考慮して自動生成してくれるツールが提供されています!

テストケース生成ツール

オールペア法のテストケース生成ツールは多く提供されており、以下のサイトにまとめられていました。ここで紹介されているツールだけで現在51種類もあり、驚きました。この中でPICTpairwiserについて使い方を紹介したいと思います。

www.pairwise.org

PICT(Pairwise Independent Combinatorial Testing tool)

Pairwise Testing - Available Tools

特徴:

使い方:

1. パラメータを定義する

PICTではモデルファイルと呼びますが、txtファイルで作成します。 基本的なモデルファイルは、末尾が:で終わるパラメータと、⁠,で区切られた値の並びとからなるモデル定義部のみで構成されます。

A:  0,1
B:  0,1
C:  0,1,2

2. 1で作成したファイルをpict.exeで実行する。

pict test.txt

これだけです。

すると以下の結果が出力されます。

A       B       C
1       1       1
0       0       0
1       0       1
1       1       0
1       1       2
0       0       2
0       1       1

結果をリダイレクトする場合には以下で実行できます。

pict test.txt 1>result.txt 2>error.txt

1は出力結果、2はエラーが発生したときにエラー内容が出力されます。

制約条件を設定する場合にはモデルファイルの末尾に制約条件を追記します。記述方法は独自のスクリプト言語が用いられており,因子を [] で囲み,水準が文字列の場合は,"で囲み,ステートメントの末尾は;で終わります。条件にはパラメータと値の関係を評価する関係式を用いて条件付き制約と必ず成立する無条件制約があります。

#パラメータ定義
A:  0,1
B:  0,1
C:  0,1,2

#制約条件定義
#条件付き制約
if [A] = 1
then [C] <> 2;

#無条件制約
[A] <> [B] or [A] <> [C] or [B] <> [C];

上記のモデルファイルで実行すると以下のケースが出力されます。制約条件通り、A=1の場合はC=2にはならず、A=B=Cになるケースは作成されません。

A       B       C
0       0       1
0       0       2
0       1       0
0       1       1
1       0       0
0       1       2
1       0       1
1       1       0

pairwiser

Pairwiser - Pairwise Testing and Test Generation Tool

特徴:

  • 無料(ユーザ登録が必要)
  • INDUCTIVE社というノルウェーの企業が開発しているWebアプリケーション
  • カバレッジなどの解析が容易
  • 生成したケースをエクセル形式でダウンロードできる

f:id:badaiki:20200212003106p:plain
pairwiser

使い方:

基本的に、左から右へタブに必須情報を入力してテストケースを生成します。それぞれのタブの「Save」ボタンを押さないとデータが保存されません。また、データが保存されていないタブよりも右側のタブの内容は更新が効かないようになっています。Webアプリのため、直感的に操作がやりやすいです。

Define Parametersタブでパラメータ定義や制約条件を設定でき、Generate Testsタブでケース作成ができます。Generate Testsタブの上部にあるExport to ExcelボタンをクリックすることでExcelファイルもダウンロードすることができますので、業務でテストケースをExcelで書かれている場合にはそのまま活用することができて便利ですね!

f:id:badaiki:20200212010020p:plain
pairwiser 結果

また、公式ページにはチュートリアルやヘルプもあるので、初めてさわる場合でも安心ですね!

おわりに

前回のディシジョンテーブルに引き続き、今回は組み合わせテストのオールペア法について調べ、自動生成ツールを使ってみました。オールペア法について知ることで、なぜそのケース数で十分なのか、どのように作成されているのかが理解できました。また、自動生成ツールを用いることで制約条件など細かな設定も行え、ツールによってはExcelファイルに変換してくれるなど、人手で行うよりもとても効率的にケース作成が可能だとわかりました。今後、条件が複雑に絡み合う機能のテストではオールペア法を用いて網羅性を保証しつつ、効率的に進めていこうと思います。

*1:R.D.Kuhn et al.“⁠Software Fault Interactions and Implications for Software Testing,⁠”⁠ IEEE Transactions on Software Engineering, 30(6), June 2004

Copyright © RAKUS Co., Ltd. All rights reserved.