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

时间:2015-09-02 16:07:04

标签: testing black-box-testing white-box

可以通过黑盒测试找不到白盒测试的错误吗?

如果是,那么为什么?

据我所知,这是不可能的,但我想肯定地知道。

1 个答案:

答案 0 :(得分: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");
}

通过白盒测试,可以轻松覆盖所有分支。例如,您知道set [-1,5,65,80]将命中所有分支,然后您将在第三个分支中找到错误。使用黑盒测试,您不知道分支条件是什么。你可能会猜到[0,5]会击中所有分支。或者你可能猜测[0,1,56,67,454,45454,454545454]会击中所有分支。为了确保你已经击中了所有的分支,并且没有一个有bug,你将不得不输入每个不可能的数字。

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

  

可以通过黑盒测试找不到白盒测试的错误吗?

如果您想要证明单个程序的答案是“否”,则必须使用黑盒测试才能完成代码覆盖。这个可能可以在非常简单的程序中使用,但随着程序变得越来越复杂,它将很快升级到几乎不可能。