单独的黑盒测试能捕获白盒测试捕获的所有错误吗?



有可能在白盒测试中发现黑盒测试无法发现的错误吗?

如果是,那么为什么?

据我所知,这是不可能的,但我想确定一下。

我可以试试。

答案可能是"否",因为如果您为一个操作提供了所有可能的输入,您就可以验证应用程序是否在所有可能的情况下都能正确地运行,因此黑盒测试将最终找到中的每个bug

但在现实中,为每一个可能的动作提供每一个可能的输入并不容易实现(或者有时是不可能的)。换句话说,在没有看到代码的情况下,为应用程序代码中的每个可能路径编写测试是非常困难的。白盒测试在捕捉奇怪的情况时更有效,因为您可以看到实现。一个非常简单的例子是,您知道特定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]将击中所有分支,然后您将在第三个分支中找到错误。使用黑盒测试时,您不知道分支条件是什么。你可能会猜到[0,5]会击中所有的分支。或者你可以猜测[0,1,56,67,454,454554,454545454]会击中所有的分支。为了确保你击中了所有的分支,并且没有任何一个分支有bug,你必须输入每一个数字,这是不可能的。

我并不是说每个应用程序都有完整的代码覆盖,这远非事实。但是回到最初的问题:

是否有可能在白盒测试中发现黑盒测试无法发现的错误?

如果您想证明答案是"否",那么您必须只使用黑盒测试来获得完整的代码覆盖率。这个可能在非常简单的程序中是可行的,但是当你的程序变得更复杂时,它将很快升级到几乎不可能。

相关内容

  • 没有找到相关文章

最新更新