全部のペアを網羅したテストケースの作成
ソフトウェアテスト293の鉄則
ちょっと前の本ですが、「ソフトウェアテスト293の鉄則」というような名前の本を読んでいたら、色々な要素を総当りでテストするとケースが多くなりすぎる場合、全部の要素について、全ての二つの要素のペアが必ず一度は出現するテストケースの作り方が紹介されていました。
例えば、テストするソフトの入力パラメータがA,B,Cの三つあり、それぞれAが三つ(A1,A2,A3)、Bが二つ(B1,B2)、Cが二つ(C1,C2)の要素をとりえる場合、全部の一覧のどこかに、(A1,B1)が組で登場するところがあるし、それ以外の二つのパラメータのいかなるもの((A2、B2)(B3,C1)など)もどこかに必ず出てくる、というものです。
この条件が提示された場合、この条件を満たすために最低限必要なテストケースの数はいくつになるか、ということが問題になります。
例えば、テストするソフトの入力パラメータが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が二つとしてみました。
パラメータは五つ。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のおかげで、今後のテストは少し楽ができそうです。
(文責:片山 功士)
今日: - 人
昨日: - 人
トータル: - 人
昨日: - 人
トータル: - 人
添付ファイル