技術とか戦略とか

証券レガシーシステムを8年間いじった普通のSEによるブログ。技術のみではなく趣味の戦略考察についても。PCから見た方が色々見やすいと思います。

情報処理技術者試験対策「ホワイトボックステストのテストケース設定」

目次

https://1drv.ms/b/s!AivF3bzWXOzuhG1Xk5hscKYqkLkM

-------------------------------
新人に単体テストを任せると大抵テスト漏れでやらかして同じような指導をしているので…これを期に今まで指導してきた内容を記事として残します。
ブラックボックステストについては次回の記事で説明するとして、今回はホワイトボックステストの話をします。
 
例として、以下のような分岐を考えます。
自分の責任で遅刻した時(迷子や寝坊)に言い訳をする処理です。
f:id:akira2kun:20180704065451j:plain
ホワイトボックステストのテストケースの設定方法としては、以下のものがあります。
・命令網羅
 全ての命令を1回以上実行

・判定条件網羅(分岐網羅)
 全ての経路を1回以上通過
・条件網羅
 判定条件中の全ての条件について真/偽それぞれ実行
・判定条件/条件網羅
 判定条件網羅+条件網羅
・複数条件網羅
 判定条件中の条件の全ての組み合わせを網羅
 
今回の例では、それぞれ以下のようなテストケースの設定となります。
 f:id:akira2kun:20180704065517j:plain
ちなみに、カバレージツールは、テストケースの網羅性を客観的に判断するために使用します。
大抵のカバレージツールでは、C0カバレージとC1カバレージを計測します。
C0は命令網羅、C1は判定条件網羅を計測します。
原則としてカバレージは100%を達成する必要があります。
(ただし、単体テストでは発生しない例外条件がある等の理由で100%を必達としない現場はあります)
しかし、仮にC0・C1が共に100%だったとしても、必要なテストが網羅されたわけではないということは上記の例を見れば明らかだと思います。
バレージ的には、寝坊フラグ=trueのケースをテストしなくてもOKということになってしまいますが、カバレージの結果だけを見て単体テスト完了としてしまうと後で痛い目を見ます。
例えば、いつもの集合場所で待ち合わせる場合にも「いやぁ道が入り組んでて…」という言い訳を返すバグが総合テストで見つかったり…。
そうならないために、プログラムの目的を理解した上で、必要なテストケースを各自の判断で盛り込む必要があります。
 
なお、今回は一つの判定条件に注目しましたが、実際にテストケースを考える時は複数の判定条件の組み合わせを考える必要がある場合もあります。
例えば、以下のような例の場合、怖い上司かどうかで言い訳関数の挙動が変わるかどうかも見る必要が出てきます。
(怖い上司の時にしっかりとした言い訳を返してくれるか気になりますよね…?)

f:id:akira2kun:20180704223851j:plain

ただし、ある判定条件の結果が別の判定条件の結果に影響を及ぼさないなら、判定条件の組み合わせを考える必要がありません。
上の例で怖い上司の判定条件の代わりに今日の運勢の判定条件であれば、(運勢次第で言い訳を変える人でなければ)この2つの判定条件の組み合わせを考える必要はありません。