VDM++仕様を対象としたテストケース⾃動⽣成ツール BWDMにおける
ペアワイズ法とドメイン分析テストの適⽤のための機能拡張
宮崎⼤学⼤学院 ⼯学研究科 ⼯学専攻
⽚⼭徹郎研究室
平⽊場 ⾵太
2020/02/04(Tue), A116, 13:30-, 機械・情報系コース 情報システム⼯学分野 令和元年度修⼠論⽂発表会
1. 背景と⽬的
2. ⼿段
3. 拡張(ⅰ) - ペアワイズ法の適⽤
背景と⽬的、⼿段、適⽤例、考察
4. 拡張(ⅱ) - ドメイン分析テストの適⽤
背景と⽬的、⼿段、適⽤例、考察
5. 拡張(ⅲ) - 複数定義の対応(概要のみ)
6. まとめ
アジェンダ
1.背景と⽬的
1
2
ソフトウェアの品質
背景と⽬的
ソフトウェアの⾼品質化が求められている。
従来のソフトウェアの仕様作成プロセスでは、⾃然⾔語の持つ曖昧さに
より、仕様書に曖昧な箇所が含まれてしまう。
厳密な仕様を作成するには
→ 形式⼿法(VDM++, B-Methodなど)
3
形式⼿法
VDM(Vienna Development Method)
背景と⽬的
• 1960~70年代にIBMウィーン研究所で考案
• 1996年に形式仕様記述⾔語VDM-SLがISO標準化
• Overture、VDMTools、VDMPad、VDMJ等の⽀援
ツールが充実
↓
本研究では、VDM-SLを
オブジェクト指向拡張した
VDM++で記述した仕様書を
対象とする。
4
ソフトウェアテスト
背景と⽬的
ソフトウェアの品質向上のために必須の作業。
VDMで記述した仕様もテストを⾏う必要がある。
しかし
テストケース設計・テストの実施には
⼿間と時間が掛かる。
5
Boundary Value/Vienna Development Method
背景と⽬的
テストケース⾃動⽣成ツールBWDM
2018年に⽴⼭⽒が開発したVDM++仕様を対象とし、テストケース⾃動⽣
成を⾏うCLIツール
• Java、Kotlinで記述されている。
• 境界値分析を⾏い、境界値テストケースを⽣成する。
• 記号実⾏を⾏い、if-then-else式の構造認識に基づいたテストを実施す
るためのテストケースを⽣成する。
背景と⽬的
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++仕様
型の範囲外に対する
期待出⼒データ
境界値テストケースの例
7
既存のBWDMの問題点
背景と⽬的
本研究で解決する5つの問題点
(a) 境界値分析時にすべての組合せを⽤いてテストケースを⽣成
するため、組合せ爆発を起こす可能性がある
(b) 複数の変数を含む条件式を持つ関数のテストケースを⽣成で
きない
(c) 1つの関数しかテストケースを⽣成できない
(d) 定数定義ブロック内の定義を含む関数を含む仕様のテスト
ケースを⽣成できない
(e) 操作のテストケースを⽣成できない
8
本研究のテーマ
背景と⽬的
BWDMの有⽤性の向上
を⽬的として
BWDMの拡張
を⾏う
具体的には5つの問題点を解決する
また、BWDMの正式名称を
BWDM: Verification tool for Vienna Development Method)に変更する。
2. ⼿段
9
10
5つの問題点を解決するための3つの拡張
⼿段
3つの拡張
(ⅰ) ペアワイズ法の適⽤によるテストケース数削減
→ 問題点(a)を解決
(ⅱ) ドメイン分析テストの適⽤による複数変数を含む
条件式を含む関数のテストケース⽣成
→ 問題点(b)を解決
(ⅲ) 複数の定義への対応
→ 問題点(c)(d)(e)を解決
11
5つの問題点を解決するための3つの拡張
⼿段
3つの拡張
(ⅰ) ペアワイズ法の適⽤によるテストケース数削減
→ 問題点(a)を解決
(ⅱ) ドメイン分析テストの適⽤による複数変数を含む
条件式を含む関数のテストケース⽣成
→ 問題点(b)を解決
(ⅲ) 複数の定義への対応
→ 問題点(c)(d)(e)を解決 👈 今回の発表では省略
12
既存のBWDMの構造
⼿段
13
拡張した
BWDM
の構造
⼿段
14
拡張した
BWDM
の構造
⼿段
3. 拡張(ⅰ)
ペアワイズ法の適⽤
① 背景と⽬的
② ⼿段
③ 適⽤例
④ 考察
15
16
問題点(a)
拡張(ⅰ): 背景と⽬的
境界値分析で⽣成するテストケースは、全ての組み合わせによる
境界値テストの実⾏を前提としている。
組合せ爆発を起こし、テストケース数が膨⼤になる可能性がある。
17
ペアワイズ法(All-pair法)
拡張(ⅰ): 背景と⽬的
2つの因⼦の組合せを最低限テストする⽅法
• 全ての組合せでテストする⽅法に⽐べて、膨⼤な数のテ
ストケースを削減することができる。
• 例えば、因⼦6、⽔準(4,4,2,2,2,2)の組合せの場合、256
個のテストケースを48個に削減できる。
• 因⼦ - 条件分岐における⼊⼒条件
• ⽔準 - 因⼦が取り得る値
組合せテストの総数
を減らせる!
18
問題点(a)の解決法
拡張(ⅰ): 背景と⽬的
(a) BWDMが組合せ爆発を起こす可能性
を排除するために
ペアワイズ法の適⽤による
テストケース数削減の拡張を⾏う
19
拡張(ⅰ): ⼿段
因⼦と⽔準を⼊⼒しペアワイズ法を適⽤した組
合せを出⼒するツール
• Microsoft社が開発している。
• C++から利⽤できるAPIを提供している。
• BWDMはJavaで記述しているため、PICTを利⽤で
きない。→pict4javaを作成した。
PICT(Pairwise Independent Combinatorial Testing tool)
20
pict4javaの開発
拡張(ⅰ): ⼿段
Javaから呼び出すことのできるPICTライブラリ
• JNA(Java Native Access)を利⽤することにより、
JavaからC++の実⾏ファイルにアクセスする。
• BWDMの拡張を⾏う前段階として作成した。
• 拡張するBWDMで主に使うPICTのAPI
• PictAddParameter ‒ PICTへの因⼦と⽔準の登録
• PictGenerate ‒ 組合せデータの⽣成
• PictGetNextResultRow ‒ ⽣成データの取得
pict4java
JNA
PICT
21
拡張したBWDMの構造
拡張(ⅰ): ⼿段
拡張箇所
22
ペアワイズ法を適⽤した⼊⼒データ⽣成の処理の流れ
拡張(ⅰ): ⼿段
pict4java
1. 境界値分析結果をpict4javaに渡す
2. PictGenerateする
3. 組合せを出⼒する
4. 出⼒した組合せからテストケースの⼊⼒を出⼒する。
23
適⽤例
拡張(ⅰ): 適⽤例
因⼦が3、⽔準が(6,6,6)の関数 ⽣成したテストケース
拡張後の
24
適⽤例
拡張(ⅰ): 適⽤例
• ⽣成したテストケースの数を削減できることを確認した
• ⽣成したテストケースが2つの因⼦のすべての組合せを網羅できること
を確認した
したがって
拡張後のBWDMが、VDM++仕様から、ペアワイズ法を適⽤した
境界値テストケースを正しく出⼒できていることが確認できた。
216
既存のBWDM
40
拡張したBWDM
25
評価⽅法
拡張(ⅰ): 考察
拡張後の
既存の テストケース
テストケース
因⼦: 7
⽔準:(6,8,6,8,8,6,6,)
の関数
拡張したBWDMが、既存のBWDMに⽐べて、テストケース総数を削減できることを確認する。
複雑な関数を持つVDM++仕様を既存のBWDMと拡張後のBWDMにそれぞれ適⽤し、
⽣成テストケース数を⽐較する。
26
評価結果
拡張(ⅰ): 考察
OS: macOS 10.13.6
CPU: Intel Core i5 2.3GHz
RAM: 16GB
⽣成結果の⽐較
拡張後のBWDMは既存のBWDMに⽐べて、⽣成テストケース数を99.98%削減することが
確認できた。
よって、拡張後のBWDMは、
• 境界値分析結果から⽣成するテストケース数が組合せ爆発を起こす可能性を排除できたと⾔える。
• テストケース⽣成時間の短縮ができた。
以上から、拡張後のBWDMは実⽤性が⾼いと⾔える。
実⾏環境
4. 拡張(ⅱ)
ドメイン分析テストの適⽤
① 背景と⽬的
② ⼿段
③ 適⽤例
④ 考察
27
28
問題点(b)
拡張(ⅱ): 背景と⽬的
左辺または右辺に複数の変数を含む条件式を持つ
仕様に対してテストケース⽣成ができない
変数1 変数2
境界値は50, 51であるが、
夫の年齢、妻の年齢をそれぞれ⼀意に
定めることができない。
29
ドメイン分析テスト
拡張(ⅱ): 背景と⽬的
関係性がある複数の変数を同時にテストする⽅法。
条件式を分析し、ドメイン(定義域)を抽出し、ドメインの
境界値分析を⾏いテストケースを⽣成する。
30
問題点(b)の解決法
拡張(ⅱ): 背景と⽬的
BWDMが
複数の変数を含む条件式を持つ仕様の
テストケースを⽣成できない
問題を解決するために
ドメイン分析テストのための
テストケース⽣成⼿法を適⽤する
拡張を⾏う
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
32
ドメイン分析テストのためのテストケース⽣成
拡張(ⅱ): ⼿段
4種のポイントを求め、求めたポイントを⼊⼒とするテストケース
を⽣成する。
• onポイント
• offポイント
• inポイント
• outポイント
⼊⼒
条件式に対する⼊⼒値のセット
正常系判定値
正常系であるかどうかを保持する値。正常系と ⾮正常系の2つ
の状態を保持する。
着⽬条件式
どの条件式に着⽬してポイントを⽣成したかの情報(on, off, outポイント
のみ保持)
着⽬変数
どの変数に着⽬して、on ポイントに隣接するポイントを⽣成したかの情
報(offポイントのみ保持)
正常系 -ポイントの期待出⼒がドメインの期待出⼒と⼀致する状態
⾮正常系 -ポイントの期待出⼒がドメインの期待出⼒と⼀致しない状態
各ポイントが保持する情報
33
4種のポイントの定義(on, off)
拡張(ⅱ): ⼿段
着⽬条件式のTB
onポイント
着⽬するonポイントに隣接し、TBでない値
offポイント
34
4種のポイントの定義(in, out)
拡張(ⅱ): ⼿段
ドメインを決定づける全ての条件式を満たす値
inポイント
着⽬条件式のみを満たさない値
outポイント
35
拡張したBWDMの構造
拡張(ⅱ): ⼿段
拡張箇所拡張箇所
36
拡張(ⅱ): ⼿段
• ドメインごとに、onポイント、offポイント、inポイント、outポイ
ントを⽣成する。
• 各ドメインでは、⼊⼒に対する解を求めるのにSMTソルバZ3を利⽤
する。
ドメイン分析部
ドメイン
ポイント
引数
ドメイン分析部
37
SMTソルバ(Z3)
拡張(ⅱ): ⼿段
• 制約を⼊⼒し、充⾜可能性および解の例を出⼒可能
• Z3はC、C++、Java、PythonなどのAPIを提供
• Microsoftが開発
充⾜可能性問題を解くために、
Z3を利⽤する
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ポイント
39
拡張(ⅱ): 適⽤例
拡張後のBWDMでは、以下のことを確認できた
• 各ポイントが定義どおりに⽣成できている。
• 正常系判定値が正しい。
• 着⽬条件式が正しい。
• 着⽬変数が正しい。
• ⼊⼒と期待出⼒が正しい。
ドメイン分析テストが必要な関数のVDM++仕様
⽣成したテストケース
拡張後の
したがって、
拡張後のBWDMが、
• 条件式内に複数の変数があるVDM++
仕様を解析できる
• ドメイン分析テストによるテスト
ケース⽣成が適切にできる
ことを確認できた。
適⽤例
40
拡張(ⅱ): 考察
拡張後の
テストケース
テストケース
ドメイン分析を必要
とするVDM++仕様
VDM++仕様を⼈⼿による作成と拡張後のBWDMにそれぞれ適⽤し、
テストケースを⽣成(作成)するまでの時間を⽐較する。
⼈⼿による作成
(学部⽣2名、修⼠課程2名)
評価⽅法
41
拡張(ⅱ): 考察
実験で⽤いた仕様
42
拡張(ⅱ): 考察
⽣成(作成)結果の⽐較
拡張後のBWDMは⼈⼿による作成に⽐べて、平均で18分程の時間短縮が可能であることが確
認できた。また、⼈⼿による作成の場合、ヒューマンエラーも⾒られた。
仕様の規模が拡⼤すると、⼈⼿とコンピュータとの処理速度の差に加えて、ヒューマンエラーの有無な
どにより、テストケース⽣成に要する時間の差は更に拡⼤していくと思われる。
したがって、ドメイン分析テストのためのテストケースを作成する際の、テストケース⽣成効率が向上
したと⾔える。
※制限時間を30分とし、制限
時間を超えた場合、その場で
時間計測終了とした。
OS: macOS 10.14.5
CPU: Intel Core i5 2.3GHz
RAM: 16GB
実⾏環境
評価結果
43
関連研究
拡張(ⅱ): 考察
ドメイン分析に基づいたテストケースを⾃動⽣成する⼿法として、
丹野らの研究 [11] がある。
仕様書 → 設計モデルの記述 → ⾃動⽣成⼿法 → テストケース
[11]は、仕様書から設計モデルを記述する必要があるが、
BWDMは仕様書からそのままテストケース⽣成が可能
[11] 丹野治⾨,張暁晶: ドメインテスト技法に基づく網羅的なテストデータ⾃動⽣成⼿法の
提案, 情報処理学会研究報告, Vol.2014-SE-186, No.6 pp.1-8 (2014).
5. 拡張(ⅲ)
複数定義の対応(概要のみ)
44
45
拡張(ⅲ): まとめ
⽬的
以下の問題の解決
• 1つの関数しかテストケースを⽣成できない(c)
• 定数定義ブロック内の定義を含む関数を含む仕様のテストケースを⽣成できない(d)
• 操作のテストケースを⽣成できない(e)
⼿段
複数の定義に対応するための適⽤をして、BWDMの拡張を⾏う。
結果
複数の関数のテストケース⽣成、定数定義ブロックで定義した定数の参照、
インスタンス変数を含む操作定義のテストケース⽣成ができるようになった。
これにより、BWDMの対応範囲が広がり、より多くのVDM++仕様のテストケース⽣成が可能
となった。
したがって、拡張したBWDMの有⽤性が向上したと考えられる。
拡張(ⅲ)の概要
5. まとめ
46
47
まとめ
⽬的
BWDMの有⽤性の向上
⼿段
BWDMの拡張
(ⅰ) ペアワイズ法の適⽤によるテストケース数削減
(ⅱ) ドメイン分析テストの適⽤による複数変数を含む条件式を含む関数
のテストケース⽣成
(ⅲ) 複数の定義への対応
結果
拡張したBWDMは
• ⽣成するテストケース数が組合せ爆発を起こす可能性を排除できた
• ドメイン分析テストのためのテストケース⽣成ができた
• テストケースを⾃動⽣成できるVDM++仕様の構⽂が増えた
したがって、
拡張後のBWDMは有⽤性が向上し、テスト⼯程 の作業効率が向上した。
本研究のまとめ
48
今後の課題
今後の課題
• 整数型以外の型への対応
• 型定義の対応
• 関数定義と操作定義内で利⽤できる構⽂の対応範囲拡⼤
• インスタンス変数を操作する操作定義のテストケースの⽣
成への対応
• 他の関数または操作を呼び出す関数定義と操作定義のテス
トケース⽣成への対応
ご静聴ありがとうございました。
49
ここから隠しスライド
おわおわり
• 拡張(ⅰ) ペアワイズ法関連
• 拡張(ⅱ) ドメイン分析テスト関連
• 拡張(ⅲ) 複数定義の対応関連
• その他
拡張(ⅰ)
ペアワイズ法関連
隠しスライド
50
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
52
因⼦と⽔準
拡張(ⅰ): ⼿段
• 因⼦: テスト対称に影響を与える要因。
(本研究では、関数または操作内の変数のこと)
• ⽔準: 因⼦の取り得る値の数。
(本研究では、関数または 操作内の変数が取り
得る値の数)
(例)
• 性別 {“男性”, “⼥性”, “その他”}
• 年齢 {“20 歳未満”, “20 歳以上”}
• 国籍 {“⽇本”, “ア メリカ”, “その他”}
53
ペアワイズ法の具体例
拡張(ⅰ): ⼿段
54
pict4javaの構造
拡張(ⅰ): ⼿段
PICT本体
JNAを使ったインターフェース
55
ペアワイズ法を適⽤した⼊⼒データ⽣成の処理の流れ
(詳細)
拡張(ⅰ): ⼿段
PictAddParameter
を⽤いて、因⼦と
⽔準をPICTに登録
する。
PictGenerateを⽤いて、
ペアワイズ法を適⽤した
組合せデータを⽣成する。
3. で取得したデータのインデックスに
該当するパラメータを⽤いて、
pict4javaの出⼒データを⽣成する。
pict4java
PictGetNextResultRowを⽤いて、 2. で⽣
成した組合せデータを1件づつ取得する。
取得したデータは、因⼦が取り得るパラ
メータ群のインデックスとなる。
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因⼦以上で発⽣する問題は⼤量のテストケースを⽤いて網羅的に
⾏うよりも、別の技法で狙ったほうが効果的だ、という考え⽅。
すべての組合せを網羅できるわけではない
数字はバグの割合
57
適⽤例において
ペアを網羅
できているか
拡張(ⅰ): 適⽤例
58
拡張(ⅰ)のまとめ
まとめ
⽬的
組合せ爆発を起こす可能性(a)の排除
⼿段
テストケース⽣成にペアワイズ法を適⽤し、BWDMの拡張を⾏う
結果
BWDMが組合せ爆発を起こす可能性を排除でき、テストケース⽣成時間の短縮
ができたことから、拡張後のBWDMは実⽤性が⾼いと⾔える。
したがって、拡張後のBWDMは、テスト⼯程の作業効率化を⾒込めると考えら
れる。
拡張(ⅱ)
ドメイン分析テスト関連
隠しスライド
59
60
4種のポイントの定義
拡張(ⅱ): ⼿段
• onポイント
着⽬条件式のTB
• offポイント
着⽬するonポイントに隣接し。TBでない値
• inポイント
ドメインを決定づける全ての条件式を満たす値
• outポイント
着⽬条件式のみを満たさない値
61
onポイント
拡張(ⅱ): ⼿段
• 着⽬条件式のTB
• ドメインを決定づける条件式に付き
1つ⽣成する。
• 他のonポイントと重複してはならな
い。
62
offポイント
拡張(ⅱ): ⼿段
• 着⽬するonポイントに隣接し。TBで
ない値
• onポイントに付き複数(着⽬条件式
に含まれる変数 ∗ 2)個
63
inポイント
拡張(ⅱ): ⼿段
• ドメインを決定づける全ての条件式
を満たす値
• ドメインに付き1つ⽣成
• onポイント、offポイントと重複して
はならない。
64
outポイント
拡張(ⅱ): ⼿段
• 着⽬条件式のみを満たさない値
• ドメインを決定づける条件式に付き
1つ⽣成
• offポイントと重複してはならない。
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)
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
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)
68
テストケース⽣成の流れ
拡張(ⅱ): ⼿段
ドメイン分析部で⽣成した各ポイントを元に、期待出⼒⽣成部
で期待出⼒を求めて、テストケース⽣成部で各ポイントと期待
出⼒をファイルに出⼒する。
⽣成した各ポイントは、期待出⼒⽣成部に⼊⼒することで、期
待出⼒を求めることができる。
69
拡張したBWDMの構造(b)
拡張(ⅱ): ⼿段
拡張箇所
B
70
期待出⼒データ⽣成(既存機能)
拡張(ⅱ): ⼿段
関数への⼊⼒に対する期待出⼒を導出する機能
期待出⼒
データ⽣成
引数
期待出⼒
71
⽣成したテストケースのフォーマット
拡張(ⅱ): ⼿段
ドメイン分析テストケースを⽣成する際に、テストケースに正
常系判定値、着⽬条件式、着⽬変数の情報を追加する。
72
被験者の流れ
拡張(ⅱ): 考察
被験者が理解するまで学習
ドメイン分析の説明 VDM++仕様の読み⽅と解答例の説明 実験
※学習で使ったテキストは実験中も閲覧可能とした。
73
拡張(ⅱ)のまとめ
まとめ
⽬的
複数の変数を含む条件式を持つ仕様に対してテストケース⽣成ができない(b)と
いう問題点の解決
⼿段
ドメイン分析テストのためのテストケース⽣成を適⽤し、BWDMを拡張する。
結果
BWDMの複数の変数を含む条件式を持つ仕様に対してテストケース⽣成ができ
ないという問題点を解決でき、⼈⼿によるテストケース⽣成と⽐べて⽣成時間
が短縮できた。
したがって、拡張後のBWDMは、テスト⼯程の作業効率化を⾒込めると考えら
れる。
拡張(ⅲ)
複数定義の対応関連
隠しスライド
74
75
VDM++における定義⼀覧
拡張(ⅲ): ⼿段
76
定義クラス群のクラス図
拡張(ⅲ): ⼿段
テストケース⽣成
を⾏う定義を表す
抽象クラス。
TCDefinition型の
オブジェクトを元
に、if-then-else
式から⽊構造を⽣
成する。
テストケース⽣成
を⾏う関数を表す
クラス。
TCExplicitFuncti
onDefinition型
のオブジェクトを
元に、if-then-
else式から⽊構造
を⽣成する。
テストケース⽣成を⾏う操作を表すクラス。
TCExplicitOperationDefinition型のオブ
ジェクトを元に、if-then-else式から⽊構造
を⽣成する
抽象構⽂⽊解析処理を⾏うクラス。構⽂解析
処理から受け取った、定義を表す抽象構⽂⽊
の集合から、定義クラスの集合を⽣成する。
定数定義とインスタンス変数定義を持つ。
77
定義クラスの分類
拡張(ⅲ): ⼿段
VDM++定義を表す抽象クラス
(VDMJ::TCDefinition)のインスタンス
テストケース⽣成を⾏う
関数定義を表すクラス
(FunctionDefinition)
のインスタンス
テストケース⽣成を⾏う
操作定義を表すクラス
(OperationDefinition)
のインスタンス
定数定義を表すクラス
(VDMJ::TCValueDefinition)
インスタンス変数定義を表すクラス
(VDMJ::TCInstanceVariableDefinition)
関数定義を表すクラス
(VDMJ::TCExplicitFunctionDefinition)
操作定義を表すクラス
(VDMJ::TCExplicitOperationDefinition)
連想配列
explicitFunctions
連想配列
explicitOperations
連想配列
constantValues
連想配列
instanceVariables
なら
なら
なら
なら
が
に格納
に格納
に格納
に格納
を⽣成し
を⽣成し
1. 定義の種類を確認する。
2. 定数かインスタンス変数であった場合、定義のインスタンス
を連想配列に格納する。
3. 関数か操作であった場合、テストケース⽣成を⾏うクラスの
インスタンスを⽣成し、定義をメンバに持たせる。そして、
⽣成したインスタンスを連想配列に格納する。
その他
隠しスライド
78
79
詳細1
今後の課題
• 整数型以外の型への対応
現状、実数を表すreal 型や、有理数を表すrat 型、複数の型から構成する合
成型などの、 VDM++ の多くの型に未対応である。この問題は、VDM++ 仕様
を静的解析する際に型情 報を読み込み、境界値分析時に、読み込んだ型情報
から境界値の⽣成処理をBWDMに追加 することによって、解決可能であると
考えられる。
• 型定義の対応
拡張したBWDMは、型定義ブロックに記述した型定義を⽤いた関数や操作の
テストケース を⽣成できない。この問題は、型定義部で定義した型について
静的解析を⾏い、境界値分析 を⾏う処理の際に、それらの情報を⽤いて境界
値を⽣成することで、解決可能と考える。
• 関数定義と操作定義内で利⽤できる構⽂の対応範囲拡⼤
拡張したBWDMは、if 条件式境界値の⽣成を VDM++ 仕様の関数定義内のif-
then-else式のみから⾏っており、それ以外の構⽂には対応していない。この
問題は、対応していない構⽂の情報抽出⽅法と、境界値分析⼿法の提案を⾏
うことで解決可能と考える。
80
詳細2
今後の課題
• インスタンス変数を操作する操作定義のテストケースの⽣
成への対応
拡張したBWDMは、インスタンス変数を操作する操作定義のテストケース⽣
成ができない。この問題は、インスタンス変数定義ブロック内で定義した不
変条件に対応することで解決可能と考える。
• 他の関数または操作を呼び出す関数定義と操作定義のテス
トケース⽣成への対応
拡張したBWDMでは、他の関数または操作を利⽤する関数定義と操作定義の
テストケー ス⽣成ができない。この問題は、抽象構⽂⽊解析処理において解
析した関数、および、操作 を Java コードに変換し、スタックを構築して関
数呼び出しの仕組みを作ることで解決可能 と考える。

VDM++仕様を対象としたテストケース自動生成ツールBWDMにおけるペアワイズ法とドメイン分析テストの適用のための機能拡張