您是否需要TDD进行调试修复?

您是否需要TDD进行调试修复?,tdd,debugging,integration-testing,Tdd,Debugging,Integration Testing,我知道TDD上有很多东西,我也在努力学习。 但是我想知道TDD你的bug修复也是个好主意吗 我一直在考虑找到bug并缩小范围。 编写单元测试以确保它现在能够通过它以前引起的任何问题。 为其他易碎条件编写更多单元测试。 最后编写单元测试来测试集成测试,因为在此之前我们没有任何单元测试,所以每当我修复一个bug时,我总是担心我可能会意外地破坏某些东西 那么TDD是否适合调试 也是吗 或者是 还有其他方法或资源/书籍吗 这样做会更有用 目的 我更关心这个问题 集成测试部分如我所说 如上所述。我在找 L

我知道TDD上有很多东西,我也在努力学习。 但是我想知道TDD你的bug修复也是个好主意吗

我一直在考虑找到bug并缩小范围。 编写单元测试以确保它现在能够通过它以前引起的任何问题。 为其他易碎条件编写更多单元测试。 最后编写单元测试来测试集成测试,因为在此之前我们没有任何单元测试,所以每当我修复一个bug时,我总是担心我可能会意外地破坏某些东西

  • 那么TDD是否适合调试 也是吗
  • 或者是 还有其他方法或资源/书籍吗 这样做会更有用 目的
  • 我更关心这个问题 集成测试部分如我所说 如上所述。我在找 LAMP/Axkit/Perl中的任何内容都与此相关 方法

  • 谢谢。

    我想你应该先修复这个bug,然后回归测试将由TDD组成。

    当测试人员发现一个bug时,我通常会为它编写一个单元测试。当测试成功时,我知道错误已被修复,并且在将来它将始终被再次覆盖。

    在修复错误时,我总是在实际代码之前编写测试

    这样,我就有了一个示例,说明了从一个工作代码中可以得到什么——我可以专注于使这个测试(以及所有其他回归测试)通过

  • 编写一个因以下原因而失败的测试: 虫子
  • 修复代码中的错误
  • 重新运行测试
  • 重新运行所有测试

  • 所以-是的-非常好。

    简而言之,答案是肯定的。这样做的基本结构是编写一个测试用例,它将模拟bug并使测试用例失败。然后修复通过测试用例的bug

    当您的系统中有一个bug时,在TDD中编写一个能够发现bug的测试是一个很好的做法(即,一个红色的测试可以证明bug)。当您必须修复bug时,测试最终应该变成绿色。如果其他虫子足够近的话,找出它们可能是个好主意

    关于调试,应该使用TDD来利用远离程序员的调试会话。如果您不知道某个bug在哪里,您仍然可以进行调试,但是如果您有一个具有足够粒度的回归测试套件,则更容易找到bug

    您必须记住,TDD更多的是关于集成测试,而不是关于集成测试。编写集成测试没有什么错,因为它们是一种健全的检查,可以确保您的应用程序或系统在测试中正常工作

    一本关于使用xUnit框架进行测试的书是一本足够通用,可以使用任何单元测试框架的书(即使我猜是这样),这是一本关于使用xUnit框架可以使用的有趣技巧的烹饪书

    更新:
    有一章是关于perl中的单元测试的。

    是的。当然,您在发布的TDD期间执行的所有测试都将添加到回归测试套件中。但是,对于一个bug,回归套件显然不够详细

    修复bug的第一步是复制它,这就是TDD。一旦你找到了一个复制bug的测试用例,如果你愿意的话,你可以对它进行扩展(捕捉同一类的其他明显问题),但是我不打算做很多扩展,因为我们有修复单个bug的特定周转时间


    一旦修复了该bug,就将测试用例添加到回归套件中。我们的想法是不断地向回归套件中添加测试用例,以便发布版本和修复bug,从而提供很好的覆盖范围。

    是的,但是要小心,如果您编写的bug和我一样多,您很快就会有一组庞大的测试来覆盖您编写并修复的所有bug

    这将意味着测试运行速度将变慢,行为意图将被错误测试搞糊涂

    您可以使这些测试在逻辑上保持独立,或者重新访问原始的指定行为检查集(读取测试),以查看您是否真正涵盖了所有预期的行为


    我认为区分两者很重要。

    mm,我认为您应该在编写代码之前编写测试?这个设置不是有点相反吗?谢谢,我倾向于同意。我现在正在读一本关于TDD的书,所以我只是刚刚开始。我想您的错误修复应该在实现TDD之前就将注意力集中在TDD上。好地方。是的,你可以顺便修复这个错误。但是在修复bug之前编写测试是一个很好的实践。或者你根本不知道你是否有有效的回归测试,至少你肯定能通过回归套件。有点像在代码裁剪后做设计,这是一个完美的匹配:-)。你也做集成测试的单元测试吗?或者你是幸运儿之一,已经为你完成了所有这些谢谢你说的对,这主要涉及编写集成测试而不是单元测试。@Gerrie,所以基本上你只是编写单元测试来测试已经存在的功能/行为,对吗?啊,我真希望我能抽出足够的时间来处理我们现有的一些东西。“所有代码,没有测试:”(这是我面临的问题之一,因为我没有任何回归套件。我刚刚开始学习TDD:)我认为缺乏回归套件与是否应该使用TDD修复bug是不同的问题。也许可以开始一个类似“如何在现有应用程序上开始使用TDD?”的单独问题,您不必使用回归套件的大爆炸方法。您应该有某种形式的自动化测试,可以将测试添加到其中。即使每个修复的bug只添加一个bug,至少这总比什么都不添加好,而且如果您没有发现bug,它也不会再次出现。@HermanD:谢谢,也许在我建立了一些理解之后,我会再次问这个问题@帕克斯:是的,我就是这么想的,它必须从某个地方开始。谢谢你们。melaos:我很快就查到了