微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用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.jb51.cc/javaschema/281432.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐