gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 03:00:06 24 4
gpt4 key购买 nike

我正在尝试使用测试驱动开发来实现我的信号处理库。但我有一点怀疑:假设我正在尝试实现一个正弦方法(我不是):

  • 编写测试(伪代码)
    assertEqual(0, sine(0))
  • 编写第一个实现
    function sine(radians)
    return 0
  • 第二次测试
    assertEqual(1, sine(pi))

  • 在这一点上,我应该:
  • 实现适用于 pi 和其他值的智能代码,或
  • 实现仅适用于 0 和 pi 的最愚蠢的代码?

  • 如果选择第二个选项,我什么时候可以跳转到第一个选项?我最终将不得不这样做......

    最佳答案

    在这一点上,我应该:

  • 实现将在两个简单测试之外工作的真实代码?
  • 实现仅适用于两个简单测试的更愚蠢的代码?

  • 两者都不。我不确定你从哪里得到“一次只编写一个测试”的方法,但这肯定是一种缓慢的方法。

    重点是编写清晰的测试并使用清晰的测试来设计您的程序。

    因此,编写足够的测试来实际验证正弦函数。两个测试显然是不够的。

    在连续函数的情况下,您最终必须提供已知良好值的表。干嘛要等?

    但是,测试连续函数存在一些问题。你不能遵循愚蠢的 TDD 过程。

    您无法测试 0 到 2*pi 之间的所有浮点值。您无法测试一些随机值。

    在连续函数的情况下,“严格的、不经思考的 TDD”是行不通的。这里的问题是你知道你的正弦函数实现将基于一堆对称性。您必须根据您使用的那些对称规则进行测试。 bug 藏在裂缝和角落里。边缘情况和极端情况是实现的一部分,如果您不假思索地遵循 TDD,则无法对其进行测试。

    但是,对于连续函数,您必须测试实现的边缘和角落情况。

    这并不意味着 TDD 已损坏或不足。它说,如果不考虑您的真正目标是什么,那么对“测试优先”的盲目投入是行不通的。

    关于tdd - 如何正确使用TDD来实现数值方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1463632/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com