首先说一下名词解释,TDD,英文名称Test-Driven Development,中文名称测试驱动开发,简单的断下句“测试/驱动/开发”,简单的理解一下,就是测试驱动着开发,大白话就是说用一边测试一边来推动着项目的开发,类似我们平时说的一步一个脚印,做一件事就把他给做好,每一步都要认真的走下去,保质保量的完成项目。

TDD是敏捷开发中的一项核心实践和技术,也是一种设计方法论。

TDD开发的优点:

       1、可以保证代码的质量。可以对自己的所需要的业务功能的每一步设计进行验证,并得到正确的结果,减少bug的出现的,特别对于复杂业务逻辑的项目,以小步慢走的方式,避免后期繁重的测试和维护工作。

2、找到了重构的信心,必要时候你还可以痛痛快快的并且满怀信心的对代码做一场大的变革。这样我们的代码变得干净了,扩展性、可以维护性以及易理解性纷至沓来。

3、在团队建设中能够进行分工,以可执行的形式文档化你的需求,迫使你分清职责隔离依赖以驱动你的设计,编织安全网以便将Bug扼杀在在摇篮状态,防止其逃逸。不同于传统开发(传统的开发人员开发的软件的测试是为了找出已经逃逸得bug,可能这个bug已经长成了毒瘤)。注:这两种活动都是必要的,而且毫不冲突,互为补充。

4、帮助你养成一个新的思维习惯,不光在你编程的道路上,在你的工作和生活中,你慢慢的会把自己的需求进行分析设计并不断地验证,最终更好去实现自己的人生目标。

TDD开发的缺点:

       1、对于测试驱动不熟练或者喜欢偷懒的的人员,加大了代码的编写量,测试代码是系统代码的两倍或更多。

2、可能不适合时间很紧的软件开发,更适合于产品和平台的开发。

TDD原则:      

       独立测试:不同代码的测试应该相互独立,一个类对应一个测试类(对于C代码或C++全局函数,则一个文件对应一个测试文件),一个函数对应一个测试函数。用例也应各自独立,每个用例不能使用其他用例的结果数据,结果也不能依赖于用例执行顺序。 一个角色:开发过程包含多种工作,如:编写测试代码、编写产品代码、代码重构等。做不同的工作时,应专注于当前的角色,不要过多考虑其他方面的细节。
 
       测试列表:代码的功能点可能很多,并且需求可能是陆续出现的,任何阶段想添加功能时,应把相关功能点加到测试列表中,然后才能继续手头工作,避免疏漏。
测试驱动:即利用测试来驱动开发,是TDD的核心。要实现某个功能,要编写某个类或某个函数,应首先编写测试代码,明确这个类、这个函数如何使用,如何测试,然后在对其进行设计、编码。
 
      先写断言:编写测试代码时,应该首先编写判断代码功能的断言语句,然后编写必要的辅助语句。
可测试性:产品代码设计、开发时的应尽可能提高可测试性。每个代码单元的功能应该比较单纯,“各家自扫门前雪”,每个类、每个函数应该只做它该做的事,不要弄成大杂烩。尤其是增加新功能时,不要为了图一时之便,随便在原有代码中添加功能,对于C++编程,应多考虑使用子类、继承、重载等OO方法。
 
      及时重构:对结构不合理,重复等“味道”不好的代码,在测试通过后,应及时进行重构。
 
      小步前进:软件开发是复杂性非常高的工作,小步前进是降低复杂性的好办法。
 

怎么做TDD(关键5步)

  1. 加入一个新的测试
  2. 运行下新加的测试,看到它失败(因为你还没写功能代码)
  3. 对开发代码做很小的修改,目的就是让新加的测试通过 (注意这里的目的)
  4. 运行所有的测试(test case),然后看到所有测试都通过了 (看到测试都变成绿色,一般都会小开心一下)
  5. 移掉重复的代码,对代码进行重构 (既包括功能代码,也包括测试代码。特别注意红色的字串 一般会有重复,还有一些代码可以抽出来变成公用方法,测试代码中同样的初始化和还原测试环境的代码,可以放到intilize和cleanup中去)

而外还有一些步骤也是可以加入的,比方

  • 在写测试代码前,先从需求出发,准备一个Test list (需要测到的功能的列表)。忘掉你该怎么实现,那是后面的事情
  • 每测完一个就用横线划掉
  • 如果发现有漏掉的test 就加到这个列表中(列表测完你的功能也就完成了)

总结: 

     通过一上午的学习,对TDD(测试驱动开发)有了基本的理解,对TDD的带来的优点有了初步的认识,接下来的学习中,我会转变思想,以“测试先行”的原则来开发稳定高质量的代码,把写测试像写代码注释一样,深入骨髓。

参考资料:

由衷向以下博客表示感谢,也以便以后查询方便

http://www.cnblogs.com/xiadao521/p/4092846.html

http://blog.csdn.net/m13666368773/article/details/7006912

http://baike.baidu.com/link?url=pbvA3Y5wTfaUMJKHgKtSd3pNuWB08imkCRW0BTVAOc_9TZ5Z7mOn4T6No1Crxvb-Jmp1Wg4xr2uvRyi4cY3OoSqwgVNPkwqzJf-DrxTKQ9e

TDD(测试驱动开发)学习一:初识TDD的更多相关文章

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

    本节我们将学习一些测试驱动开发环境的搭建,测试驱动开发概念和流程.所涉及的内容全部会以截图的形式贴出来,如果你也感兴趣,可以一步一步的跟着来做,如果你有任何问题,可以进行留言,我也会很高兴的为你答疑. ...

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

    2014年我一直从事在敏捷实践咨询项目,这也是我颇有收获的一年,特别是咨询项目的每一点改变,不管是代码质量的提高,还是自组织团队的建设,都能让我们感到欣慰.涉及人的问题都是复杂问题,改变人,改变一个组 ...

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

    本文转载自:http://www.cnblogs.com/whitewolf/p/4205761.html 最近也在了解TDD,发现这篇文章不错,特此转载一下. TDD(测试驱动开发)培训录 2015 ...

  4. TDD(测试驱动开发)

    TDD(测试驱动开发)培训录 2014年我一直从事在敏捷实践咨询项目,这也是我颇有收获的一年,特别是咨询项目的每一点改变,不管是代码质量的提高,还是自组织团队的建设,都能让我们感到欣慰.涉及人的问题都 ...

  5. 测试驱动开发学习笔记(UTDD)

    title: 测试驱动开发学习笔记(UTDD) date: 2020-08-01 23:59:17 tags: [2020, 学习一门技能, TDD, DevOps] What TDD(Test-Dr ...

  6. (译)TDD(测试驱动开发)的5个步骤

    原文:5 steps of test-driven development https://developer.ibm.com/articles/5-steps-of-test-driven-deve ...

  7. 基于SOA架构的TDD测试驱动开发模式

    以需求用例为基,Case&Coding两条线并行,服务(M)&消费(VC)分离,单元.接口.功能.集成四层质量管理,自动化集成.测试.交付全程支持. 3个大阶段(需求分析阶段.研发准备 ...

  8. TDD(测试驱动开发)的推广方法论

  9. 测试驱动开发(TDD)的思考

    极限编程 敏捷开发是一种思想,极限编程也是一种思想,它与敏捷开发某些目标是一致的.只是实现方式不同.测试驱动开发是极限编程的一部分. 1.极限编程这个思路的来源 Kent Beck先生最早在其极限编程 ...

随机推荐

  1. mbed列--基于飞思卡尔FRDM KL25Z鼠标设计的高速实现

    ========================================================== 原创文章转载请注明:blog.csdn.net/guo8113 ========= ...

  2. Cocos2d-x 单点触摸--让我们用手指动起来的精灵

    转载请注明出处:http://blog.csdn.net/oyangyufu/article/details/25656673 效果图: CCTouch类装载了触摸点的信息.包含触摸点的横纵坐标值和触 ...

  3. js怎样推断一个对象{}是否为空对象,没有不论什么属性

    js怎样推断一个对象{}是否为空对象,没有不论什么属性 前段时间用js写了一个相似"angularjs"用于数据绑定的东西,功能是比較简单了, 通常应该传进来的是一个ArrayLi ...

  4. S2SH新手框架结构的准备工作只需要导入这些文件

    实习北京最近一直在某公司.时间很冲突,总想着有事找东西坐,思想,做事先成套我吧 一套完整的东西想好主题,术去实现了,在学校尽管说是学了J2EE,可是确实没学到东西,Struts2+Hibernate不 ...

  5. shell编程三大神器之grep

  6. JS它DOM

    DOM:document object model.文档对象模型.它主要由许多节点.而基于JS对象的一切视角,DOM核心是节点对象和操作方法的属性.从下面三方面来介绍DOM. 一.节点查找与操作 这部 ...

  7. SQL Server 2008 R2 性能计数器详细列表(五)

    原文:SQL Server 2008 R2 性能计数器详细列表(五) SQL Server:SQL Statistics 对象: 监视编译和发送到 SQL Server 实例的请求类型 SQL Ser ...

  8. 在win8.1 64位系统+cocos2d-x2.2.3下搭建android交叉编译环境

    搭建前须要下载的软件包(默认已搭建好cocos2d-x而且可在VS上执行,本人VS版本号为2013): 1:java 下载地址:http://www.java.com/zh_CN/download/m ...

  9. 解决Activity启动黑屏和设置android:windowIsTranslucent不兼容activity切换动画的问题

    在该项目中遇到开Activity之后,黑屏问题,解决的办法是在网上通过设置发现theme和style特性,可以实现. http://www.cnblogs.com/sunzn/p/3407078.ht ...

  10. Java的结构之美【1】——构造对象

    当我们遇到多个构造器參数的时候可能会想到用构件器,代码例如以下: /** * 构建器 * @author 阳光小强 * */ public class Lunch { private String c ...