オブジェクト指向システムの設計 170 [無断転載禁止]©5ch.io
■ このスレッドは過去ログ倉庫に格納されています
0207デフォルトの名無しさん
2016/06/02(木) 01:47:36.18ID:3RkkmY6H>>140
> どう組んでもチェック項目は絶対同じ数と内容になる
そうでもないというか、その発想は抜けがあるよ。
たとえば数値が偶数か奇数かを文字列で返す関数があったとしよう。
function foo(value) {
return (value % 2 == 0) ? 'even' : odd';
}
これのチェック項目はfoo(0)とfoo(1)の2つで十分だろう。
だけどさ、関数の中身がこうなっていたらどうする?
(1レスに収めるためにわざと改行せずに一行にしたけどそこは無視して)
function foo(value) {
var i = value % 10;
if (i == 0) return 'even'; if (i == 1) return 'odd';
if (i == 2) return 'even'; if (i == 3) return 'odd';
if (i == 4) return 'even'; if (i == 5) return 'odd';
if (i == 6) return 'odd'; if (i == 7) return 'odd';
if (i == 8) return 'even'; if (i == 9) return 'odd';
}
わざとバグを入れたけど、バグが無ければこの関数は仕様どおりに動くしfoo(0)とfoo(1)のテストにも通る。
だけどこの関数にはバグがあるし、だからチェック項目は2つでは十分ではないということになる。
コーディングの仕方でチェック項目数は変わらないっていうのは、半分は正しい。
もし2つあるコードのどちらも同じぐらい正しい品質であればその通り。
だけどこの例の場合は違う。2つのテストでは足りないということになっている。
この例のあるべき姿はチェック項目数を増やすのではなくて、コードをリファクタリングしてシンプルにすること。
そうすることでチェック項目は2つになるわけだが、ここまでの話で明らかなように
「コーディングの仕方でテスト項目は変わる」というか「悪いコードだとバグがないことを担保するためのテスト項目は増える」
■ このスレッドは過去ログ倉庫に格納されています