0

是否可以通过白盒测试找到无法通过黑盒测试找到的错误?

如果是,那为什么?

据我了解,这是不可能的,但我想确定。

4

1 回答 1

1

我可以试一试。

答案可能是“否”,因为如果您为操作提供所有可能的输入,您可以验证应用程序在所有可能的情况下是否正确运行,因此黑盒测试最终会发现每个错误。

但实际上,为每一个可能的动作提供每一个可能的输入并不容易实现(或者有时不可能一起完成)。换句话说,很难在没有看到代码的情况下为应用程序代码中的每个可能路径编写测试。白盒测试在捕获奇怪的情况方面效率更高,因为您可以看到实现。一个非常简单的例子是您知道特定 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, 45454, 454545454] 会击中所有分支。为了确保你已经打到了所有的分支并且它们都没有错误,你必须输入每一个不可能的数字。

我并不是说每个应用程序都有完整的代码覆盖率,这远非​​如此。但回到原来的问题:

是否可以通过白盒测试找到无法通过黑盒测试找到的错误?

如果您想证明仅针对单个程序的答案是否定的,则必须仅使用黑盒测试来获得完整的代码覆盖率。这在非常琐碎的程序中可能是可行的,但随着程序变得越来越复杂,它会迅速升级到几乎不可能。

于 2015-09-02T18:00:27.723 回答