テスト駆動開発はなぜ流行らなかったのか?
■ このスレッドは過去ログ倉庫に格納されています
0667デフォルトの名無しさん
2014/01/03(金) 03:02:20.66int a;
int n;
int table[4]={1,2,3,4};
for(n=0;n<4;n++)
{
a=table[n];
...(略)
}
みたいなコードの「n<4」が「n<=4」となっていてもまず検出できない。
あとテーブルの数を増やすとループ回数と整合とれなくてバグったり。
単純な初期化処理のループなら、毎回すべての値が参照されるけど、例えば
テーブル参照してコマンドライン引数と照合するような処理の場合、仕様上は
未定義の引数を与えてテーブルの最後まで参照しないとバグが見つからない
とかある。 WindowsやLinuxみたいなメモリ保護のあるOS下であっても、要素
数を超える配列をアクセスしてもページ境界を超えなければ保護エラーには
ならない。
本来は「n<(sizeof((table)/sizeof(table[0]))」とか
#define LOOP_COUNT (sizeof((table)/sizeof(table[0]))と定義しておいて
「n<LOOP_COUNT」とか書くべき。 でもテストツールではこういう不適切な
コーディングは検出できない。
■ このスレッドは過去ログ倉庫に格納されています