Más contenido relacionado La actualidad más candente La actualidad más candente (20) Similar a VDM++仕様を対象としたテストケース自動生成ツールBWDMにおけるペアワイズ法とドメイン分析テストの適用のための機能拡張 Similar a VDM++仕様を対象としたテストケース自動生成ツールBWDMにおけるペアワイズ法とドメイン分析テストの適用のための機能拡張 (20) Más de Futa HIRAKOBA (20) VDM++仕様を対象としたテストケース自動生成ツールBWDMにおけるペアワイズ法とドメイン分析テストの適用のための機能拡張6. 5
Boundary Value/Vienna Development Method
背景と⽬的
テストケース⾃動⽣成ツールBWDM
2018年に⽴⼭⽒が開発したVDM++仕様を対象とし、テストケース⾃動⽣
成を⾏うCLIツール
• Java、Kotlinで記述されている。
• 境界値分析を⾏い、境界値テストケースを⽣成する。
• 記号実⾏を⾏い、if-then-else式の構造認識に基づいたテストを実施す
るためのテストケースを⽣成する。
7. 背景と⽬的
6
テスト
ケース番号
⼊⼒
データ
期待出⼒
データ
No.1 intMin-1 “Undefined Action”
No.2 intMin “aは5未満です”
No.3 intMax “aは12以上です”
No.4 intMax+1 “Undefined Action”
No.5 4 “aは5未満です”
No.6 5 “aは5以上かつ12未満です”
No.7 11 “aは5以上かつ12未満です”
No.8 12 “aは12以上です”
境界値テストケース
境界値分析
型境界値
if条件式
境界値
VDM++仕様
型の範囲外に対する
期待出⼒データ
境界値テストケースの例
27. 26
評価結果
拡張(ⅰ): 考察
OS: macOS 10.13.6
CPU: Intel Core i5 2.3GHz
RAM: 16GB
⽣成結果の⽐較
拡張後のBWDMは既存のBWDMに⽐べて、⽣成テストケース数を99.98%削減することが
確認できた。
よって、拡張後のBWDMは、
• 境界値分析結果から⽣成するテストケース数が組合せ爆発を起こす可能性を排除できたと⾔える。
• テストケース⽣成時間の短縮ができた。
以上から、拡張後のBWDMは実⽤性が⾼いと⾔える。
実⾏環境
32. 31
TB(True Boundary)
拡張(ⅱ): ⼿段
境界値 - 同値分割した領域の端、あるいは端のどちらか側で
最⼩の増加的距離にある⼊⼒値または出⼒値。
TB - 境界値の中でも、条件式を満たす境界値。
• condition - 条件式
• exp - 左辺
• int - 右辺
condition TB
exp = int int
exp < int int - 1
exp > int int + 1
exp <= int int
exp >= int int
例) condition: a + b < 5ならば、
TB: 4
543 6
39. 38
拡張(ⅱ): ⼿段
ドメインに関わる条件式の数だけ⽣成する。
例) 着⽬条件式: 夫の年齢+妻の年齢 <= 50
1. 変換表にしたがい着⽬条件式を変換
夫の年齢+妻の年齢 <= 50 → 夫の年齢+妻の年齢 = 50
2. SMTソルバへ制約を⼊⼒
(夫の年齢+妻の年齢 = 50) and (夫の年齢 >= 18) and (妻の年齢 >= 16)
→ onポイントは(夫の年齢: 18, 妻の年齢: 32)
もし他のonポイントと重なった場合、制約を追加
(夫の年齢+妻の年齢 = 50) and (夫の年齢 >= 18) and (妻の年齢 >= 16) and
!(夫の年齢=18) and !(妻の年齢=32)
→ onポイントは(夫の年齢: 21, 妻の年齢: 29)
変換前 変換後
exp = int exp = int
exp < int exp = int -1
exp > int exp = int + 1
exp <= int exp = int
exp >= int exp = int
ポイントの⽣成⽅法 - onポイント
46. 45
拡張(ⅲ): まとめ
⽬的
以下の問題の解決
• 1つの関数しかテストケースを⽣成できない(c)
• 定数定義ブロック内の定義を含む関数を含む仕様のテストケースを⽣成できない(d)
• 操作のテストケースを⽣成できない(e)
⼿段
複数の定義に対応するための適⽤をして、BWDMの拡張を⾏う。
結果
複数の関数のテストケース⽣成、定数定義ブロックで定義した定数の参照、
インスタンス変数を含む操作定義のテストケース⽣成ができるようになった。
これにより、BWDMの対応範囲が広がり、より多くのVDM++仕様のテストケース⽣成が可能
となった。
したがって、拡張したBWDMの有⽤性が向上したと考えられる。
拡張(ⅲ)の概要
52. 51
組合せ爆発
拡張(ⅰ): 背景と⽬的
解が指数関数的に増加してしまうこと。
例) ⽔準が1ずつ増えていく場合
因⼦数 ⽔準 テストケース数 テストケース数/因⼦
3 2, 3, 4 12 4
4 2, 3, 4, 5 60 15
5 2, 3, 4, 5, 6 360 72
6 2, 3, 4, 5, 6, 7 2,520 420
7 2, 3, 4, 5, 6, 7, 8 20,160 2,880
8 2, 3, 4, 5, 6, 7, 8, 9 181,440 22,680
53. 52
因⼦と⽔準
拡張(ⅰ): ⼿段
• 因⼦: テスト対称に影響を与える要因。
(本研究では、関数または操作内の変数のこと)
• ⽔準: 因⼦の取り得る値の数。
(本研究では、関数または 操作内の変数が取り
得る値の数)
(例)
• 性別 {“男性”, “⼥性”, “その他”}
• 年齢 {“20 歳未満”, “20 歳以上”}
• 国籍 {“⽇本”, “ア メリカ”, “その他”}
57. 56
ペアワイズ法は有効なのか
拡張(ⅰ): ⼿段
FTFI(Failure-Triggering Fault Interaction: フォールトに関係しているパラメータ数)
(「Software Fault Interactions and Implication for Software Testing」 D.Richard Kuhn, IEEE Transactions on software engineering, Vol.30, 2004より)
3因⼦以上で発⽣する問題は⼤量のテストケースを⽤いて網羅的に
⾏うよりも、別の技法で狙ったほうが効果的だ、という考え⽅。
すべての組合せを網羅できるわけではない
数字はバグの割合
66. 65
ポイントの⽣成⽅法 - offポイント
拡張(ⅱ): ⼿段
onポイントの数だけ⽣成する。
例) 着⽬するonポイント:
(夫の年齢: 24、妻の年齢: 26, 着⽬条件式: 夫の年齢+妻の年齢 <= 50)
1. onポイントの着⽬条件式に関わる引数を抽出
(夫の年齢, 妻の年齢)
2. それぞれの引数に着⽬し(着⽬変数)、隣接する値を導出
着⽬変数: 夫の年齢
→ offポイント1は(夫の年齢: 23, 妻の年齢: 26)
→ offポイント2は(夫の年齢: 25, 妻の年齢: 26)
着⽬変数: 妻の年齢
→ offポイント1は(夫の年齢: 24, 妻の年齢: 25)
→ offポイント2は(夫の年齢: 24, 妻の年齢: 27)
67. 66
ポイントの⽣成⽅法 - inポイント
拡張(ⅱ): ⼿段
ドメインにつき1つだけ⽣成する。
1. 変換表にしたがい関わる式をすべて変換
夫の年齢+妻の年齢 <= 50 → 夫の年齢+妻の年齢 < 50
夫の年齢 >= 18 → 夫の年齢 > 18
妻の年齢 >= 16 → 妻の年齢 > 16
2. SMTソルバへ制約を⼊⼒
(夫の年齢+妻の年齢 < 50) and (夫の年齢 > 18) and (妻の年齢 > 16)
→ inポイントは(夫の年齢: 23, 妻の年齢: 26)
もし他のoffポイントと重なった場合、制約を追加
(夫の年齢+妻の年齢 < 50) and (夫の年齢 > 18) and (妻の年齢 > 16)
and !(夫の年齢=23) and !(妻の年齢=26)
→ inポイントは(夫の年齢: 20, 妻の年齢: 23)
変換前 変換後
exp = int exp = int
exp < int exp < int
exp > int exp > int
exp <= int exp < int
exp >= int exp > int
68. 67
ポイントの⽣成⽅法 - outポイント
拡張(ⅱ): ⼿段
ドメインに関わる条件式の数だけ⽣成する。
例) 着⽬条件式: 夫の年齢+妻の年齢 <= 50
1. 変換表にしたがい着⽬条件式を変換
夫の年齢+妻の年齢 <= 50 → !(夫の年齢+妻の年齢 <= 50)
2. SMTソルバへ制約を⼊⼒
!(夫の年齢+妻の年齢 <= 50) and (夫の年齢 >= 18) and (妻の年齢 >= 16)
→ outポイントは(夫の年齢: 25, 妻の年齢: 26)
もし他のoffポイントと重なった場合、制約を追加
!(夫の年齢+妻の年齢 <= 50) and (夫の年齢 >= 18) and (妻の年齢 >= 16) and
!(夫の年齢=25) and !(妻の年齢=26)
→ outポイントは(夫の年齢: 29, 妻の年齢: 30)
変換前 変換後
exp = int !(exp = int)
exp < int !(exp < int)
exp > int !(exp > int)
exp <= int !(exp <= int)
exp >= int !(exp >= int)
80. 79
詳細1
今後の課題
• 整数型以外の型への対応
現状、実数を表すreal 型や、有理数を表すrat 型、複数の型から構成する合
成型などの、 VDM++ の多くの型に未対応である。この問題は、VDM++ 仕様
を静的解析する際に型情 報を読み込み、境界値分析時に、読み込んだ型情報
から境界値の⽣成処理をBWDMに追加 することによって、解決可能であると
考えられる。
• 型定義の対応
拡張したBWDMは、型定義ブロックに記述した型定義を⽤いた関数や操作の
テストケース を⽣成できない。この問題は、型定義部で定義した型について
静的解析を⾏い、境界値分析 を⾏う処理の際に、それらの情報を⽤いて境界
値を⽣成することで、解決可能と考える。
• 関数定義と操作定義内で利⽤できる構⽂の対応範囲拡⼤
拡張したBWDMは、if 条件式境界値の⽣成を VDM++ 仕様の関数定義内のif-
then-else式のみから⾏っており、それ以外の構⽂には対応していない。この
問題は、対応していない構⽂の情報抽出⽅法と、境界値分析⼿法の提案を⾏
うことで解決可能と考える。