如何使用TDD正确实现数值方法?

前端之家收集整理的这篇文章主要介绍了如何使用TDD正确实现数值方法?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图使用测试驱动开发实现我的信号处理库.但我有一点怀疑:假设我正在试图实现一个正确的方法(我不是):

编写测试(伪代码)

assertEqual(0,sine(0))

>写第一个实现

function sine(radians)
    return 0

>第二次测试

assertEqual(1,sine(pi))

在这一点上,我应该如何

>实现可以为pi和其他值工作的智能代码,或者
>实现最有效的代码,仅适用于0和pi?

如果选择第二个选项,我什么时候可以跳到第一个选项?我最终会做的…

在这一点上,我应该如何

>实现两个简单测试之外的实际代码
>实现更为愚蠢的代码,这只能用于两个简单的测试?

都不是.我不知道你在哪里得到“一次只测试一次”的方法,但肯定是一个缓慢的方式.

关键是要写清楚的测试,并使用清晰的测试来设计你的程序.

所以,写足够的测试来实际验证一个正弦函数.两项测试显然不足.

在连续功能的情况下,您必须最终提供一个已知良好值的表.为什么要等?

然而,测试连续功能有一些问题.你不能遵循愚蠢的TDD程序.

您不能测试0和2 * pi之间的所有浮点值.您不能测试几个随机值.

在连续功能的情况下,“严格的,不可思议的TDD”不起作用.这里的问题是你知道你的正弦函数实现将基于一堆对称性.您必须根据您使用的对称性规则进行测试.虫藏在裂缝和角落里.边缘案例和角色案例是实现的一部分,如果您不能想像地遵循TDD,则无法测试.

但是,对于连续功能,您必须测试实现的边缘和角落的情况.

这并不意味着TDD被破坏或不足.它表示,如果没有想到你真正的目标是什么,那么对“测试第一”的奴隶主义就无法奏效.

原文链接:https://www.f2er.com/javaschema/281432.html

猜你在找的设计模式相关文章