对于大多数人来说,这可能是一个非常幼稚的问题,但我对此感到困惑。
当我们必须为某个程序设计测试用例时,我们如何知道预期的价值/结果是什么。该程序可能会执行一些复杂的计算并使用复杂的算法来计算其最终输出,这可能无法通过其他方式进行计算。即使我们使用其他方法计算相同的输入,然后使用该平均值的输出值作为测试我们原始程序的预期值,那么我们如何确定从不同程序计算的预期值/意思是正确的,以确保该程序也必须进行测试,因此我们回到原点。
答案 0 :(得分:2)
如果计算过于复杂,无法用计算器在纸上计算出来,那么您甚至可以对其进行编程?即使计算必须以小步骤完成,您也可以在纸上编写几个不同的测试用例,并在程序中测试计算步骤,并逐步完成。计算机只能做人类告诉它做的事情。
答案 1 :(得分:1)
你的问题没有意义。
测试是将被测系统视为黑匣子的活动。您对系统的要求(在您的情况下:计算)基本上是这样的:好的,当我使用这些值提供方法时,我希望它返回此值。
除了提前知道操作的结果应该是什么之外别无他法。在某些情况下可能会有很多工作,但其他一切在逻辑上都是不一致的,而且它只会测试测试作者知道如何使用测试框架的事实......
答案 2 :(得分:1)
您的问题是软件测试中最棘手的问题,被称为“oracle”问题。
为了支持测试,我们希望为任何测试输入提供可靠的预期结果源。在大多数测试场景中,这实际上意味着我们具有相当于被测系统的完美,无错误的实现。当然,如果我们有这个,我们可能会跳过开发SUT及其测试。
但通常情况并非如此。因此,有许多实用(和一些外来的)策略来产生测试用例的预期结果。这可以简单到使用电子表格来计算函数,选择一些已知结果的查询,或将现有等效或类似系统的输出与被测系统的输出进行比较。
我的书的第18章测试面向对象的系统,为oracles提供了16种测试设计模式,其中大部分可以自动化。
此页面提供了该书的摘要和亚马逊的链接 http://www.robertvbinder.com/home/thought-leadership/books/
鲍勃