TDD:在增强现有大型应用程序时是否可以引导?

TDD:在增强现有大型应用程序时是否可以引导?,tdd,coding-style,Tdd,Coding Style,马丁《干净的代码》中关于TDD的章节吸引了我的想象力 但是。 现在我主要是扩展或修复现有的大型应用程序。 另一方面,TDD似乎只适用于从头开始的写作 谈论这些大型现有应用: 1.当然,它们不是用TDD写的。 2.我不能重写它们。 3.在时间范围内,为他们编写全面的TDD风格测试是毫无疑问的 我还没有看到任何提到TDD“引导”到现有的大型单站点应用程序 问题是这些应用中的大多数类原则上只能在应用内部工作。 它们是不可分离的。它们不是通用的。为了激发他们,你至少需要整个应用程序的一半。一切都与一切相

马丁《干净的代码》中关于TDD的章节吸引了我的想象力

但是。
现在我主要是扩展或修复现有的大型应用程序。
另一方面,TDD似乎只适用于从头开始的写作

谈论这些大型现有应用:
1.当然,它们不是用TDD写的。
2.我不能重写它们。
3.在时间范围内,为他们编写全面的TDD风格测试是毫无疑问的

我还没有看到任何提到TDD“引导”到现有的大型单站点应用程序

问题是这些应用中的大多数类原则上只能在应用内部工作。
它们是不可分离的。它们不是通用的。为了激发他们,你至少需要整个应用程序的一半。一切都与一切相连。
那么,引导程序在哪里

或者有替代技术,其结果为TDD

这将有助于扩展未使用TDD开发的现有应用程序。

从小做起。抓取一段可以合理提取并制作成可测试类的代码,然后去做。如果应用程序充满了如此多的硬依赖关系和可怕的意大利面条式逻辑,以至于你不可能在不担心破坏某些东西的情况下进行重构,那么从进行一系列集成测试开始,这样,您就可以在开始胡闹之前/之后确认正确的行为。

您现有的应用程序听起来好像存在紧密耦合和大量技术债务。在这样的情况下,您可以花费大量时间尝试编写全面的单元测试,而在这些情况下,最好花时间进行主要重构,特别是促进松耦合


在其他情况下,将时间和精力投入到使用模拟框架的单元测试中可能是有益的,因为它有助于为测试目的解耦应用程序,从而使测试单个组件成为可能。依赖注入技术也可以与模拟结合使用,以帮助实现这一点。

引导功能是隔离您正在处理的区域,并为您想要保留的行为和您想要添加的行为添加测试。当然,最困难的部分是使之成为可能,因为未经测试的代码往往以某种方式纠结在一起,难以隔离代码区域以使其可测试

购买,这给了你很多关于如何实现目标的指导


您可能还想看看这个相关问题的答案。

让我强调,不进行任何测试就进行重构会导致灾难,这就是为什么我强调在没有其他测试的情况下编写集成测试,因此,您至少可以合理地确定在重构时没有完全破坏某些东西。我认为集成测试是给定的,我的坏:(+1:WELC帮助我将单元测试注入25年前的代码中。感谢您有效地使用遗留代码参考。它是安全的,我可以立即开始阅读。