ブラックボックステストでは見つけられないエラーをホワイトボックステストで見つけることは可能ですか?
もしそうなら、なぜですか?
私が理解しているように、これは不可能ですが、確かに知りたいです。
ブラックボックステストでは見つけられないエラーをホワイトボックステストで見つけることは可能ですか?
もしそうなら、なぜですか?
私が理解しているように、これは不可能ですが、確かに知りたいです。
私はこれを試してみることができます。
アクションに対して考えられるすべての入力を提供すると、考えられるすべての状況でアプリケーションが正しく動作するかどうかを検証できるという意味で、答えは「いいえ」になる可能性があります。そのため、ブラック ボックス テストでは最終的にすべてのバグが検出されます。
しかし、実際には、考えられるすべてのアクションに対してすべての可能な入力を提供することは簡単ではありません (または、すべてを同時に行うことは不可能な場合もあります)。言い換えれば、コードを見ずに、アプリケーションのコードで考えられるすべてのパスのテストを作成することは非常に困難です。ホワイト ボックス テストは、実装を確認できるため、異常なケースを検出するのにはるかに効率的です。非常に単純な例は、特定の if ステートメントの境界ケースを知っている場合です。
次のようなコード スニペットを持つ非常に基本的なプログラムがあるとします。
if (input < 0) {
print("Input is negative");
} else if (input >= 0 && input <= 60) {
print("Input is between 0 and 60, inclusive");
} else if (input > 60 && input < 70) {
print("Input is between 50 and 70, exclusive); //error
} else {
print("Blah");
}
ホワイト ボックス テストを使用すると、すべてのブランチを非常に簡単にカバーできます。たとえば、セット [-1, 5, 65, 80] はすべての分岐にヒットすることがわかっているため、3 番目の分岐でエラーが見つかります。ブラック ボックス テストでは、分岐条件が何であるかがわかりません。[0, 5] がすべての分岐にヒットすると推測するかもしれません。または、[0, 1, 56, 67, 454, 45454, 454545454] がすべてのブランチにヒットすることを推測するかもしれません。すべてのブランチにヒットし、どのブランチにもバグがないことを確認するには、すべての番号を入力する必要がありますが、これは不可能です。
すべてのアプリケーションが完全なコード カバレッジを持っていると言っているわけではありません。これは真実とはほど遠いものです。しかし、元の質問に戻ります:
ブラックボックステストでは見つけられないエラーをホワイトボックステストで見つけることは可能ですか?
1 つのプログラムについてのみ答えが「いいえ」であることを証明したい場合は、ブラック ボックス テストのみを使用して完全なコード カバレッジを取得する必要があります。これは非常に些細なプログラムでは実行可能かもしれませんが、プログラムがより複雑になるにつれて、すぐにほとんど不可能にエスカレートします。