之因此说是“对外声明”,是由于不少开发团队虽然号称使用的是 TDD 开发模式,实际开发过程当中却没法知足 TDD 的要求。程序员
实际上,测试驱动的开发模式确实有效,它将可能发生的问题用测试代码预先解决,只有经过测试代码后的代码才是能够接受。当前有不少公司都在应用 TDD,但 TDD 并非一个开发者友好的开发模式,只是一个理想化的开发模式。面试
你们都知道 TDD 是什么,但是试问全部的开发者能保证每次开发过程当中会知足 TDD 的要求吗?网络
听听你们的声音:运维
测试也只是保证脑内想法转成代码的时候,逻辑自洽性能
Lots of people on the internet talk about how good TDD is, but people were afraid to say it wasn’t working for them.单元测试
没有 deadline 的威胁,我很喜欢 TDD,可是过分测试是存在学习
大多数程序员还不会写测试用例测试
看起来容易,可是作起来难网站
Yes. TDD 该死。TDD 死了,T 才能正常T,程序员作正常人,团队作正常团队。TDD死,不是由于程序员达不到它的要求,是它没打算尊重程序员,尊重开发实际。TDD 本末倒置的价值观,非生产代码统治生产代码,没理解问题就想对问题高屋建瓴,TDD 是码农界的纳粹,流程方法论原教旨主义。ui
TDD 是否已死先不说,不少程序员连写出基本的整洁代码都作不到,还能期望他先写测试吗
新手看到 TDD 会欢欣鼓舞,可是他们没有能力来实践。老手们在项目的压力下,早就麻木了,先写 case 还不如写好代码再补 case 呢,不少东西我还没时间想清楚,怎么写 case?不如先写个小功能先,边写边改
其实咱们全部一切的目的是为了快速的交付有价值,有质量的产品或者服务,赢得公司的生存和发展空间。为了达到这个目的,咱们有不少种的手段。但手段不是目的。
以国内的敏捷实践来说,彻底达不到 TDD 的要求
TDD 力量和问题都源自 test first。要能 test first,写代码以前要想得更清楚;代码得要有良好的可测试性 致使其写的代码是为了知足测试的,而忽略了代码质量和实际需求
不过,我还真是见过使用 TDD 开发的不错的项目,只不过那个项目比较简单了。更多的状况下,我看到的是教条式的生硬的 TDD,因此,不奇怪地听到了程序员们的抱怨——“自从用了 TDD,工做量更大了”。固然,这也不能怪他们,TDD 原本就是很难把控的方法。
等等等等 来自于网络
我相信不少人都作不到,如今更多的开发者作的更多的是 Unit Test,就是写业务代码完了以后再写(单元)测试,而这个 Unit Testing 单元测试与 TDD 测试驱动开发 的结果一致,即二者都保证了功能经过了测试,二者结果同样为何还给本身添麻烦,提早写测试代码呢?
还有些开发者因为水平不足;或是不会测试;有些项目很是紧急根本没时间作测试。
不少开发者都很反感 TDD,至少是在潜意识中很反感(除了自身天天用不着 TDD 那些人); 试想你在小时候,天天上学前妈妈都会在耳边絮叨都要你当心,而后告诉你每一步的步骤,每一步都要正确,有时候真的很烦,因而咱们左耳朵进右耳朵出,就会不耐烦的说“好了,好了,我知道了”;程序员也是同样的,对于很繁琐的一些开发模式他们会糊弄过去,方法之一就是先写完业务代码,完成业务再说测试,写完后再写单元测试,把 TDD 给搪塞过去。
但是你知道你妈妈对你是好的,并且她在养你,因此就没说什么;程序员和公司的关系与之很类似,公司也在养你,它但愿你写的代码是好的,是可靠的,因此它要求你用 TDD 的方式编写代码。
TDD 看似有效,可是开发者的广泛不肯意作,而且很容易造假(不少人都是先写完代码,再写测试代码),并且没法监督开发者是否采用 TDD 这种开发模式,也就是说 TDD 是理想化的开发模式,若是要执行起来是最好不过的,可是真正严格执行的团队又有多少呢?肯定全部的开发人员都严格执行吗?
由此得知,TDD 是很是理想化的开发模式,只有特定的程序员、团队、产品和公司才适合这种理想化的开发模式
有,目前有种开发模式正在被一些公司的部门使用,就是 Test Plan Driven Development,即测试计划驱动开发模式,或是 Test Pre-Requisition Driven Development,即测试前提驱动开发。
相比每次开发以前先写测试代码,咱们可让开发人员参与编写测试计划,也就是说,在收到项目需求时,开发者须要帮助测试人员根据项目需求思考测试计划,并起草 测试计划 A (或者叫作开发承诺 -Development Promise),而后再进行开发。
若是对软件测试、接口测试、自动化测试、性能测试、LR脚本开发、面试经验交流。感兴趣能够175317069,群内会有不按期的发放免费的资料连接,这些资料都是从各个技术网站搜集、整理出来的,若是你有好的学习资料能够私聊发我,我会注明出处以后分享给你们。
因为开发者须要跟测试人员合做,开发者相对于测试人员更加了解项目需求,测试计划更多的依赖于开发者,而测试计划、开发承诺是受到审查的;因此也造不了假,对于团队 lead 负责人而言是可监控、可调查的。
开发承诺相似于 design doc,不过其中讲述了开发者必须完成的功能,须要作的功能以及可选作的功能,而且还提供了测试人员须要作的事情。
开发承诺 — 测试计划 A 以下所示:
开发承诺 测试计划 A 的第一个做用是,开发者 (测试者) 对于任务的优先级有很清晰的认识
为了给开发者本身看的(或是其余开发者,假如开发者离职或是请假,其余开发者就能够看测试计划迅速开发),做为开发时的指导手册,这样开发者的头绪就更加清晰,也知道任务的优先级 ---- 先作什么,后作什么。
为了给测试人员看的,做为测试的指导手册,这样测试人员就知道什么功能须要重点测试、什么东西须要进行实验性的测试,以及什么功能须要实现测试自动化以便于加入到 CI 和 CD 之中。
开发承诺 测试计划 A 的第二个做用是,承诺使开发者的开发过程更加当心
将测试计划 A 交给测试人员和开发组长,利用心理学中“承诺”做用,使本身的言行和承诺一致。这样的话,开发人员就知道本身的 code 至少要知足什么条件,至少要过什么样的测试,因此开发时会更加当心,代码的质量和可靠性也会获得很高的提高。 开发承诺 测试计划 A 的第三个做用是,促进测试人员的工做进度,使测试人员有更多的时间进行自动化、adhoc 测试或是运维方面的工做
测试人员会根据测试计划 A 起草测试计划 B,只须要在测试计划 B 中添加如何进行测试便可。
参考:一旦咱们作出了某种承诺,或是选择了某种立场,就会在我的和外部环境的压力下,迫使本身的言行与承诺保持一致,尽管这种行为有悖于本身的意愿。
TDD 是先写测试代码,判断业务代码是否能够经过测试代码。看似有效,可是开发者的广泛不肯意作,或是完成度不好,或是作了以后致使没有按时完成任务;而且很容易造假,不少人都是先写完代码,再写测试代码;或者测试代码质量不高;或是测试用例很差。
对于管理者而言,他们没法监督开发者是否有效的沿用 TDD 这种开发模式,彻底体现不了 TDD 的优点。
1.提升代码质量
2.可监控和不可造假
3.有时间进行其余方面的提高,例如自动化、运维等
4.更好的接受 TDD
5.对开发者友好
6.对测试人员友好
7.对管理人员友好