不要宗教化TDD(测试驱动开发)

敏捷编程的概念出来已经很久了,期间涌现出了很多名词,什么XP啊,Scrum啊,被很多人所推崇。

我想说的是TDD这个东西,也是被很多人认为是保证软件质量的法宝,一旦选择了TDD方式,就自动的获得了设计代码的能力,这其实只是一种假设,不是一种必然。我觉得这些都是错的,不要认为TDD了,就能解决现在的问题。

首先,TDD意味着还未开发就要写大量的测试用例,这本来就是和敏捷开发的初衷是违背的,因为写大量的测试代码,本身就不是敏捷的事情。

Ruby on Rails的作者,在TTD大行其道的时候,冒死说出了TDD已死的,TTD的缺点得到了程序员们重新思考和讨论。那么TDD到底有哪些事情让我这么不爽呢?

首先,维护测试代码的成本很高,目前我所在的团队部分开发正在TDD,这个教条主义式的编程方式,让开发花了大量的时间写测试用例,不要忘了,测试代码也是代码,所有的代码维护成本都是差不多的。一旦业务变更,意味着测试代码需要修改。

其次,TDD的开发方式,我一直认为是反直觉的。试想,你要实现一段程序逻辑,你还不知道会出哪些问题的情况下,先把可能的结果都枚举了一遍,但很多场景下,你只能考虑到有限的一些结果,对于其它的一些问题,更可能是在开发过程中才意识到的。

TDD中的Mock也是一个难题,确定Mock点就会伤掉一部分脑筋,大量使用Mock只是将功能点一个个的分离出来测试,而无法进行集成功能测试。TDD开发人员,在项目工期紧,压力大的环境下,最终沦为为TDD而TDD,写完交差,没有后期维护。

我比较厌恶编程届这种跟风的潮流,总觉得新出来的名词,不学几个就是土的掉渣,落伍的人。比较反感强推某种方法论,而不考虑实际情况。

TDD不是银弹。尤其是在需要敏捷开发的互联网行业,版本的迭代速度非常快,而TDD的这种做法是非常不适合的。我觉得TDD最适合在常规的产品软件中使用,因为版本迭代平稳,周期可控。

不能一棍子打死TDD,TDD确实有它的不少优点,但是衡量是否值得TDD的标准就是投入成本和产出效益之间是否平衡,而不能不顾实际的盲目推崇。软件测试不是只有TDD,找到最合适团队的,才是最好的。

时间: 2024-08-29 11:44:56

不要宗教化TDD(测试驱动开发)的相关文章

TDD(测试驱动开发)培训录

2014年我一直从事在敏捷实践咨询项目,这也是我颇有收获的一年,特别是咨询项目的每一点改变,不管是代码质量的提高,还是自组织团队的建设,都能让我们感到欣慰.涉及人的问题都是复杂问题,改变人,改变一个组织是个更复杂问题,这里可能涉及很多的非技术,非能力问题. 在2014年12月我在某企业内部推行TDD(测试驱动开发)培训,一共分4个课时完成一个特定需求的例子,看着大家一步一步的加深对TDD的理解,直到2014-12-31,也是2014的最后一天下午培训完TDD课程,经过一系列的总结过后,某参与人员

TDD(测试驱动开发)学习二:创建第一个TDD程序

本节我们将学习一些测试驱动开发环境的搭建,测试驱动开发概念和流程.所涉及的内容全部会以截图的形式贴出来,如果你也感兴趣,可以一步一步的跟着来做,如果你有任何问题,可以进行留言,我也会很高兴的为你答疑. 准备工具 Visual Studio(什么版本都无所谓),NUnit 安装NUnit 从NUnit官网下载最新版本的NUnit,地址为http://www.nunit.org/index.php?p=download,下载这个msi,然后进行安装,直接下一步搞定.           在项目引用N

测试驱动开发(TDD)

在编写程序之前,先确定程序中的变量.控件等元素允许的值.若在编写程序时,变量.控件中的值与事先确定的值不相符,就说明程序的某处有bug,这种测试方法就是TDD(Test Driven Development,测试驱动开发).TDD与OpenGL ES一样,只是一套标准或一套API.Android SDK中提供了一套测试框架(JUnit),可用于对Android应用程序进行TDD测试.测试框架的特性如下: Android的测试框架基于JUnit.可在无需调用Android SDK API的情况下测

浅谈测试驱动开发(TDD)

1. 优势 TDD的基本思路就是通过测试来推动整个开发的进行.而测试驱动开发技术并不只是单纯的测试工作. 需求向来就是软件开发过程中感觉最不好明确描述.易变的东西.这里说的需求不只是指用户的需求,还包括对代码的使用需求.很多开发人员最害怕的就是后期还要修改某个类或者函数的接口进行修改或者扩展,为什么会发生这样的事情就是因为这部分代码的使用需求没有很好的描述.测试驱动开发就是通过编写测试用例,先考虑代码的使用需求(包括功能.过程.接口等),而且这个描述是无二义的,可执行验证的. 通过编写这部分代码

测试驱动开发(TDD)及测试框架Mocha.js入门学习

组里马上要转变开发模式,由传统的开发模式(Developer开发,QA测试),转变为尝试TDD(Test-driven development,测试驱动开发)的开发模型.由此将不存在QA的角色,或者仅存很少的QA用于系统模块间的集成测试. 因此代码的测试与开发都将由开发者(Developer)来保证. 这就需要借助优秀测试框架的帮助,尤其是支持TDD开发模式的自动化测试框架更为重要,因为我使用的编程是语言是Node.js,那么广泛使用的Mocha.js将成为我的首选. 在团队转型过程中,很多事情

(转)浅谈测试驱动开发(TDD)

测试驱动开发(TDD)是极限编程的重要特点,它以不断的测试推动代码的开发,既简化了代码,又保证了软件质量.本文从开发人员使用的角度,介绍了 TDD 优势.原理.过程.原则.测试技术.Tips 等方面. 2 评论: 李群 ([email protected])www.ihere.org 背景 一个高效的软件开发过程对软件开发人员来说是至关重要的,决定着开发是痛苦的挣扎,还是不断进步的喜悦.国人对软件蓝领的不屑,对繁琐冗长的传统开发过程的不耐,使大多数开发人员无所适从.最近兴起的一些软件开发过程相关

原创翻译-测试驱动开发(TDD)

测试驱动开发原则 翻译自<<Expert Python Programming>> 测试驱动开发是指首先编写包含所有测试软件特点的测试集,然后再去开发软件.也就是说,在编写软件之前先把这个软件的测试文档写清楚.举个例子,如果有个程序员想编写一个可以计算一组数字平均值的函数,那我们先要写出这个函数是怎么用的.我们可以这样写:assert average(1, 2, 3) == 2assert average(1, -3) == -1 这些测试例子也可以由别的人来负责编写.现在,这个函

在PHP中使用Mockery进行测试驱动开发(TDD) - 上

测试驱动开发网上也谈了很多了,PHP方面的文章也有一些,在百度和Google里搜,好像没有看到几篇谈用Mock(伪装对象)的技术的,这里写篇文章讲讲. 先过一下测试驱动开发的基本理念:就是先写测试用例(一般这个测试用例都是自动化的单元测试用例,便于快速回滚执行),然后通过逐步修复测试用例的方法补齐产品代码,最后测试用例修复完毕后,产品也就写完了. 从我自己的实践中,我认为在类库开发的时候使用测试驱动开发技术是一个很好的方案,理由如下: 能够写出测试用例,即说明对问题域已经有一个清晰的了解, 节省

测试驱动开发-TDD

基本思想 在编写功能代码之前,先写单元测试用例,开发的目的是为了让这个测试用例通过 测试驱动开发注意事项 1.开发围绕着测试展开 2.编写的每个测试恰好能体现一种失败情况 3.编写的功能代码恰好能通过一个测试用例 附:常见的测试方法 功能测试.单元测试.系统测试和负荷测试等 原文地址:https://www.cnblogs.com/youmingDDD/p/9322722.html