初步认识TDD

TDD,测试驱动开发(Test Driven Development)是极限编程中倡导的程序开发方法,以其倡导先写测试程序,然后编码实现其功能得名。本文将对TDD有一个较为系统的认识。

   基础属性

  起源:20世纪90年代。

  性质:一种由极限编程倡导的程序开发方法。

  中心思想:先写测试程序,然后编码实现其功能。

  目的:取得快速反馈并使用“illustrate the main line”方法来构建程序。

   开发方式

  1、戴两顶帽子的开发方式

  (1)、戴实现功能的帽子,在测试的辅助下,快速实现其功能。

  (2)、戴上重构的帽子,在测试的保护下,通过去除冗余的代码,提高代码质量。

  2、中心思想

  测试驱动着整个开个过程。

  (1)、驱动代码的设计和功能的实现。

  (2)、驱动代码的再设计和重构。

   测 试

  1、特征

  测试驱动开发中需求分析和详细设计的范畴,在代码基本完毕以后,并且这些测试也成为单元测试的一个部分。

  2、要点

  可读性甚至比生产代码更重要,明确,简洁,足够的表达力。

  3、一般模式

  构造数据 — 操作数据 — 检验数据

  4、遵循的规则

  (1)、单个测试中断言数量应该最小化,可以快速方便地理解其结论。

  (2)、每个测试一个概念,即每个测试函数只做一件事。

  (3)、F.I.R.S.T原则

    快    速(First):能够快速运行。

    独    立(Independence):可单独运行每个测试,也就是说可以任何顺序运行测试。

    可重复(Repeat):在任何环境中测试均能通过。

    自动验证(Spontaneous Verification):应有布尔值输出。

    及    时(Timely):应在生产代码之前编写。

   TDD三定律

  1、在编写不能通过的单元测试前,不可编写生产代码。

  2、只可编写刚好无法通过的单元测试,不能编译也算不通过。

  3、只可编写刚好足以通过当前失败测试的生产代码。

  总的来说就是先写测试再写生产代码,写一个测试就应该立即写它的实现代码。

   评 价

  1、正面

  (1)、可以有效避免过度设计带来的浪费。

  (2)、可以让开发者在开发中拥有更全面的视角。

  (3)、确保所有需求都能被照顾到。

  2、负面

  (1)、过度关注用例和测试案例,而不是设计本身。

  (2)、可能会导致单元测试的覆盖度不够,比如可能缺乏边界测试。

  (3)、放慢开发实际代码的速度。

  (4)、对于GUI,资料库和Web应用而言,构造单元测试比较困难,若强行构造单元测试,反而会给维护带来额外的工作量。

  (5)、test case  并没有那么好写,如果说我们开发的Test Case是用来保证我们代码实现的正确性,那么,谁又来保证我们的Test Case的正确性呢?

   我的感悟

  使用TDD完成过一个小游戏项目,感觉TDD的开发方式让我觉得有了另一种思维开发方式,从这个项目的各个功能点来写测试,并通过测试来实现我们的生产代码。以前完成一个项目是自上而下的思维,就是站在一个宏观的角度,来全局总览这个项目,那么最开始的时候就得考虑很多,这个时候最容易陷入细节误区了,即会细化到某些细节难以控制自己的思维。现在接触TDD之后,给我的感觉就是自下而上了。不考虑全局的东西,我一个小功能一个小功能的实现,曾经是从树顶来做,现在是从树根了,每一个根节点实现了我往上一层一层加起来,最后就是一棵树了,哈哈~

ps:本文内容若是有误或者迷糊,还请指正或指出。

 
 
标签: TDD

认识TDD的更多相关文章

  1. TDD在Unity3D游戏项目开发中的实践

    0x00 前言 关于TDD测试驱动开发的文章已经有很多了,但是在游戏开发尤其是使用Unity3D开发游戏时,却听不到特别多关于TDD的声音.那么本文就来简单聊一聊TDD如何在U3D项目中使用以及如何使 ...

  2. 初步认识TDD

    TDD,测试驱动开发(Test Driven Development)是极限编程中倡导的程序开发方法,以其倡导先写测试程序,然后编码实现其功能得名.本文将对TDD有一个较为系统的认识.    基础属性 ...

  3. Asp.Net Core + Dapper + Repository 模式 + TDD 学习笔记

    0x00 前言 之前一直使用的是 EF ,做了一个简单的小项目后发现 EF 的表现并不是很好,就比如联表查询,因为现在的 EF Core 也没有啥好用的分析工具,所以也不知道该怎么写 Linq 生成出 ...

  4. TDD原则

    TDD 介绍 测试驱动开发,或者叫 TDD,是一个敏捷方法,通过确保在代码是先前手动编写测试用 例,用测试来驱动开发,从而翻转开发生命周期(它不只是作为一种校验工具). TDD 的原则很简单的: 只有 ...

  5. Atitit各种SDM 软件开发过程SDP sdm的ddd tdd bdd设计

    Atitit各种SDM 软件开发过程SDP sdm的ddd tdd bdd设计 1.1. software development methodology (also known as SDM 1 1 ...

  6. 使用IdleTest进行TDD单元测试驱动开发演练(3) 之 ASP.NET MVC

    一.[前言] (1)本文将用到IOC框架Unity,可参照<Unity V3 初步使用 —— 为我的.NET项目从简单三层架构转到IOC做准备>(2)本文的解决方案是基于前述<使用I ...

  7. 使用IdleTest进行TDD单元测试驱动开发演练(2)

    [前言] 1. 有关上篇请参见<使用IdleTest进行TDD单元测试驱动开发演练(1)>,有关本篇用到Entity Framework Code First请参见<使用NuGet助 ...

  8. 使用IdleTest进行TDD单元测试驱动开发演练(1)

    [前言] 开发工具:Visual Studio 2012 测试库:Visual Studio 2012自带的MSTest DI框架:Unity 数据持久层:Entity Framework 前端UI: ...

  9. 前端自动化测试 —— TDD环境配置(React+TypeScript)

    欢迎讨论与指导:) 前言 TDD -- Test-Drive Development是测试驱动开发的意思,是敏捷开发中的一项核心实践和技术,也是一种测试方法论.TDD的原理是在开发功能代码之前,先编写 ...

  10. TDD学习笔记【四】--- 如何隔离相依性 - 基本的可测试性

    前言 相信许多读者都听过「可测试性」,甚至被它搞的要死要活的,还觉得根本是莫名其妙,徒劳无功.今天这篇文章,主要要讲的是对象的相依性,以及对象之间直接相依,会带来什么问题.为了避免发生因相依性而导致设 ...

随机推荐

  1. linux下getsockopt和setsockopt具体解释及測试

    linux下getsockopt和setsockopt具体解释及測试 NAME 名字 getsockopt, setsockopt - get and set options on sockets 获 ...

  2. nginx conf by linux kernel

    #nginx conf by linux kernel net.ipv4.tcp_max_tw_buckets = 6000 net.ipv4.ip_local_port_range = 1024 6 ...

  3. BZOJ 2947 Poi2000 促销 set

    标题效果:特定n天,首先插入一些每天.然后去掉最高值和最低值,要付出最大的值-至少值价格.乞讨n总天数支付的价格 堆/段树/平衡树光秃秃的标题 #include <set> #includ ...

  4. 64位sql server 如何使用链接服务器连接Access

    原文:64位sql server 如何使用链接服务器连接Access 测试环境 操作系统版本:Windows Server 2008 r2 64位 数据库版本:Sql Server 2005 64位 ...

  5. 用android LinearLayout和RelativeLayout实现精确布局(转)

    先明确几个概念的区别: padding margin都是边距的含义,关键问题得明白是什么相对什么的边距. padding是控件的内容相对控件的边缘的边距. margin是控件边缘相对父控件的边距. a ...

  6. Java静态字段(属性、方法、类别)

    假设域被定义为static,那么每个类中仅仅有一个这种域.作为对照,每个对象对于全部的实例域却都有自己的一份拷贝. 比如,假定须要给每个雇员赋予唯一的标识码. 这里给Employee类加入一个实例域i ...

  7. POJ 2411 Mondriaan&#39;s Dream (dp + 减少国家)

    链接:http://poj.org/problem?id=2411 题意:题目描写叙述:用1*2 的矩形通过组合拼成大矩形.求拼成指定的大矩形有几种拼法. 參考博客:http://blog.csdn. ...

  8. swiper实现触摸滑动

    引入文件的必要性 <link href="css/swiper.min.css" rel="stylesheet" type="text/css ...

  9. cocos2d-x 3.1.1 学习笔记[4]GridActions 网格动画

    文章写的  http://blog.csdn.net/zhouyunxuan 老样子.见代码. //GridActions can only used on NodeGrid auto nodeGri ...

  10. .Net中把图片等文件放入DLL中,并在程序中引用

    原文:.Net中把图片等文件放入DLL中,并在程序中引用 [摘要] 有时我们需要隐藏程序中的一些资源,比如游戏,过关后才能看到图片,那么图片就必须隐藏起来,否则不用玩这个游戏就可以看到你的图片了,呵呵 ...