测试复杂数据类型的一些方法有哪些,例如视频,图像,音乐等。我正在使用TDD并且想知道是否有替代“渲染算法”的“黄金文件”测试。我知道有一些方法可以测试程序的其他部分,这些部分不会渲染并使用您可以推断出的结果。但是,我特别感兴趣的是渲染算法,特别是图像/视频测试。
当我使用OpenCV / Python进行一些基本的面部识别并想要验证其正确性时,出现了这个问题。
即使没有任何确定性,任何建议都会有所帮助。
答案 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
方法也会为该类或函数创建一种“黄金文件”夹具。
这种技术出了什么问题?请根据您遇到的具体问题更新您的问题。