可以通过黑盒测试找不到白盒测试的错误吗?
如果是,那么为什么?
据我所知,这是不可能的,但我想肯定地知道。
答案 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,你将不得不输入每个不可能的数字。
我并不是说每个应用程序都有完整的代码覆盖率,这远非如此。但回到原来的问题:
可以通过黑盒测试找不到白盒测试的错误吗?
如果您想要证明单个程序的答案是“否”,则必须使用黑盒测试才能完成代码覆盖。这个可能可以在非常简单的程序中使用,但随着程序变得越来越复杂,它将很快升级到几乎不可能。