教えて!アロイ人!

全ペア作成

最終更新:

pleasealloy

- view
メンバー限定 登録/ログイン

全部のペアを網羅したテストケースの作成

ソフトウェアテスト293の鉄則

ちょっと前の本ですが、「ソフトウェアテスト293の鉄則」というような名前の本を読んでいたら、色々な要素を総当りでテストするとケースが多くなりすぎる場合、全部の要素について、全ての二つの要素のペアが必ず一度は出現するテストケースの作り方が紹介されていました。
例えば、テストするソフトの入力パラメータがA,B,Cの三つあり、それぞれAが三つ(A1,A2,A3)、Bが二つ(B1,B2)、Cが二つ(C1,C2)の要素をとりえる場合、全部の一覧のどこかに、(A1,B1)が組で登場するところがあるし、それ以外の二つのパラメータのいかなるもの((A2、B2)(B3,C1)など)もどこかに必ず出てくる、というものです。
この条件が提示された場合、この条件を満たすために最低限必要なテストケースの数はいくつになるか、ということが問題になります。

Alloy登場

こういう問題はあんまり頭を使わないでAlloyに任せてしまったほうが得策、ということで、あんまり頭を使わないで書いてみました。
パラメータは五つ。A,B,Cが三つ、D,Eが二つとしてみました。

sig Stat {
  a : AType,
  b : BType,
  c : CType,
  d : DType,
  e : EType
}

enum AType {A1, A2, A3}
enum BType {B1, B2, B3}
enum CType {C1, C2, C3}
enum DType {D1, D2}
enum EType {E1, E2}

fact {
  all a' : AType, b' : BType | some s : Stat | s.a = a' && s.b = b'
  all a' : AType, c' : CType | some s : Stat | s.a = a' && s.c = c'
  all a' : AType, d' : DType | some s : Stat | s.a = a' && s.d = d'
  all a' : AType, e' : EType | some s : Stat | s.a = a' && s.e = e'

  all b' : BType, c' : CType | some s : Stat | s.b = b' && s.c = c'
  all b' : BType, d' : DType | some s : Stat | s.b = b' && s.d = d'
  all b' : BType, e' : EType | some s : Stat | s.b = b' && s.e = e'

  all c' : CType, d' : DType | some s : Stat | s.c = c' && s.d = d'
  all c' : CType, e' : EType | some s : Stat | s.c = c' && s.e = e'

  all d' : DType, e' : EType | some s : Stat | s.d = d' && s.e = e'
}

run {} for 12 Stat

ね、見るからに頭使ってないでしょ?

all d' : DType, e' : EType | some s : Stat | s.d = d' && s.e = e'

というのは、全てのd'、e'というDとEのペアについて、s.d=d'、s.e=e'となるSが一つ以上必ず存在する、という条件です。これをズラズラならべただけです。もっといい方法がありそうなもんですが。

結果

上のケース、A、B、Cが3種類、D、 Eが2種類の場合、必要なケースは9個と出ました。


この本とAlloyのおかげで、今後のテストは少し楽ができそうです。

(文責:片山 功士)


今日: -
昨日: -
トータル: -
添付ファイル
目安箱バナー