您如何将TDD与神经网络或GUI应用程序一起使用?

oti*_*rra 2 tdd

我是测试驱动开发的新手,并试图理解基础知识.对于简单的方法,它似乎很简单,但假设我正在研究.txt文件的某些点并将它们绘制在图像上.有没有办法测试这是在做我想要的而不必实际检查它?

或者,假设我必须测试像神经网络那样不具有确定性的东西,在其他情况下有时可以达到55%的准确率或82%.我怎么测试那些?我意识到我可以测试更简单的方法,但是,总有可能在其他地方破坏事物.

Sin*_*ion 9

您可以使用一些策略来处理您提出的每个问题.我将从最重要的开始,单元测试不应该用于验证应用程序域之外的事实.这意味着您不会对第三方GUI库进行单元测试,也不会使用它来验证数学理论是否成立.你不测试5 + 5实际上等于10,你只需要证明的添加实现提供了一些正确的结果.

因此,您通常不会使用单元测试来显示您的神经网络按预期收敛.已知这种行为有效.您只需证明您的代码实现了神经网络外部理论所必需的约束和行为.

这一切归结为确保您正在测试正确的东西.确保您仅对单元进行单元测试.

下一个策略,特别是在应用程序中用于更高抽象层的策略,是使用展示已知行为的特殊版本替换低于被测单元的层.这大致是模拟测试的想法.例如,在测试与数据库交互的内容时,通常不希望允许被测代码与真实数据库进行交互.首先,数据库保留状态,并且您不希望在单元测试中,测试应该是原子的和独立的.另一个问题是外部数据库可能导致测试失败,原因不在于被测模块的控制范围之外.

解决方案是注入一个错误的数据库层,它响应与真实数据库相同的API,但在单元测试本身的控制下提供准备好的答案.

将其扩展到神经网络示例,假设我们希望测试反向支撑算法.单元测试可以注入模拟网络,该模拟网络以特定方式提供与训练数据不同的输出,并且单元测试验证反向支持代码正确地修改正确的权重.这样我们就可以消除测试对网络行为的敏感性,从而只隔离被测试的反向支持代码.

专门用于测试面向用户的代码,通常的过程是进行集成测试,该测试使用特定UI(Qt或html或其他)的特殊知识与应用程序进行交互.这主要通过激发与特定特征相关联的UI事件,然后检查事件传播到模型层中的适当变化来进行