2010-11-18 119 views
2
  • 我在測試項目來測試神經網絡圖書館的工作...
  • 的是,這個庫有時使用隨機數..
  • 我需要獲得測試用例的問題(輸入,預期輸出,實際輸出)...

有誰有一個想法如何採取行動和評價輸出時獲得測試用例(輸入,預期輸出,實際輸出)到使用隨機數的函數??測試功能與隨機輸出

回答

4

是,您可能已運行的情況下足夠大的數字,這樣的隨機性平均數,或者你做隨機源的另一輸入你的函數或方法,以便您可以單獨對其進行測試。

第一類的一個實例(這是Python,但原理可以用任何語言運用)。

def test_random_number(): 
    total = sum(random.uniform(0, 1) for _ in xrange(1000)) 
    assert 100 < total < 900 

所以,如果你運氣不好這個測試可能會失敗,但它仍然是一個合理的測試,因爲它會幾乎通過了所有的時間,這是很簡單的,使這種測試。

做事情「正確」,你需要注入的隨機源。

class DefaultRandomBehavior(object): 
    def pick_left_or_right(self): 
     return random.choice(['left', 'right']) 

class AardvarkModeller(object): 
    def __init__(self, random_source=None): 
     self.random_source = random_source or DefaultRandomBehavior() 

    def aardvark_direction(self): 
     r = self.random_source.pick_left_or_right() 
     return 'The aardvark faces ' + r 

現在,可以通過任一嘲笑出或僞造的DefaultRandomBehavior類,從而完全側步執行非確定性單元測試此。

+1

+1爲嘲笑,但我不想要一個*幾乎*所有時間通過​​的測試。最後,驗證是否真的有錯誤需要很多工作。如果你有很多誤報,他們的結果將被忽略。 – 2010-11-19 07:35:55

2

這是不太可能的是,圖書館確實用隨機數作爲電腦只是沒有在產生的非常好。相反,它可能使用以某種方式播種的僞隨機數生成器,可能來自「真實」隨機源或當前時間。讓您的結果具有可重複性的一種方法是教會圖書館能夠接受用戶提供的PRNG種子,並將其設置爲您的測試用例的某些常量。隨機數的內部序列對於你的測試總是一樣的。

第二(也許更有用)的方法將是預期的輸出和實際輸出比較近似的方式。如果隨機數的使用對您的計算造成如此大的差異以致結果實際上不可重現,您可能需要考慮計算的有用性。訣竅是找到庫的輸出的一些屬性,可以用數字比較,並且有一個可允許的錯誤,所以我懷疑你想比較一下神經網絡的結果而不是直接比較網絡。

+0

在第一種方法,相同的隨機發生器在許多功能中使用..所以這將是痛苦的跟蹤哪些功能(測試)的順序把它的值... – Betamoo 2010-11-18 20:33:46

+0

如果(重新)在初始化每個測試的開始,並且每個測試都以某種固定順序結束調用函數,生成器應始終生成相同的數字,並且您將得到可預測的結果。如果數字序列決定調用函數的順序,這甚至應該是真的。一個潛在的問題是如果發生器在一些庫函數內復位。 – 2010-11-18 20:39:41