Unit testing 什么';这是一种很好的单元测试数字音频生成的技术

Unit testing 什么';这是一种很好的单元测试数字音频生成的技术,unit-testing,audio,signal-processing,Unit Testing,Audio,Signal Processing,我想对一个信号发生器进行单元测试,比如说它产生一个简单的正弦波,或者将一个信号的频率调制成正弦波。定义合理的测试参数很容易,而且众所周知输出应该是什么样子的——但这很难测试 我可以(例如)对输出进行频率分析并检查,检查最大振幅等,但a)这会使测试代码比它正在测试的代码复杂得多,b)不能完全测试输出的形状 有没有一种既定的方法可以做到这一点?一种方法是捕获一个“已知良好”的输出,并将其逐位进行比较。只要你的算法是确定性的,你每次都应该得到相同的输出。如果有任何变化,您可能需要偶尔重新校准它,但至少

我想对一个信号发生器进行单元测试,比如说它产生一个简单的正弦波,或者将一个信号的频率调制成正弦波。定义合理的测试参数很容易,而且众所周知输出应该是什么样子的——但这很难测试

我可以(例如)对输出进行频率分析并检查,检查最大振幅等,但a)这会使测试代码比它正在测试的代码复杂得多,b)不能完全测试输出的形状


有没有一种既定的方法可以做到这一点?

一种方法是捕获一个“已知良好”的输出,并将其逐位进行比较。只要你的算法是确定性的,你每次都应该得到相同的输出。如果有任何变化,您可能需要偶尔重新校准它,但至少您会知道它是否真的发生了变化。

一种可能的半自动测试方法是使用3种不同的算法,或者可能由3种不同编程语言的3个不同程序员,根据规范对信号发生器进行编码。然后在合法控制输入值的完整范围内随机生成参数,捕获并比较所有3个生成器的输出,看它们是否在某个误差范围内一致。您还可以包括一些典型和一些可疑的更坏情况参数。如果输出总是一致的,那么每件事都符合规范的可能性要比不符合规范的可能性大得多。

这种情况对于Matlab这样的建模工具来说是一个有力的论据,它可以自动生成和审查一个理解良好的测试集,并为自动比较和评分提供一个环境。特别是在测试变量发生组合爆炸的情况下,自动化可以直接生成一个庞大的数据集,定位问题,并在需要时缩减到一个具有代表性的鉴定测试集

通常被低估的是生成一个大型、广泛的测试的方法,该测试同时执行设计实现的需求和限制。提前考虑和设计这些案例也是引入干净、无问题系统的一个巨大优势。

为我想要测试的每个参数组合生成“已知良好”信号可能会非常痛苦-但是测试大量信号的(例如频率)特性,再加上对几个信号进行逐位比较,效果会非常好