どんな単体テストをしますか? - for文のホワイトボックステスト その2
ずいぶん、亀自己レス。
==
for文を含むプログラムでは具体的にどうやってホワイトボックス的アプローチをするのか。ループする回数を同値分解するのはどうだろうか。0回、1回、無限回(実際に無限回はありえないので一般的な大数か)とか。んで、今回のソースはmonthという入力条件があるので、

の3条件は少なくともチェックしたい。まあ、こうもいかないループもありそうだけど。。。
==
2007/06/17追記。
よく考えたら、month=12のがいいな。そうすればループ内のswitch文でcase 1~case 12までを経由できるし。
| 固定リンク
この記事へのコメントは終了しました。

コメント
Month=12(monthパラメータの有効クラス)が必要だと思います。
Monthの設定の事前条件によっては変更されると思いますが、i
投稿: ただいま修行中 | 2007年6月19日 (火) 08:28
ループテストは、通常次の条件でテストします。
1. ループしないケース(month = 0)
2. 1回だけのループ(month = 1)
3. よくあるケース(month = 6)
4. 最大ループ数-1(month = 11)
5. 最大ループ数(month = 12)
6. 最大ループ数+1(month = 13)
7. 2のべき乗(month = 256, 65536, 4,294,967,296)
(7については、今回は上限を超えているのでテスト不要ですが、要するに桁あふれの確認です)
投稿: あきやま | 2007年6月19日 (火) 10:00
>ただいま修行中さん
コメントありがとうございます。
僕も記事を眺めていて、month=13よりmonth=12のほうがベターだなと
思いました。
# ここだけ切り出してますが、本来はmonth=13はパラメータチェックで
# NGになってしまって、ここまでたどり着かないですしね。。
投稿: softest | 2007年6月19日 (火) 10:19
>あきやまさん
コメントありがとうございます。
3番目のよくあるケース(最頻ケース?)はテストフェーズによっては
あったり、なかったりするものでしょうか?
(システムテストよりの場合は必要で、単体テストレベルでは割愛される
場合もある、とか)
投稿: softest | 2007年6月19日 (火) 10:26
> 3番目のよくあるケース(最頻ケース?)は
> テストフェーズによってはあったり、
> なかったりするものでしょうか?
いや。ループテストの場合は、よくあるケースについて考えることは重要です。
というのは、ループが2重、3重になってくると、最大ループ数も掛け算で増えてくるので場合によってはテスト時間がとんでもないことになってしまうからです。
そんなときは、最大ループ数のひとつを最頻ケースに置き換えたテストをする場合もあります。
基本は、
最大ループ×最大ループ×最大ループ×……
ですのであくまでも効率との兼ね合いでの話です。
投稿: あきやま | 2007年6月19日 (火) 11:22
>あきやまさん
>基本は、
> 最大ループ×最大ループ×最大ループ×……
>ですのであくまでも効率との兼ね合いでの話です。
ループのネストが深い場合に、効率的なやり方をするために
最頻ケースで置き換えるということですね。
# 周りも自分もなかなか最大×最大×・・・というケースを
# 考慮しないことがあるかも。汗汗汗
投稿: softest | 2007年6月19日 (火) 11:49
はいそうです。
for (i = 0; ...
for (j = 0; ...
for (k = 0; ...
とネストしていった時に、i, j, k, ...のどのループ変数については、最大ネスト数でなくても構わないかといったことを検討します。
投稿: あきやま | 2007年6月19日 (火) 12:20
>あきやまさん
解説ありがとうございます。ループの検証って思ったよりも
大変なのがわかりました。。。
投稿: softest | 2007年6月20日 (水) 22:08