代码之家  ›  专栏  ›  技术社区  ›  Stefano Borini

输出不确定时(或低控制时)输出文件的功能测试

  •  3
  • Stefano Borini  · 技术社区  · 16 年前

    很久以前,我不得不测试生成postscript文件图像的程序。判断程序是否产生了正确的、预期的输出的一个快速方法是对结果进行md5,以与我之前检查过的“已知良好”输出的md5进行比较。

    不幸的是,postscript包含文件中的当前时间。当然,这一次是不同的,这取决于测试运行的时间,因此即使获得了预期的输出,也会更改结果的md5。作为补救措施,我刚刚取消了和塞德的约会。

    这是一个非常简单的场景。我们并不总是那么幸运。例如,现在我正在编写一个writer程序,它创建一个包含一堆匿名节点和uuid的大型胖rdf文件。用一个简单的md5检查整个程序的功能基本上是不可能的,唯一的方法是用读卡器读取文件,然后通过这个读卡器验证输出。正如您可能意识到的,这会打开一个新的蠕虫罐头:首先,您必须编写一个读卡器(这可能很耗时),其次,您假设读卡器在功能上是正确的,同时与写卡器同步。如果读写器都是同步的,但假设不正确,读写器会说“没问题”,但文件格式实际上是错误的。

    当您必须对文件格式执行功能测试,并且文件格式不能通过您提供的输入完全再现时,这是一个常见问题。你怎么处理这个案子?

    2 回复  |  直到 16 年前
        1
  •  1
  •   Perry    16 年前

    在过去,我使用第三方应用程序来验证这样的输出(最好将其转换为可以机械验证的其他格式)。使用第三方可以确保我的假设至少得到其他人的认同,如果不完全正确的话。至少这种方法可以用来验证语法。语义正确性可能需要为测试数据创建一个使用者,这可能总是容易出现您提到的“错误假设”陷阱。

        2
  •  1
  •   Steve Rowe    16 年前

    随机性总是在同一个地方吗?也就是说,大部分文件是固定的,但有些部分总是会改变?如果是这样的话,您可能能够获得几个输出,并使用编程diff来确定不确定的部分。一旦知道了这些信息,就可以使用这些信息派生一个掩码,然后进行比较(md5或直接比较)。考虑对文件进行预处理,以删除(或用确定性数据覆盖)不确定性的部分。

    如果整个文件是不确定的,那么你必须想出一个不同的解决方案。我测试了不确定的mpeg-2解码器。在这种情况下,我们可以做一个psnr,如果它是超过某个阈值失败。这可能有效,也可能无效,这取决于您的数据,但类似的事情可能是可能的。

    推荐文章