2010-11-18 90 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