architecture - 测试驱动开发是否将重点放在设计上?

标签 architecture tdd agile

关闭。这个问题是opinion-based .它目前不接受答案。












想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文回答问题.

3年前关闭。




Improve this question




我对 TDD 有复杂的感觉。虽然我相信测试,但我对测试驱动我的开发工作的想法有疑问。

当您编写代码以满足为满足您现在的需求而编写的一些测试时,您可能会将注意力从构建可维护的代码、干净的设计和健全的架构转移。

我有驱动而不是测试的问题。有什么想法吗?

最佳答案

不。

如果做得好,测试驱动开发就是您的设计工具。

我希望你原谅我链接到my own blog entry, wherein I discuss the pitfalls of Test Driven Development that went wrong仅仅因为开发人员将他们的测试仅仅视为测试。

在之前的一个项目中,开发人员使用了一种极具破坏性的单例模式,该模式在整个项目中强制执行依赖关系,当需求发生变化时,这只会破坏整个事情:

TDD was treated as a task, when it should have been treated as an an approach. [...]

There was a failure to recognize that TDD is not about tests, it’s about design. The rampant case of singleton abuse in the unit tests made this obvious: instead of the test writers thinking “WTF are these singleton = value; statements doing in my tests?”, the test writers just propagated the singleton into the tests. 330 times.

The unfortunate consequence is that the build server-enforced testing was made to pass, whatever it took.



测试驱动开发,如果做得好,应该让开发人员高度意识到设计陷阱,如紧耦合、违反 DRY(不要重复自己)、违反 SRP(单一职责原则)等。

如果你为了通过你的测试而为你的测试编写通过代码,你已经失败了:你应该把难写的测试当作路标让你问:为什么要这样做?为什么我不能在不依赖其他代码的情况下测试此代码?为什么我不能重用这段代码?为什么这个代码在单独使用时会破坏?

此外,如果您的设计真正干净,并且您的代码真正可维护,为什么为它编写测试不是微不足道的?

关于architecture - 测试驱动开发是否将重点放在设计上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/80243/

相关文章:

reactjs - AG-Grid 与 Redux

c# - TDD - 提取接口(interface)或使方法虚拟化

ruby-on-rails - 测试 Controller 时禁用渲染

testing - 在像敏捷开发中,谁应该编写测试用例?

agile - 如何在 Scrum 中管理规范?

c# - 声明式编程和命令式编程有什么区别?

c# - ASP.Net Architecture 解决方案/建议

c++ - 混合架构?

unit-testing - 客户端-服务器应用程序上的 TDD

php - 任何开源 PHP 敏捷/Scrum 选项?