ソフトウェアテスト
[6] ホワイトボックステス
ト
Software Testing
[6] White Box Testing Techniques
あまん ひろひさ ひろひさ
阿萬 裕久 裕久( AMAN
Hirohisa )
(C) 2007-2022 Hirohisa AMAN
1
テストの分類分類
第 4 回で説明,第5回に演習で説明,第5回に演習説明,第5回で説明,第5回に演習に基づいた演習
ブラックボックステスト
プログラムの中身は見ないもの(ブラックボッの分類中身は見ないもの(ブラックボッは見ないもの(ブラックボッ見ないもの(ブラックボッないもの分類(ブラックボッ
クス)として,仕様に基づいたに基づいた基づいたづいた動作テストを行テストを行行
う
ホワイトボックステスト
プログラムの中身は見ないもの(ブラックボッの分類内部構造(主にフローチャート)に基づいたフローチャート)
に基づいた基づいたづいた動作テストを行テストを行行う
ランダムの中身は見ないもの(ブラックボッテスト
テストケースを行ランダムの中身は見ないもの(ブラックボッに基づいた(無作テストを行為に)作成に基づいた)作テストを行成し
て動作テストを行テストを行行う
(C) 2007-2022 Hirohisa AMAN
2
ホワイトボックステスト法
仕様に基づいたで説明,第5回に演習は見ないもの(ブラックボッなくソースプログラムの中身は見ないもの(ブラックボッの分類構造(中
身は見ないもの(ブラックボッ)に基づいた注目してテストケースを設計する方してテストケースを行設計する方する方方
法
要求仕様に基づいたに基づいた沿ったテストではないったテストで説明,第5回に演習は見ないもの(ブラックボッない
ソースプログラムの中身は見ないもの(ブラックボッで説明,第5回に演習の分類構造の分類複雑さ(条件のさ(条件のの分類
組合せ等)に対処するものせ等)に対処するもの等)に基づいた対処するものする方もの分類
ブラックボックステストを行補足するテストする方テスト
(C) 2007-2022 Hirohisa AMAN
3
ホワイトボックステスト法(1)
命令網羅法
すべての分類命令文を1回以上実行を行1回で説明,第5回に演習以上実行する方
1個のテストケース(実行パス)だけでは無の分類テストケース(実行パス)だけで説明,第5回に演習は見ないもの(ブラックボッ無
理な場合もあるな場合せ等)に対処するものもある方
しかし,異なるテストケースなる方テストケースを行いくつか実行
し,その分類集合せ等)に対処するものを行考えれば網羅は可能えれば網羅は可能網羅は見ないもの(ブラックボッ可能
実行で説明,第5回に演習きた命令の分類割合せ等)に対処するものを行命令網羅率という
これを行 C0 ともいう
(C) 2007-2022 Hirohisa AMAN
4
テスト対象の例の分類例
void foo(int x, int y){
int sum, n;
sum = 0;
for ( n = 0; n < x; n++ ){
sum += n;
}
if ( sum < y ){
printf("%dn", sum);
}
else{
printf("%dn", y);
}
}
【入力】
引数 x, y
【出力】
printf で説明,第5回に演習出力される方
値
(C) 2007-2022 Hirohisa AMAN
5
命令網羅の分類例: x = 1, y = 0
ソースコード
実行の分類有無
void foo(int x, int y){
int sum, n;
○
sum = 0;
○
for ( n = 0; n < x; n+
+ ){
sum += n;
}
printf("%dn", sum);
}
}
else{
else{
printf("%dn", y);
}
}
命令網羅率( C0 )
○
○
--○
if ( sum < y ){
}
}
---
☓
--------○
---------AMAN
(C) 2007-2022 Hirohisa
← sum = 0 なの分類で説明,第5回に演習
【注意】
あらかじめ「どれを行実
行可能な命令として数
える方か」を行定義しておしてお
く必要がある方
6
命令網羅率 100% の分類例
ソースコード
x=1, y=0
x=1, y=1
total
---
---
---
int sum, n;
○
○
○
sum = 0;
○
○
○
○
○
○
○
○
○
--○
--○
--○
☓
○
○
--------○
--------☓
--------○
---------
---------
void foo(int x, int y){
for ( n = 0; n < x; n+
+ ){
sum += n;
}
if ( sum < y ){
printf("%dn", sum);
}
}
else{
else{
printf("%dn", y);
}
}
}
}
--------- AMAN
(C) 2007-2022 Hirohisa
7
フローチャートを行描いた場合いた場合せ等)に対処するもの
テストケース① x = 1, y = 0
START
一部の分類命令が
実行されていない
sum = 0
F
sum < y
n=0
n
n++
F
T
sum 出力
y 出力
T
sum += n
END
(C) 2007-2022 Hirohisa AMAN
8
フローチャートを行描いた場合いた場合せ等)に対処するもの
テストケース② x = 1, y = 1
START
sum = 0
F
sum < y
n=0
n
n++
F
テストケース① で説明,第5回に演習
実行されなかった
命令を行カバー
T
sum 出力
y 出力
T
sum += n
END
(C) 2007-2022 Hirohisa AMAN
9
ホワイトボックステスト法(2)
分岐網羅法
すべての分類条件の分岐( if 文を1回以上実行 , while 文を1回以上実行 , for
文を1回以上実行)に基づいたおいて, True (真)となる方場合せ等)に対処するものと
False (偽)となる方場合せ等)に対処するものを行それぞれ1回で説明,第5回に演習以
上実行する方
やは見ないもの(ブラックボッり,複数の分類テストケースの分類集合せ等)に対処するもので説明,第5回に演習もって
網羅で説明,第5回に演習きれば網羅は可能よい
全条件のの分類「 T 」と「 F 」を行経験した割合した割合せ等)に対処するものを行分
岐網羅率という
これを行 C1 ともいう
(C) 2007-2022 Hirohisa AMAN
10
分岐網羅の分類例: x = 1, y = 0
ソースコード
実行
T, F
---
---
int sum, n;
○
---
sum = 0;
○
---
void foo(int x, int y){
for ( n = 0; n < x; n+
+ ){
○
F
○
sum += n;
---
}
--○
if ( sum < y ){
printf("%dn", sum);
☓
---F
---
}
---
---
else{
--○
---
printf("%dn", y);
}
}
T
分岐網羅率 (C1)
-----
---
---
---
(C) 2007-2022 Hirohisa AMAN
11
分岐網羅率 100% の分類例
ソースコード
x=1, y=0
x=1, y=1
total
---
---
---
int sum, n;
---
---
---
sum = 0;
---
---
---
void foo(int x, int y){
for ( n = 0; n < x; n+
+ ){
sum += n;
T
F
---
}
--- F
T
F
---
T ---
T
F
---
T --- F
if ( sum < y ){
printf("%dn", sum);
---
---
---
}
---
---
---
else{
---
---
---
---
---
---
---
---
---
---
---
---
printf("%dn", y);
}
}
(C) 2007-2022 Hirohisa AMAN
12
フローチャートを行描いた場合いた場合せ等)に対処するもの
テストケース① x = 1, y = 0
START
T と F の分類
両方を行経験した割合
F の分類み
を行経験した割合
F
sum < y
n=0
n
n++
その分類ため,
分岐網羅率
(C1) は見ないもの(ブラックボッ 3/4
sum = 0
F
T
sum 出力
y 出力
T
sum += n
END
(C) 2007-2022 Hirohisa AMAN
13
フローチャートを行描いた場合いた場合せ等)に対処するもの
テストケース② x = 1, y = 1
テストケース① で説明,第5回に演習
実行されなかった
「 T 」側をカバーを行カバー
START
sum = 0
F
sum < y
n=0
n
n++
F
T
sum 出力
y 出力
T
sum += n
END
(C) 2007-2022 Hirohisa AMAN
14
別の例でも考えてみようの分類例で説明,第5回に演習も考えれば網羅は可能えてみよう
パスワードの分類簡易的なセキュリティチェッなセキュリティチェッ
クを行行うプログラムの中身は見ないもの(ブラックボッを行考えれば網羅は可能える方
【チェック項目してテストケースを設計する方】
パスワードの分類長さはさは見ないもの(ブラックボッ 6 文を1回以上実行字以上に基づいたなっている方
か?
パスワードがユーザ名と同じになっていない名と同じになっていないと同じになっていないじに基づいたなっていない
か?
(C) 2007-2022 Hirohisa AMAN
15
分岐網羅率 75 % ( =3/4 ) の分類例
テストケース
START
パスワード長さは
>= 6
①
③
F
No 出力
END
F
T
②
(ユーザ名と同じになっていない名と同じになっていない,パスワード)
① ( "taro", "" )
② ( "taro", "foobar" )
③ ( "taro", "taro" )
パスワード
!= ユーザ名と同じになっていない名と同じになっていない
パスワード長さはで説明,第5回に演習 6 未
満とと
②
T
6 以上があり,ユーザ名と同じになっていない
OK 出力
名と同じになっていないとパスワードが違うう
もの分類と同じになっていないじもの分類とがあ
る方が,網羅で説明,第5回に演習きていな
(C) 2007-2022 Hirohisa AMAN
16
い
(注)プログラムの中身は見ないもの(ブラックボッ中の分類
} は見ないもの(ブラックボッ命令として数えない
【演習1】
命令網羅率と分岐網羅率を行計する方算せよせ等)に対処するものよ
右のコードについの分類コードに基づいたつい
て2つの分類テスト
ケースを行実行した
(n, limit)
= (2, 1), (-2, 0)
この分類場合せ等)に対処するものの分類
命令網羅率( C0 )
と
分岐網羅率( C1 )
を行
計する方算せよせ等)に対処するものよ
if ( n < 0 ){
n *= -1;
}
sum = 0;
for ( i = 0; i < n; i+
+ ){
sum += i;
if ( sum > limit ){
sum = 0;
}
}
printf("%dn", sum);
(C) 2007-2022 Hirohisa AMAN
17
【演習1】 解答:① と② で説明,第5回に演習100%
テストケース
START
( n, limit ) =
① ( 2, 1 )
② ( -2, 0 )
i=0
F
n<0
① ②
i
T
n *= -1
①
T
F
sum 出力
sum = 0
sum += i
i++
①
F
sum > limit
T
②
①
sum = 0
END
(C) 2007-2022 Hirohisa AMAN
18
【演習2】
分岐網羅率を行計する方算せよせ等)に対処するものよ
(注) return 文を1回以上実行を行実行
する方と,その分類時点で関数で説明,第5回に演習関数
が終了する点に注意せよする方点で関数に基づいた注意せ等)に対処するものよ
int is_prime(int n){
int k;
is_prime(1);
if ( n < 2 ){
return 0;
is_prime(2);
}
と呼出してテスト for ( k = 2; k < n; k+
+ ){
した場合せ等)に対処するものの分類
分岐網羅率( C1 ) if ( n % k == 0 ){
return 0;
を行計する方算せよせ等)に対処するものよ
}
}
(※フローチャートの分類描いた場合
return 1;
画はは見ないもの(ブラックボッ
必須ではない)で説明,第5回に演習は見ないもの(ブラックボッない)
}
(C) 2007-2022 Hirohisa AMAN
19
右のコードについの分類関数を行
演習2 用メモメモ
ソースコード
n=1, n=2 それぞれに基づいたついて,
実行の分類有無を行確認しながら,しながら,
条件のの分類 T, F を行メモしていくとよい
n=1
実行
条件の
int k;
n=2
実行
条件の
total
---
---
---
---
---
---
---
---
---
---
---
---
---
---
---
---
---
---
---
---
---
if ( n < 2 ){
return 0;
}
for ( k = 2; k < n; k+
+ ){
if ( n % k == 0 ){
return 0;
}
}
return 1;
(C) 2007-2022 Hirohisa AMAN
20