一個程序可以被證明是“正確”的嗎?
不可以?赡軙幸恍┓浅P〉奈⒖s程序,在特殊條件下可以被證明是“正確”的——也就是,我們可以使用數學方法證明它們不可能給出不正確的結果。5但在現實世界的程序中,答案是否定的。起初,人們以為這只是一個組合數學問題。就是說,如果我們通過一個不太小的程序考慮所有路徑組合,我們很快就可以得出結論,窮舉測試任何軟件都是一個不可能的任務。這與NP完全問題是類似的。但是,實際上,這種窮舉測試比NP完全問題更糟糕。證明程序是正確的等價于解決停機問題。而從圖靈的工作我們可以知道這是不可能的任務。
那么我們為什么要測試程序?正如我們只能得出結論,理論在我們的實驗覆蓋的領域中是適用和正確的,我們也只能說程序在我們進行測試的數據集上是正確的。而正如一個“否定實驗”可以推翻一個理論,一個“失敗的測試”可以指出一個先前被認為沒有錯誤的軟件存在缺陷。因此我們永遠不能保證一個軟件是“沒有缺陷”的。我們所能做的是通過對其進行更大更密集數據集的測試來增加我們對它的信心。