你应该在多大程度上应用TDD?

我看到了TDD的好处,我正在努力学习如何绕过它.我也在阅读更多关于DDD的内容,并希望开始将它们应用到我的软件项目中.

我已经购买了一些“动手”编程书籍(通过“亲自动手”,我的意思是那些用真正的解决方案而不是小片段讨论真实世界的应用程序)我注意到他们通常开始定义“基础设施”以传统的代码优先方式使用应用程序层,而不是使用TDD;这两本书都不遗余力地讨论TDD的优秀程度以及案例研究将如何利用它.

例如,在其中一本书“ASP.NET 3.5社交网络”中,整个第二章开发了一个Logging包装类,一个Email包装类,Cache和Session包装类(及其相关的接口),所有这些都没有涉及单个单元测试.另一本书,.NET域驱动设计与C#:问题,设计,解决方案类似,并在触及“真实”代码之前创建基类和存储库框架代码.

我知道您应该测试域类的实际逻辑和功能.我曾经认为“不测试管道”代码只适用于您没有编写的代码(例如内置的.NET类),但我正在阅读的内容似乎表明/建议您只应测试代码这实际上与您的应用程序有关,而不是您编写的管道提供基础.

这是应用TDD的可接受方式吗?

它可能取决于您计划如何构建项目的其他因素.

如果您正在遵循其他敏捷实践,例如小型迭代和交付,那么您一开始就没有太多的架构或基础架构,因为在实施和交付时,您将没有足够的时间进行开发.前几个功能.无论如何,当你真的不知道代码需要什么时,为什么要花时间在Big Design Up Front上呢?

因此,您将首先在多次迭代中构建代码.测试覆盖意味着您可以重构以改进您的设计,从理论上讲,它可以准确地为应用程序提供正确的基础架构,因为它可以随时存在. Ron Jeffries explains it well here.如果没有测试,你可能会遇到需要停下来并弄清楚结构应该是什么的点,这需要花费时间才能更好地用于构建有用的功能并且你要去无论如何必须在最后测试.

如果你100%肯定你可以在编写任何代码之前正确地绘制设计,那么你可以选择这样做.但是,确保在项目中留出足够的时间进行测试.我认为每个人都应该通过“传统的”瀑布流程以及潜入和编码来构建至少一项重要的工作,以便获得一些将敏捷实践置于上下文中的经验.否则,你有可能在不知道“为什么”的情况下知道“什么”,这使得课程更难学.

翻译自:https://stackoverflow.com/questions/589035/how-far-should-you-apply-tdd

转载注明原文:你应该在多大程度上应用TDD?