在项目中途开始 TDD,好的做法?

Starting TDD halfway a project, good practice?

我正在开发大型 Flask Web 应用程序。

一开始我选择不使用测试驱动开发,因为学习曲线和项目截止日期的原因。

因此最近几周我有机会了解更多关于它的信息,我对开始使用它感到非常兴奋。

但是,关于我从一开始就没有用 TDD 包装我的项目,现在开始使用它有什么缺点吗?

我不会重构我的整个应用程序,只会重构我在不久的将来要设计的新功能。

当然可以。这实际上是进行单元测试的好时机,因为您的项目已经开始了。

通常在开始一个项目时,技术要求不是很可靠,并且需要大量的实践来进行实验。在此期间,单元测试可能会产生大量时间开销。如果技术规范不是很可靠,那么更高级别的测试通常更有价值。这些可以包括通过 public 接口(客户端将使用的相同接口)发送测试请求并在 response/data/etc 上广泛断言。这允许服务的实施在更高级别的测试下发生变化。

我能想到的一个问题是关于单元测试的目标。对我来说,单元测试主要是学习如何编写可测试代码的工具,即耦合、抽象、封装、seams 等。如果您没有练习编写此类代码,那么学习的机会已经到来错过了!

如果您没有设置测试工具,则会产生创建目录结构、测试层次结构、合并测试运行程序、测试 coverage/result 报告 (xml)、测试运行程序集成的开销。如果可以,像 travis 这样的托管服务将真正减少将其整合到您的开发过程中所涉及的工作量。

TDD "done right" 始终是很好的做法 - 无论您是从哪个时间点开始使用它。

但是为了避免出现代码库的一部分经过很好的单元测试而其他部分没有经过单元测试的情况:寻找不仅涵盖新功能的方法。换句话说:如果时间允许,不要只测试 file/class 的那些部分,新功能将进入 - 而是尝试将 整个 单元放入 "tests"。

单元测试的核心 方面是它们允许您在不破坏代码的情况下更改代码库。单元测试使您能够以更高的速度进行。因此,寻找方法来确保您可以为大部分代码库使用 "high speed"。

同意前面的回答。 ,您可以在开发的每个点开始使用 TDD。

当您尝试“红线”测试时,它们应该落在开头,您对它们出现并不感到惊讶缺乏功能。

当您开始在大型系统上实施 TDD 并且已经有大量代码时,您应该首先通过编写测试(或一组测试)。然后,如果它运行良好,则继续进行直到测试开始显示代码潜力的限制。

要补充一点,如果您现在开始并决定在此时不仅涵盖新功能(还涵盖旧功能以及上面提到的功能),您很可能会花更多时间在旧功能上。

在那种情况下,它不会被称为纯 TDD(只是说),因为一些测试将在代码编写后实施,但如果它适合项目,那也是一个选项(绝对值得).现在测试某些东西仍然比在 Beta 测试阶段更好。至少是因为如果您发现旧功能出现问题,将更容易找到解决方案。

所以后来你更加努力地测试它来解决问题。那就需要更多的时间。而且,如果人们在编写代码后很长时间才进行测试,那么就会带来双重工作,因为您需要重新考虑代码的工作方式。这就是为什么在 TDD 中编写测试几乎与编写代码同时进行。即使在这一点上,您也可能更容易记住开始时编写的代码。