我与音频处理工作,一般用Matlab进行原型开发,和C ++实施。 最近,我一直在阅读了关于TDD。 我已经看过了几个基本的例子,感到很热心的范例。
目前,我用什么,我会考虑一个全球性的“测试辅助”的方法。 对于这一点,我写C ++的信号处理模块,然后让我可以用我的类接口简单的Matlab的MEX文件。 随后,我添加功能,检查结果匹配具有同等MATLAB脚本,我去。 该工程确定,但测试很快成为过时的系统发展。 Furtermore,我测试整个系统,而不仅仅是单位。
这将是很好使用建立TDD框架在那里我可以有一个测试套件,但我不知道怎样才能验证处理模块的功能,而他们也都同样为被测代码复杂的测试。 如何将产生在一个C ++测试以验证不含试验是自我实现的预言的形态的处理块中的参考信号?
如果任何人有这方面经验,还是可以提出一些方法,我可以读入,那么这将是巨大的。
我认为这是伟大应用TDD方式信号处理(如果我几年前就知道这件事的时候我在做信号处理自己这将有救了我几个月的时间)。 我觉得关键是你的系统分解成可以独立测试的最低水平组件,例如:
- 的FFT:测试信号在已知的频率:DC,FS / NFFT,FS / 2和不同的相位等。检查的峰和相位是按预期,检查归一化常数时,你希望
- 峰位:测试你找到正确的最大值/最小值
- 过滤器:在产生已知频率输入并检查输出的振幅和作为预期相位。
你是不可能得到完全相同的结果出来℃之间++和Matlab的,所以你必须要在某些测试中提供误差范围。 TDD是不仅验证你有,但尝试不同的实现时是非常有用的代码的正确性的好方法。 例如,如果你想更换另一FFT实现,也往往是在数据被打包的方式,或所使用的归一化常数略有不同。 TDD会给你一个高度信任的新库被正确地整合。
我做的启发式检测类似的东西,我们有负荷和捕获文件和框架负载能够加载并注入他们进行测试。 你有没有捕捉到一个文件中的参考信号的可能性,这样做?
至于我2关于TDD美分,其开发的好方法,但与大多数范式,你不要总是要遵循它的信,有些时候,你应该知道如何通融一下,以免写太多扔掉的代码/测试。 我读到一个办法,说绝对没有代码应该写,直到测试开发,这有时可能是太严格。
在另一方面,我总是喜欢说:“如果它不是测试,其破” :)
这是确定的测试是复杂或大于正在开发的代码更加复杂。 如果你改变(更新,重构,bug修复)的代码,而不是测试,单元测试会警告你,事情发生了转变,需要进行审查(是为模式中的一个bug修复应该改变模式,B'等)
此外,您可以维护个人计算组件的API,而不是仅仅为整个终端到终端系统。
我刚刚开始考虑在信号处理的情况下TDD,所以我只能加一点到以前的答案。 我所做的就是利用一个有点叠加测试原语。 例如,在测试的IIR滤波器,我独立验证B0,B1,和b2元件用单元和缩放的增益,然后证实,随后容易地建模衰变a1和a2的元件。 我的测试信号是为分子和冲动功能分母斜坡功能的组合。 我知道这是一个简单的例子,但这个过程应该足够线性运算的工作。 测试也应该行使不稳定地区,并表明产出爆炸适当。
在一般情况下,我想到的是脉冲响应要做很多的工作对我来说,因为很多情况下会看到他们减少对三角函数,可以独立计算。 同样,如果你的操作有一系列的扩张,你的测试功能,可以进行扩展到相关的订单和比较反对对你的处理模块。 这将是缓慢的,但它应该工作。