|
|
1
9
我会把你的测试建立在你最初设计的基础上。在许多方面,TDD是一个发现过程。您可以期望确认您早期的设计选择,或者发现您可以做出更好的选择。做尽可能多的前期设计,你是舒适的。有些人喜欢坐在椅子旁边,做高水平的设计,用TDD来充实设计。其他人喜欢先把所有的东西都写在纸上。 TDD的一部分是重构。 |
|
|
2
7
关于“设计大型复杂系统”,有一些话不能与TDD相联系。- 尤其地 当TDD被解释为“测试驱动设计”而不是“测试驱动开发”时。 在“开发”的上下文中,使用TDD将确保您正在编写 可测试的 提供TDD所引用的所有好处的代码(早期检测错误、高代码:测试覆盖率、更容易将来重构等) 但在“设计”大型复杂系统时,TDD并没有特别解决系统架构中固有的以下问题
(也就是说,上述所有问题都不会神奇地通过“首先编写失败的测试用例,然后是工作实现、重构-起泡、漂洗、重复…”方法“浮现”。
我还没有遇到一个非常复杂的软件(如编译器、数据库、操作系统),它是在 测试驱动 设计 风格。下面的博客文章非常好地讨论了这一点。( Compilers, TDD, Mastery ) 另外,检查以下内容 videos on Architecture 这给思维过程增加了很多常识。 |
|
|
3
3
从一个粗略的设计思想开始,选择一个第一个测试并开始编码,一个接一个的进行绿色测试,让设计出现,无论与初始设计是否相似。初始设计的多少取决于问题的复杂性。 必须注意、倾听和嗅探代码,以检测重构机会和代码气味。 严格遵守TDD和 SOLID principles 将带来干净、可测试和灵活的代码,以便可以轻松地重构,利用单元测试作为脚手架来防止回归。 |
|
4
2
我发现了三种使用TDD进行设计的方法:
实用主义在大多数时候似乎是最好的选择,下面是我要做的。如果我知道某个特定的模式非常适合我的问题(例如,MVC),我将直接进行模拟,并假定它是有效的。否则,如果设计不那么清晰,我就允许它出现。 我认为需要重构一个紧急设计的交叉点就是它停止容易改变的点。如果一段代码设计得不完美,但另一个开发人员发现它可以很容易地自己重构,那么这就足够好了。如果代码变得如此复杂,以致于它不再对其他开发人员明显,那么是时候重构它了。 我喜欢真正的选择,重构一些完美的东西让我感觉就像在设计中承诺而不需要这样做。我改为重构为“足够好”;这样,如果我的设计证明自己是错误的,我就不会浪费时间。假设您的设计是错误的,如果您以前从未在类似的上下文中使用过它。 这也让我比完美的代码更快地得到我的代码。说了这句话,正是我努力使代码完美,才教会了我行在哪里! |