Gav*_*vin 20 testing tdd nunit automated-tests unit-testing
我们开始了一个新的项目推出了很多我们不那么熟悉的新技术,而我们没有大量的练习中的架构.换句话说,接口和服务类的东西,我们的"等等之间的相互作用由于内部和客户的反馈,重建是相当不稳定的,更是如此.虽然我一直在不断移动的规范沮丧,我认为这在一定程度上建立的东西,我们以前从来没有建的必要组成部分 - 如果我们只是坚持原来的设计和范围,最终产品可能会是比它成为一个创新和有用的要少得多.
我还介绍了测试驱动开发(TDD),因为它的好处已有详细记录,从概念上讲我喜欢这个想法.还有两个要学习的新东西--NUnit和嘲弄 - 但是看到所有那些绿色圆圈使得这一切都值得.
然而,随着时间的推移,那些不断变化的设计似乎意味着我花了很多时间来改变我的测试,而不是编写代码本身.仅仅因为这个原因,我已经回到了旧的测试方式 - 也就是说,不是自动化的.
虽然我毫不怀疑这个应用程序在数百个优秀的单元测试中会更加强大,但我发现推出该产品的时间权衡是不可接受的.我的问题是,那么 - 你们是否还发现如果你正在构建一个测试版/建立测试版,那么TDD会很麻烦?TDD是否更加自然地与规范更加固定的东西,或者开发人员在语言和技术方面拥有更多经验的东西相提并论?或者我做过一些根本错误的事情?
请注意,我并不想在这里批评TDD - 只是我不确定它总是最适合所有情况.
Mar*_*ann 12
简短的回答是TDD对于beta版本非常有价值,但对于原型设计可能不那么重要.
我认为区分beta版本和原型设计非常重要.
一个测试版本,本质上是一个生产的版本,只是仍处于开发阶段,所以你一定要在场景中使用TDD.
一个原型 /概念证明是你建立的东西,明确的意图是,一旦你得到你想要的答案就扔掉它.
确实,项目经理倾向于推动将原型用作生产代码的基础,但是抵制这种原型非常重要.如果你知道这是不可能的,把原型代码,你会生产代码,因为你知道它是要在未来成为你的产品代码-这意味着你应该使用TDD与它.
当您学习新技术时,大多数代码示例等都不会考虑单元测试,因此很难将新技术转换为单元测试思维模式.它绝对感觉像很多开销.
然而,根据我的经验,单元测试通常会迫使您突破您正在学习的新技术的界限.通常,您需要研究和学习新技术提供的所有不同的钩子,因为您需要能够通过DI等来隔离技术.
单元测试经常迫使您更深入地学习技术,而不仅仅是遵循常规路径,因此可能感觉开销实际上只是一个更深入的原型 - 通常更有价值,因为它涵盖了更多的基础.
就个人而言,我认为单元测试新技术是一个很好的学习工具.
我认为,您似乎遇到的关于测试可维护性的症状有点正交.您的测试可能是Overspecified,这在使用已知技术时也可能发生(但我认为当您同时学习新技术时,可能更容易陷入此陷阱).
本书xUnit测试模式描述了Overspecified Test反模式,并提供了许多指导和模式,可以帮助您编写更易于维护的测试.
在进行原型设计时,我会说这取决于原型的类型.在进化原型设计中,原型演变为最终应用,我会尽早使用单元测试.如果您正在使用一次性原型设计,我不会打扰单元测试 - 最终的应用程序将与原型完全不同.
我不确定你的"beta"是什么意思,因为beta几乎是一个成品.一旦您开始处理将要发货或有可能发货的代码,请确保所有内容都经过充分测试.
现在,纯测试驱动的开发可能是极端的,但重要的是确保所有可交付代码在单元,集成和系统级别上尽可能经过测试.
你有没有人发现TDD可能是一个麻烦,如果你是原型/构建测试版?
我有..吨次:)
TDD是否更加自然地与规范更加固定的东西,或者开发人员在语言和技术方面拥有更多经验的东西相提并论?
并不是的.TDD的作品相当不错的不断变化的需求,但TDD是真正为确保一个稳定和合约驱动的设计:其原型并不真正需要两样东西是不好..
或者我做过一些根本错误的事情?
看起来不像:)你刚刚看到TDD包含除了金树之外的其他东西..
| 归档时间: |
|
| 查看次数: |
1977 次 |
| 最近记录: |