ホワイトボックステストとブラックボックステスト(東子兄の回答に感謝)

1971 ワード

Q:この関数にホワイトボックステスト、ブラックボックステスト、この関数にエラーがないか
// 

float avg(float *list,int count)

{

    float sum = 0.0;

    for(int index = 0;index < count;index++)

        sum += list[index];

    return sum / count;

}

A:
 
float avg(float*list,int count)ブラックボックス:使用例テストホワイトボックス:code review
 
この白い箱の結果:1.コメント2はありません.処理リストが空の場合3.処理countが0または負数の場合4.処理ポインタが溢れていない.sumオーバーフローは処理されていません(このうち5の場合、ブラックボックスはテストしにくいと推定されます).
 
ブラックボックス:avg((float*)null,0);avg(list, 0); avg(list, 5); avg(list, 10); avg(list, -1);//リスト長は10
東子兄さん:ホワイトボックステストは、実はコードの論理によって分岐カバーを行います.さっきのコードは簡単すぎましたが、コードの書き方によって行われました.のさもないと、私もこんなに多くの可能性を考えられません.実は、ブラックボックスを作っておけばよかったのですが、code reviewを作っておけばよかったのです.関数の機能を明確にしたとき..彼の内部がどのように実現しても構わない.私たちは白い箱のテストをしないで、黒い箱とcode reviewだけをします.また、クラスプライベートメソッドのユニットテストはしません.既存のテストフレームワークではprivate関数をテストできません. 
まとめ:
ブラックボックステストというのはテストコードを書かなくてもいいわけではないので、手作業でテストすればいいと思います(うちの会社のテストはこのような認識があるようです).ブラックボックスの定義は、予め定義された機能に基づいて、入出力を計画します.例えば、机能は入力XがYを得る必要があることを规定して、それでは入力Xは出力がYかどうかを判断して、YでなければBUGをしても、これは完全にテスト用例を通じて书くことができて、しかし白箱と黒箱の违いは何ですか?ホワイトボックスはまずコードを読むことによって、テスト用例とその入力を組織して、プログラムの実行分岐を自分の望むようにして、それから辺の角の論理、分岐、境界をすべて覆って、コードの断片だけから見ると、違いが見えないはずで、しかも大部分のテスト用例があって、ホワイトボックスとブラックボックスは重なっていますが、ホワイトボックスの用例はブラックボックスよりずっと多いはずなので、コストは実はブラックボックスより高いです.だから会社とチームの策略は白箱を書かないで黒箱のテストだけを書いて、code reviewで白箱の代わりにします