...

スライド - アーキテクチャ指向形式手法に基づく高品質ソフトウェア開発法

by user

on
Category: Documents
0

views

Report

Comments

Transcript

スライド - アーキテクチャ指向形式手法に基づく高品質ソフトウェア開発法
「形式手法とテスト」
宮崎大学 工学教育研究部
⽚⼭徹郎
<[email protected]>
Part 1
2015/02/20
JaSST東京2015#D2
2
テストに必要な情報って?
• 「仕様が曖昧だからテストが大変!」
– 仕様に何を求めてますか?
つまり
• テスト技術者にとって、どういう仕様が望まし
いのか?
それを考える前に
• テストに必要な情報って?
– テストベース
2015/02/20
JaSST東京2015#D2
3
テストベース
• テストに必要な情報をテスト技法で考える
同値分割法
ソフトウェアやシステムへの入力を、同じ処理をする
グループに分割するための情報
境界値分析
さまざまな境界となる値
デシジョンテーブルテスト
条件、条件の組み合わせ、動作(結果)
状態遷移テスト
状態、状態の前後の条件、状態間の遷移、イベント
(入力)
ユースケーステスト
アクター(ユーザ、システム)、アクターとシステムとの
相互作用(シナリオ)、事前条件、事後条件
制御パステスト
ソースコード (テスト結果の判定の際に仕様)
オールペアテスト
(ペアワイズテスト)
因子、水準、禁則
エラー推定
過去のバグ情報
2015/02/20
JaSST東京2015#D2
4
テストベース
• テストに必要な情報をテストレベルで考える
コンポーネントテスト
コンポーネント要件、詳細設計、ソースコード (スタブ、ド
ライバ、シミュレータ)
統合テスト
ソフトウェア設計もしくはシステム設計、アーキテクチャ、
ワークフロー、ユースケース
システムテスト
システム要求仕様もしくはソフトウェア要求仕様、ユース
ケース、機能仕様 (リスク分析レポート)
受け入れテスト
ユーザ要件、システム要件、ユースケース、ビジネスプロ
セス、リスク分析レポート
2015/02/20
JaSST東京2015#D2
5
テストと仕様の関係
• テストに必要な情報は、実施するテストによっ
て、さまざま
つまり
• テストに必要な情報を、すべて仕様から取れ
るわけではない。
一方で
• 仕様から取れる情報が多いのは事実
– 曖昧でない仕様であれば、テストに必要な情報を
短時間で多く取れるかも?
2015/02/20
JaSST東京2015#D2
6
Part 2
2015/02/20
JaSST東京2015#D2
7
理想の仕様を考えてみよう!
• 「Myersの三角形判定問題」の仕様を考えてみる
– 資料を配布します
– この資料は、セッション終了後に回収します。
• テスト技術者が考える仕様のあり方について、今後の検
討材料とさせていただきます。ご協力をお願いします。
2015/02/20
JaSST東京2015#D2
8
「Myersの三角形判定問題」
• 問題
(「ソフトウェア・テストの技法 第2版」Glenford J.Myers, Tom Badgett, Todd M.Thomas,
Corey Sandler著, 長尾真監訳, 松尾正信訳, 近代科学社, ISBN4-7649-0329-6より)
– 以下のプログラムをテストするのに充分と思われる
一連のテストケースを書いてください。
「このプログラムでは、ユーザが3つの整数を入力します。
この3つの値は、それぞれ三角形の3辺の長さを表すものと
します。プログラムは、三角形が、不等辺三角形、二等辺三
角形、正三角形のうちのどれであるかを決めるメッセージを
出力します。」
2015/02/20
JaSST東京2015#D2
9
「Myersの三角形判定問題」
• 解答
1.
2.
3.
4.
5.
6.
7.
有効な不等辺三角形
有効な正三角形
有効な二等辺三角形
3.の順列組み合わせ
1つが0
1つが負
2つの和がそれ以外の1つ
と等しい
8.
9.
10.
11.
12.
13.
7.の順列組み合わせ
2つの和がそれ以外の1つより
小さい
9.の順列組み合わせ
すべて0
整数ではない値
数値の個数が間違っている
14. 上記それぞれについて、予想
される出力を示したか
※ただし、この解答は、Myersの著書における解答
2015/02/20
JaSST東京2015#D2
10
理想の仕様を考えてみよう!
– 以上が、Myersの三角形判定問題で、仕様からテス
トケースを作成する難しさが理解できる問題になって
います。
• でもこの問題は、仕様の書き方にも問題があると思いま
せんか?
1. あなたは、この14個の解答を得るための仕様はど
のように書いてあったらいいと思いますか?
2. あなたが、仕様に求める情報や条件は何ですか?
2015/02/20
JaSST東京2015#D2
11
Part 3
2015/02/20
JaSST東京2015#D2
12
VDM++仕様を用いた
デシジョンテーブル自動生成ツールVDTableの開発
• 目的
– デシジョンテーブルの作成には、手間と時間がかかる
• 仕様の記述内容の理解(論理関係の把握)
• 条件と動作の抽出
– 形式手法を用いたテスト設計時の作業効率化
VDM + Decision Table
VDM++
仕様
2015/02/20
JaSST東京2015#D2
デシジョン
テーブル
13
VDTableの流れ
VDM++
仕様
Parser
VDMJ
Converter
DTGenerator
デシジョン
テーブル
解析用内部表現データ
条件
構文解析
データ
事前条件
事後条件
モジュール
2015/02/20
JaSST東京2015#D2
動作
真理値
14
構文解析データ
• 抽象構文木をもとに出力したデータ
#access
private
#location
in '/Users/katlab/Documents/workspace/VDMDT/data/Sample.vdmpp' at line 4:3
#name
revBin2dec
#type
(seq of (nat) -> nat)
#kind
explicit function
#body
private revBin2dec: (seq of (nat) -> nat)
revBin2dec(s) ==
(if (s = [])
then 0
elseif (s = [0])
then 0
#access
アクセス修飾子の種類
#location
ユーザが指定した
VDM++仕様のパスと定
義の開始位置
#name
定義名
#type
引数の型
#kind
定義ブロックの種類
#body
定義本体
elseif (s = [1])
then 1
else ((hd s) + (2 * revBin2dec((tl s)))))
2015/02/20
JaSST東京2015#D2
15
解析用内部表現データ
• 構文解析データを解析に適した情報(モジュー
ルの分割、if elseの対応など)に変換したデータ
…
#kind
explicit function
#body
private revBin2dec: (seq of (nat) -> nat)
revBin2dec(s) ==
(if (s = [])
then 0
elseif (s = [0])
then 0
elseif (s = [1])
then 1
else ((hd s) + (2 * revBin2dec((tl s)))))
2015/02/20
JaSST東京2015#D2
if1
(s = [])
then
0
elseif
(s = [0])
then
0
elseif
(s = [1])
then
1
else1
((hd s) + (2 * revBin2dec((tl s))))
16
抽出規則
• 以下の抽出規則に従い、解析用内部表現データ
から条件と動作を抽出しString型の配列に格納
条件抽出処理パターン
動作抽出処理パターン
if “条件’’ then
elseif “条件” then
then “動作’’ if
then “動作’’ elseif
then “動作’’ else
else “動作’’ if
else “動作’’ elseif
else “動作’’ else
else “動作’’ EOF
cases “条件’’ ->
-> “動作’’ cases
others “動作’’ EOF
pre “条件’’ post
pre “条件’’ EOF
post “条件’’ EOF
2015/02/20
JaSST東京2015#D2
※EOF(End Of File)
17
条件配列
条件配列
解析用内部表現データ
if1
(s = [])
then
0
elseif
(s = [0])
then
0
elseif
(s = [1])
then
1
else1
((hd s) + (2 * revBin2dec((tl s))))
2015/02/20
インデックス
ス
条件
0
(s = [])
1
(s = [0])
2
(s = [1])
抽出規則
条件抽出処理パターン
動作抽出処理パターン
if “条件’’ then
elseif “条件” then
then “動作’’ if
then “動作’’ elseif
then “動作’’ else
else “動作’’ else
else “動作’’ elseif
else “動作’’ else
else “動作’’ EOF
-> “動作’’ cases
others “動作’’ EOF
cases “条件’’ ->
pre “条件’’ post
pre “条件’’ EOF
post “条件’’ EOF
JaSST東京2015#D2
※EOF(End Of File)
18
動作配列
動作配列
解析用内部表現データ
if1
(s = [])
then
0
elseif
(s = [0])
then
0
elseif
(s = [1])
then
1
else1
((hd s) + (2 * revBin2dec((tl s))))
2015/02/20
インデックス
動作
0
0
1
1
2
((hd s) + (2 * revBin2dec(( tl s ))))
抽出規則
条件抽出処理パターン
動作抽出処理パターン
if “条件’’ then
elseif “条件” then
then “動作’’ if
then “動作’’ elseif
then “動作’’ else
else “動作’’ else
else “動作’’ elseif
else “動作’’ else
else “動作’’ EOF
-> “動作’’ cases
others “動作’’ EOF
cases “条件’’ ->
pre “条件’’ post
pre “条件’’ EOF
post “条件’’ EOF
JaSST東京2015#D2
※EOF(End Of File)
19
CA-Table
解析用内部表現データ
if1
(s = [])
then
0
elseif
(s = [0])
then
0
elseif
(s = [1])
then
1
else1
((hd s) + (2 * revBin2dec((tl s))))
2015/02/20
条件配列
インデックス
条件
0
(s = [])
1
(s = [0])
2
(s = [1])
CA-Table
条件
インデックス
トークン
動作
インデックス
0
if1
0
1
elseif
0
2
elseif
1
0
else1
2
動作配列
JaSST東京2015#D2
インデックス
動作
0
0
1
1
2
((hd s) + (2 * revBin2dec(( tl s ))))
20
真理値の生成手順
1.
2.
3.
4.
真理値の値を格納する配列を作成
配列の1列目を選択
CA-Tableの1行を選択
トークンを比較し、配列に真理値の値を格納
a.
“if”, “elseif”, “cases”のいずれかに一致した場合
i.
ii.
b.
条件インデックス先の行に対し、選択した列へ“Y”を、次の列から列の終了
まで“N”を格納
選択した列の動作インデックス先へ“X”を格納
“else”, “others”に一致した場合
i.
ii.
条件インデックス先の行に対し、選択した列へ“N”を、次の列から列の終了
まで“-”を格納
選択した列の動作インデックス先へ“X”を格納
5. 選択していない行がある場合、配列の次の列を選択し3.に戻
る。ない場合は真理値が完成
2015/02/20
JaSST東京2015#D2
21
真理値の生成1
1.
2.
3.
真理値の値を格納する配列を作成
配列の1列目を選択
CA-Tableの1行を選択
String型二次元配列
条件数 + 偽(else, others)の数
0
if1
0
1
elseif
0
2
elseif
1
0
else1
2
2015/02/20
動作
インデックス
動作数
トークン
条件数
条件
インデックス
JaSST東京2015#D2
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
22
真理値の生成2
4.
トークンを比較し、配列に真理値の値を格納
a.
“if”, “elseif”, “cases”のいずれかに一致した場合
i.
ii.
条件インデックス先の行に対し、選択した列へ“Y”を、次の列から列の終
了まで“N”を格納
選択した列の動作インデックス先へ“X”を格納
Y
N
N
N
1
-
-
-
-
2
-
-
-
-
条件
インデックス
トークン
0
if1
0
1
elseif
0
0
X
-
-
-
2
elseif
1
1
-
-
-
-
0
else1
2
2
-
-
-
-
2015/02/20
動作
インデックス
0
JaSST東京2015#D2
23
真理値の生成3
5.
選択していない行がある場合、配列の次の列を選択し3.に戻
る
Y
N
N
N
1
-
-
-
-
2
-
-
-
-
条件
インデックス
トークン
0
if1
0
1
elseif
0
0
X
-
-
-
2
elseif
1
1
-
-
-
-
0
else1
2
2
-
-
-
-
2015/02/20
動作
インデックス
0
JaSST東京2015#D2
24
真理値の生成4
4.
トークンを比較し、配列に真理値の値を格納
a.
“if”, “elseif”, “cases”のいずれかに一致した場合
i.
ii.
条件インデックス先の行に対し、選択した列へ“Y”を、次の列から列の終
了まで“N”を格納
選択した列の動作インデックス先へ“X”を格納
Y
N
N
N
1
-
Y
N
N
2
-
-
-
-
条件
インデックス
トークン
0
if1
0
1
elseif
0
0
X
X
-
-
2
elseif
1
1
-
-
-
-
0
else1
2
2
-
-
-
-
2015/02/20
動作
インデックス
0
JaSST東京2015#D2
25
真理値の生成5
4.
トークンを比較し、配列に真理値の値を格納
a.
“if”, “elseif”, “cases”のいずれかに一致した場合
i.
ii.
条件インデックス先の行に対し、選択した列へ“Y”を、次の列から列の終
了まで“N”を格納
選択した列の動作インデックス先へ“X”を格納
Y
N
N
N
1
-
Y
N
N
2
-
-
Y
N
条件
インデックス
トークン
0
if1
0
1
elseif
0
0
X
X
-
-
2
elseif
1
1
-
-
X
-
0
else1
2
2
-
-
-
-
2015/02/20
動作
インデックス
0
JaSST東京2015#D2
26
真理値の生成6
4.
トークンを比較し、配列に真理値の値を格納
b.
“else”, “others”に一致した場合
i.
ii.
条件インデックス先の行に対し、選択した列へ“N”を、次の列から列の終
了まで“-”を格納
選択した列の動作インデックス先へ“X”を格納
Y
N
N
N
1
-
Y
N
N
2
-
-
Y
N
条件
インデックス
トークン
0
if1
0
1
elseif
0
0
X
X
-
-
2
elseif
1
1
-
-
X
-
0
else1
2
2
-
-
-
X
2015/02/20
動作
インデックス
0
JaSST東京2015#D2
27
真理値の生成7
5.
CA-Tableの全ての行を選択し終えた場合、真理値の生成手
順を終了し、真理値が完成
Y
N
N
N
1
-
Y
N
N
2
-
-
Y
N
条件
インデックス
トークン
0
if1
0
1
elseif
0
0
X
X
-
-
2
elseif
1
1
-
-
X
-
0
else1
2
2
-
-
-
X
2015/02/20
動作
インデックス
0
JaSST東京2015#D2
28
デシジョンテーブルの生成
Rule
#1
#2
#3
#4
(s = [])
Y
N
N
N
(s = [0])
-
Y
N
N
(s = [1])
-
-
Y
N
0
X
X
-
-
1
-
-
X
-
((hd s) + (2 * revBin2dec((tl s))))
-
-
-
X
Condition
Action
2015/02/20
JaSST東京2015#D2
29
VDTableの外観
VS-Screen
D-Tree
DT-Panel
2015/02/20
JaSST東京2015#D2
30
DT-Panel
A:モジュールタブ
{Q}:事後条件タブ
{P}:事前条件タブ
2015/02/20
JaSST東京2015#D2
31
D-Tree
描画
任意の定義をクリック
再描画
2015/02/20
JaSST東京2015#D2
32
真理値の生成手順
1.
2.
3.
4.
再掲
真理値の値を格納する配列を作成
配列の1列目を選択
CA-Tableの1行を選択
トークンを比較し、配列に真理値の値を格納
a.
“if”, “elseif”, “cases”のいずれかに一致した場合
i.
ii.
b.
条件インデックス先の行に対し、選択した列へ“Y”を、次の列から列の終了
まで“N”を格納
選択した列の動作インデックス先へ“X”を格納
“else”, “others”に一致した場合
i.
ii.
条件インデックス先の行に対し、選択した列へ“N”を、次の列から列の終了
まで“-”を格納
選択した列の動作インデックス先へ“X”を格納
5. 選択していない行がある場合、配列の次の列を選択し3.に戻
る。ない場合は真理値が完成
2015/02/20
JaSST東京2015#D2
33
テストベース
再掲
• テストに必要な情報をテスト技法で考える
同値分割法
ソフトウェアやシステムへの入力を、同じ処理をする
グループに分割するための情報
境界値分析
さまざまな境界となる値
デシジョンテーブルテスト
条件、条件の組み合わせ、動作(結果)
状態遷移テスト
状態、状態の前後の条件、状態間の遷移、イベント
(入力)
ユースケーステスト
アクター(ユーザ、システム)、アクターとシステムとの
相互作用(シナリオ)、事前条件、事後条件
制御パステスト
ソースコード (テスト結果の判定の際に仕様)
オールペアテスト
(ペアワイズテスト)
因子、水準、禁則
エラー推定
過去のバグ情報
2015/02/20
JaSST東京2015#D2
34
Fly UP