吃,睡眠和呼吸单位测试/ TDD/BDD

Lan*_*ali 29 java tdd bdd grails unit-testing

我在编写API和核心功能时编写单元测试.但是我想成为一个吃着睡觉,呼吸TDD和BDD的酷迷.以正确的方式开始使用TDD/BDD的最佳方法是什么?任何书籍,资源,框架,最佳实践?

我的环境是带有Grails前端的Java后端,与几个外部Web服务和数据库集成在一起.

ryb*_*ber 25

一个好的开始是阅读博客.然后购买博客人员的书籍.有些我强烈推荐:

"Bob叔叔"Martin和Object Mentor的人:http: //blog.objectmentor.com/

PS获取Bobs书清洁代码:

http://www.amazon.com/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882

我的朋友Tim Ottinger(前对象导师) http://agileinaflash.blogspot.com/ http://agileotter.blogspot.com/

Jetbrains的人:http://www.jbrains.ca/permalink/285

我觉得有必要扩展这一点,因为其他人似乎只想给你他们对TDD的看法,而不是帮助你成为一名绝地忍者.TDD的Michael Jordan是Kent Beck.他真的写了这本书:

http://www.amazon.com/Test-Driven-Development-Kent-Beck/dp/0321146530

他还在博客:

http://www.threeriversinstitute.org/blog/?p=29

TDD的其他"着名"支持者包括:

所有人都很棒.您还应考虑参加一些会议,如Agile 2010或Software Craftsmanship(今年他们在芝加哥同时举行)


duf*_*ymo 11

当人们说"练习X从来没有坏;如果它不起作用,你做得不对"时,我不喜欢它.对不起,它和其他任何过度热心的宗教教条一样.我不买.

我同意那些说你的时间和金钱能够承受的最佳解决方案的人应该成为目标.

任何反对TDD的人都不应自动被指责无视质量.("所以你什么时候停止殴打你的妻子?")事实是,软件中存在缺陷,消除所有这些缺陷的成本必须权衡利益.

制造业也是如此.表面尺寸和表面处理的公差并不完全相同,因为有时不保证精密公差和镜面光洁度.

是的,我写单元测试,虽然在我写课之前并不经常.我已经看到了测试对设计的影响.我测量并观察代码覆盖率.如果我发现我的报道不可接受,我会写更多的测试.我理解单元测试安全网对重构的好处.即使我独自工作,我也会遵循这些做法,因为我亲身体验了这些好处.我知道了.

但我会对任何开始讨厌"吃饭,睡觉,呼吸单元测试和TDD"的队友表示不满.

我的经理说,如果我能让团队参加TDD/BDD,唯一能让我获得晋升的方式就是.

有没有想过这可能会让你听起来像个傻瓜?你有没有发现你的唠叨已经疏远了你团队的其他成员?

这种反应可能会让我失去一些声望点,但不得不说.

我认为更好的方法是自己练习并让别人看到好处.以身作则.它会比跑嘴更有说服力.

Geez,Grails内置了测试代.如果您正在使用使用Grails的团队,那么还需要多少销售?


use*_*884 6

最佳实践恕我直言:做什么是实用的,而不仅仅是因为它是一个过程.不要忘记编写应用程序的目标是什么,而在商业世界中,它不是编写测试.不要误会我的意思,他们有自己的位置,但这不应该是目标.

  • 从未做过*好*TDD的人总是提供这个建议.有时他们已经做到了,但经过进一步的调查,很明显他们所做的更像是*坏*TDD,他们的大部分问题都源于不良做法而不是TDD本身. (2认同)
  • 恕我直言(和很多人比我更聪明的人)如果你没有测试,那么你根本就没有工作代码.测试不是很好,它们是必需品和要求.当然,除非你喜欢长时间的开发循环,否则没有人知道它是如何工作的错误代码以及QA工作者的整个部门. (2认同)
  • 天哪,在TDD之前我们做了什么? (2认同)
  • @wilums2在我们开车之前,我们使用了马车.没有多少人会说马车比汽车更有效:) (2认同)

Jef*_*zer 6

找一个一直在做TDD/BDD并与之配对的人.


Bob*_*man 5

恕我直言,指标是从这里到达那里的最佳方式.跟踪代码的覆盖程度,为每次提交保留代码复杂度的增量,使用监视代码进行更改的测试运行者,并不断重新运行相应的测试.永远不要让测试长度超过几行,以便您的所有工具都能正常工作.我建议每月一次,休息一天,通过变异测试仪运行你的代码.那天应该专注于编写测试.如果你还没有做好TDD,所有这些东西都会给你带来痛苦.从疼痛中学习,在任何时候,你都会做得很好.

永远不要忘记测试的用途:描述所需的行为.它们是您的可执行规范.(这也是我喜欢Cucumber的原因 ;现在你可以让你的PHB为你编写测试了!好吧,也许不是很好,但它很接近!)

  • + 1"并且永远不会忽视测试的目的:描述所需的行为." (3认同)

Tho*_*sen 5

"PS:我的经理说,如果我能让团队参加TDD/BDD,唯一可以让我获得晋升的方式."

让团队做某事的唯一现实方法(在此过程中不杀死你)就是向他们清楚地证明,改变他们的习惯会使他们受益.换句话说,写代码.很多代码.大量的代码.然后,当关键电子邮件到达时会彻底改变规范,向他们表明您可以通过重构轻松更改代码,并且由于您已经准备好了测试,因此更糟糕.酒吧是绿色的,hack hack hack,RED BAR !!!!,hack hack hack,green bar,回家.

阅读Kent Becks关于测试驱动设计的书.从测试开始,然后执行代码.获取运行RUNS THE TESTS的构建服务器!你不需要为整个团队拥有它 - 为自己做,并向他们展示它有帮助.

讲道只会惹恼当地人:)


Kje*_*sen 5

我已经做了几年TDD,但最近我开始更多地研究BDD驱动我的设计和开发的方式.帮助我开始使用BDD的资源是第一个并且是Dan North的博客(BDD的"创始人").看一下BDD简介.在behaviour-driven.org上还有一个"官方"的BDD Wiki,有一些很好的帖子值得一读.

在开始使用BDD时我发现的一件事情(但仍然有点困难)是如何制定这些场景以使它们适合BDD.Scott Bellware是一个熟练掌握BDD(或者他喜欢用它来创建Context-Spesification)的人,他的文章中的行为驱动开发代码杂志帮助我理解了BDD的思维方式和制定用户故事.

我还建议由Rob Conery 推荐使用Specflow的TekPub截屏行为驱动设计.一个很好的介绍BDD和一个工具(SpecFlow)非常适合在C#中做BDD.

至于TDD资源,这里已有很多好的建议.但我只想指出几本我真正推荐的书;