1 学生実験第1 ソフトウェア基礎

第6,7回課題
テスト・文書作成
学生実験第1
ソフトウェア基礎
 テストを実施し、テスト報告書を作成する
 テスト実行のための入力を作成し、プログラムを
実行する
 エラーが発見されたら修正する
 テストの結果をテスト報告書にまとめる
テスト・文書作成
 マニュアルを作成する
 書式はオンラインマニュアル(man)に準じる
59
58
テスト
テスト技法(p.15)
 テストとは、エラーを発見するためにプログラ
ムを実行すること
 ブラックボックステスト




エラーとは仕様とプログラムの不整合
エラ がないことを確認する作業ではない
エラーがないことを確認する作業ではない
テストの目的はエラーの発見である
高品質なテストとはエラーを多く発見できるテスト
 内部構造に関係なく、要求仕様から得たテスト
ケースを使用する
 ホワイトボックステスト
 内部構造に基づき、決められた網羅基準を満たす
ようにテストケースを作成する
 回帰テスト
 テストケース
 テスト対象への入力データと予想される結果の組
 予想される結果は必ずテスト実行前に決めておく
 プログラム修正の結果、問題が発生しないかどう
か調べる
60
61
ブラックボックステスト
同値分割の例: 1行の文字数(1)
 境界値分析
仕様: 1行n文字を超えたら改行する
入力条件: 改行処理が1回だけ起きる
 あるデータの境界値をもとにテストケースを選択
 境界値と、境界値から少しずれた値
 同値分割
 ある入力条件に着目して有効な値のクラスと無効
な値のクラスに分ける
 各同値クラスから代表テストケースを選択
 各同値クラスが範囲を持つ場合は境界値分析で
選択
62
有効同値クラス
範囲
n+1~2n
境界値
n+1, 2n
無効同値クラス
0~n,2n+1~
0, n,2n+1
境界値から少しずれた値: 1, n-1, 2n-1 など
テストケースとして以下の文字数の行を入力として選択
0, 1, n-1, n, n+1, 2n-1, 2n, 2n+1
63
1
同値分割の例: 1行の文字数(2)
同値分割の例: 1行の文字数(3)
仕様: 1行n文字を超えたら改行する
入力条件: 改行処理が2回起きる
仕様: 1行の文字数がmを超えたら処理できない
入力条件: 行文字数エラーが発生する
有効同値クラス
範囲
2n+1~3n
無効同値クラス 0~2n,3n+1~
境界値
2n+1, 3n
有効同値クラス
範囲
m+1~
境界値
m+1
0, 2n,3n+1
無効同値クラス
0~m
0,m
境界値から少しずれた値: 1, 2n-1, 3n-1 など
境界値から少しずれた値: 1, m-1 など
テストケースとして以下の文字数の行を入力として選択
0, 1, 2n-1, 2n, 2n+1, 3n-1, 3n, 3n+1
テストケースとして以下の文字数の行を入力として選択
0, 1, m-1, m, m+1
64
境界値分析の例: タブ文字の処理
65
ブラックボックステスト項目
 少なくとも、仕様における以下の項目について、
入力条件を列挙し、テストケースを設計するこ
と
仕様: タブ文字が入力されたら、8の倍数文字目まで
空白を出力する
テストケース:
タブ文字が8k文字目に現れる場合
タブ文字が8k-1文字目に現れる場合
タブ文字が8k+1文字目に現れる場合





1行の文字数
1ページの行数
長いファイル名
タブ文字の処理
エラー発生
66
67
ホワイトボックステスト
ホワイトボックステストの網羅基準
 プログラムの内部構造に基づくテスト
 網羅基準をさだめ、その網羅基準を満たすよ
うにテストケースを選択
 全命令網羅
 すべてのステートメントを1回以上実行するような経路の集
合を選択
 テスト網羅基準としては弱い
 全分岐網羅
 すべての分岐方向を1回以上実行するような経路の集合を
選択
 全経路網羅
 すべての実行経路を実行する
 一般に実行経路の数は膨大であり、全経路網羅を満たす
テストは不可能
68
69
2
網羅基準を満たすテストケース
a
x>1
and
y == 0
b
全経路網羅:
abd, abe, acd, ace
Yes
No
d
c
z=z/x
N
No
x == 2
or
z>1
反復処理における分岐網羅
Yes
e
全命令網羅を満たす経路の組合せ:
ace (x=2, y=0, z=3)
 反復条件により、分岐が起きると考える
 反復条件が1回以上成立するテストケースを
選択すれば命令網羅、分岐網羅を満たす
for文、while文
全分岐網羅を満たす経路の組合せ:
acd (x=3, y=0, z=3) と
abe (x=2, y=1, z=1)
a
条件
Yes b
または
z=z+1
No
c
d
abd (x=0, y=0, z=0) と
ace (x=2, y=0, z=3)
70
do while文
e
全命令網羅
abdc
全分岐網羅
abdc
全経路網羅
ac,
abdc,
abdbdc,
……
f
g
Yes
条件
h
No
全命令網羅
efh
全分岐網羅
efgfh
全経路網羅
efh,
efgfh,
efgfgfh,
……
71
LEXのルール部における分岐網羅
回帰テスト
 状態遷移を分岐とみなすことができる
 すべてのテストケースを用いて再びテストする
 すべての状態遷移が実行されるように入力を選択
 修正によってエラーが取り除かれたか調べる
 修正によって新たなエラーが埋め込まれていない
か調べる
72
73
テスト手順
テスト報告書の項目(p.20)
1. ブラックボックステストに基づいてテストケース(入力と予
想される実行結果)を設計
2. テスト実行を行い、問題が生じた場合はプログラムを修正
3. 1. で設計したテストケースが全分岐網羅を満たすかどう
か調べ、満たさない場合は満たすようにテストケースを追
加
4. テスト実行を行い、問題が生じた場合はプログラムを修正
5. 回帰テストを行う
6. テスト報告書を作成する
 ブラックボックステストのテスト項目
 ホワイトボックステストのテスト項目
 テストフェーズ全体で発見できた誤りの総数
74
75
3
各テスト項目の記述
 テスト項目の説明
 ブラックボックステストの着目した仕様と入力条件
 ホワイトボックステストのテスト対象のコードの説明
 テストケースと予想される結果の説明
 ただし、入力データをそのまま記述する必要はない
 テスト実行の結果
 対処
 誤りが発見された場合の対処
76
4