2015-09-02 43 views

回答

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]會擊中所有分支。爲了確保你已經擊中了所有的分支,並且他們都沒有錯誤,你將不得不輸入每個不可能的數字。

我並不是說每個應用程序都有完整的代碼覆蓋範圍,這遠非如此。但回到原來的問題:

是否有可能發現與黑盒測試找不到的白盒測試錯誤?

如果您想要證明單個程序的答案是「否」,那麼您將不得不使用黑盒測試來完整覆蓋代​​碼。這個可能可以在非常小的程序中執行,但隨着程序變得更加複雜,它會很快升級到幾乎不可能的。