2008-08-19 46 views
7

如何創建,維護和思考編寫數值分析代碼的測試例程,是否有很好的在線資源?如何測試數值分析例程?

對於像測試矩陣乘法這樣的東西,其中一個侷限性是,明顯的測試(如使用一個矩陣作爲標識)可能無法完全測試代碼的功能。

此外,有一個事實,即您通常也處理大型數據結構。有沒有人有一些好的想法來解決這個問題,或者有指向好看的地方?

回答

3

聽起來好像你需要考慮測試至少兩種不同的方式:

  1. 一些數值方法允許一些元思維。例如,可逆操作允許您設置測試用例,以查看結果是否在原始可接受的誤差範圍內。例如,矩陣M-逆倍矩陣中號 *隨機矢量V應導致V再次,對錯誤的一些可接受的度量內。
    很明顯,這個例子演示了矩陣求逆,矩陣乘法和矩陣向量乘法。我喜歡這樣的鏈條,因爲你可以產生大量的隨機測試用例,並獲得統計學的覆蓋範圍,這將成爲必須手動編寫的難題。不過,他們並沒有單獨行動。

  2. 一些數值方法具有它們的誤差的封閉表達式。如果您可以使用已知解決方案來設置情況,則可以比較解決方案和計算結果之間的差異,尋找超出這些已知邊界的差異。

從根本上說,這個問題說明了測試複雜方法的問題需要相當多的領域知識。具體的參考文獻需要更多關於你正在測試的信息。我肯定會建議你至少有Steve Yegge's recommended book list在手邊。

1

看看書David GriesThe Science of Programming。這是關於證明程序的正確性。如果你想確保你的程序是正確的(爲了證明它們的正確性),這本書是一個很好的開始。

可能不是你要找的東西,但它是軟件工程問題的計算機科學答案。

2

如果您打算進行矩陣計算,請使用LAPACK。這是經過很好測試的代碼。幾十年來,非常聰明的人一直在努力。他們深刻思考了那些外行絕不會想到的問題。

一般來說,我會推薦兩種測試:系統性和隨機性。系統的意思是探索邊緣案例等。它可以幫助您閱讀源代碼。通常算法有分支點:對這個範圍內的數字計算這種方式,對另一個範圍內的數字以另一種方式計算等。測試值靠近兩側的分支點,因爲這是近似誤差通常最大的地方。

隨機輸入值也很重要。如果你理性地選擇所有的測試用例,你可以系統地避免你沒有意識到的東西是一個問題。有時,即使您沒有準確的值進行測試,您也可以很好地使用隨機輸入值。例如,如果您有用於計算函數及其反函數的代碼,則可以生成1000個隨機值,並查看應用函數及其反函數是否使您回到開始位置附近。