测试复杂的数据类型?

时间:2009-11-19 08:05:40

标签: python image testing opencv

测试复杂数据类型的一些方法有哪些,例如视频,图像,音乐等。我正在使用TDD并且想知道是否有替代“渲染算法”的“黄金文件”测试。我知道有一些方法可以测试程序的其他部分,这些部分不会渲染并使用您可以推断出的结果。但是,我特别感兴趣的是渲染算法,特别是图像/视频测试。

当我使用OpenCV / Python进行一些基本的面部识别并想要验证其正确性时,出现了这个问题。

即使没有任何确定性,任何建议都会有所帮助。

2 个答案:

答案 0 :(得分:2)

如何测试渲染的想法非常简单:测试函数使用inverse function并检查输入和输出是否匹配(匹配在您的情况下不相等):

f(f^-1(x)) = x

要测试渲染算法,您需要对原始输入进行编码,渲染编码值并分析渲染输出和原始输入之间的差异。一个问题是当编码/解码随机输入不合适时获得原始输入。另一个挑战是评估原始输入和渲染输出之间的差异。我想如果您正在编写一些渲染软件,您应该能够对数据进行频率分析。 (有些transformation现在应该出现在你的头脑中。)

如果可以生成测试数据。文本夹具是一个真正的维护问题。它们只在一开始就闪耀。如果他们在某种程度上发生变化,一切都会崩溃。主要问题是,如果您使用灯具,您的测试将重复灯具的内容。这使得对测试意图的解释更加困难。如果你的测试中有一个神奇的值,这个值的重要部分是什么?

夹具:

actual = parse("file.xml")
expected = "magic value"
assert(actual == expected)

生成的值:

expected = generate()
input = render(expected)
actual = parse()
assert(actual == expected)

generators的好处是你可以从原始类型和字段(python Quickcheck version)开始构建非常复杂的对象图。

基于生成器的测试本质上不是确定性的。但是如果有足够的试验,他们会遵循Law of large numbers

他们的附加值是他们将产生良好的测试值范围覆盖率。 (使用测试夹具很难实现。)他们会在您的代码中发现意外的错误。

另一种测试方法是使用等效函数进行测试:

f(x) = f'(x)

例如,如果您有要比较的渲染函数。如果您具有工作功能,这种测试方法很有用。此功能是您的基准。它不能用于生产,因为它会减慢或者用于大量内存,但可以轻松调试或证明是正确的。

答案 1 :(得分:0)

“黄金档案”技术出了什么问题?它是测试夹具的一部分。每个测试都有一个数据夹具,相当于媒体密集型应用程序中的“黄金文件”。

在进行普通商业应用程序的普通TDD时,通常会有一个必须使用的黄金数据库夹具。

即使在测试应用程序的简单函数和核心类时,setUp方法也会为该类或函数创建一种“黄金文件”夹具。

这种技术出了什么问题?请根据您遇到的具体问题更新您的问题。