TDD
首先说一下名词解释,TDD,英文名称Test-Driven Development,中文名称测试驱动开发,简单的断下句“测试/驱动/开发”,简单的理解一下,就是测试驱动着开发,大白话就是说用一边测试一边来推动着项目的开发,类似我们平时说的一步一个脚印,做一件事就把他给做好,每一步都要认真的走下去,保质保量的完成项目。
TDD是敏捷开发中的一项核心实践和技术,也是一种设计方法论。
TDD开发的优点:
1、可以保证代码的质量。可以对自己的所需要的业务功能的每一步设计进行验证,并得到正确的结果,减少bug的出现的,特别对于复杂业务逻辑的项目,以小步慢走的方式,避免后期繁重的测试和维护工作。
2、找到了重构的信心,必要时候你还可以痛痛快快的并且满怀信心的对代码做一场大的变革。这样我们的代码变得干净了,扩展性、可以维护性以及易理解性纷至沓来。
3、在团队建设中能够进行分工,以可执行的形式文档化你的需求,迫使你分清职责隔离依赖以驱动你的设计,编织安全网以便将Bug扼杀在在摇篮状态,防止其逃逸。不同于传统开发(传统的开发人员开发的软件的测试是为了找出已经逃逸得bug,可能这个bug已经长成了毒瘤)。注:这两种活动都是必要的,而且毫不冲突,互为补充。
4、帮助你养成一个新的思维习惯,不光在你编程的道路上,在你的工作和生活中,你慢慢的会把自己的需求进行分析设计并不断地验证,最终更好去实现自己的人生目标。
TDD开发的缺点:
1、对于测试驱动不熟练或者喜欢偷懒的的人员,加大了代码的编写量,测试代码是系统代码的两倍或更多。
2、可能不适合时间很紧的软件开发,更适合于产品和平台的开发。
TDD原则:
怎么做TDD(关键5步)
- 加入一个新的测试
- 运行下新加的测试,看到它失败(因为你还没写功能代码)
- 对开发代码做很小的修改,目的就是让新加的测试通过 (注意这里的目的)
- 运行所有的测试(test case),然后看到所有测试都通过了 (看到测试都变成绿色,一般都会小开心一下)
- 移掉重复的代码,对代码进行重构 (既包括功能代码,也包括测试代码。特别注意红色的字串 一般会有重复,还有一些代码可以抽出来变成公用方法,测试代码中同样的初始化和还原测试环境的代码,可以放到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在Unity3D游戏项目开发中的实践
0x00 前言 关于TDD测试驱动开发的文章已经有很多了,但是在游戏开发尤其是使用Unity3D开发游戏时,却听不到特别多关于TDD的声音.那么本文就来简单聊一聊TDD如何在U3D项目中使用以及如何使 ...
- 初步认识TDD
TDD,测试驱动开发(Test Driven Development)是极限编程中倡导的程序开发方法,以其倡导先写测试程序,然后编码实现其功能得名.本文将对TDD有一个较为系统的认识. 基础属性 ...
- Asp.Net Core + Dapper + Repository 模式 + TDD 学习笔记
0x00 前言 之前一直使用的是 EF ,做了一个简单的小项目后发现 EF 的表现并不是很好,就比如联表查询,因为现在的 EF Core 也没有啥好用的分析工具,所以也不知道该怎么写 Linq 生成出 ...
- TDD原则
TDD 介绍 测试驱动开发,或者叫 TDD,是一个敏捷方法,通过确保在代码是先前手动编写测试用 例,用测试来驱动开发,从而翻转开发生命周期(它不只是作为一种校验工具). TDD 的原则很简单的: 只有 ...
- 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 ...
- 使用IdleTest进行TDD单元测试驱动开发演练(3) 之 ASP.NET MVC
一.[前言] (1)本文将用到IOC框架Unity,可参照<Unity V3 初步使用 —— 为我的.NET项目从简单三层架构转到IOC做准备>(2)本文的解决方案是基于前述<使用I ...
- 使用IdleTest进行TDD单元测试驱动开发演练(2)
[前言] 1. 有关上篇请参见<使用IdleTest进行TDD单元测试驱动开发演练(1)>,有关本篇用到Entity Framework Code First请参见<使用NuGet助 ...
- 使用IdleTest进行TDD单元测试驱动开发演练(1)
[前言] 开发工具:Visual Studio 2012 测试库:Visual Studio 2012自带的MSTest DI框架:Unity 数据持久层:Entity Framework 前端UI: ...
- 前端自动化测试 —— TDD环境配置(React+TypeScript)
欢迎讨论与指导:) 前言 TDD -- Test-Drive Development是测试驱动开发的意思,是敏捷开发中的一项核心实践和技术,也是一种测试方法论.TDD的原理是在开发功能代码之前,先编写 ...
- TDD学习笔记【四】--- 如何隔离相依性 - 基本的可测试性
前言 相信许多读者都听过「可测试性」,甚至被它搞的要死要活的,还觉得根本是莫名其妙,徒劳无功.今天这篇文章,主要要讲的是对象的相依性,以及对象之间直接相依,会带来什么问题.为了避免发生因相依性而导致设 ...
随机推荐
- 读书时间《JavaScript高级程序设计》二:面向对象
接着上次的进度,开始看第6章. 第6章 面向对象的程序设计 理解对象 创建自定义对象最简单的方式就是创建一个 Object 的实例,然后为它添加属性和方法. var person = new Obje ...
- Android开发技巧——PagerAdapter再简单的包
再次内容View的ViewPager该适配器PagerAdapter简包,支持List数据与SparseArray数据.随着更新的浏览功能. 首先,首先贴上顶部抽象类代码: /* * Date: 14 ...
- 查询系统--基于Solr4.9.0实现
为什么非要搜索系统 随着在产品的数量的增长.和复杂的检索要求,直接从数据库中检索信息,它已经无法满足展示机搜索需求. 实例: keyword=%E8%8B%B9%E6%9E%9C&enc=ut ...
- 从session实现机制分析模拟请求验证码的可行性(转)
悲剧了,发现写完这篇blog没有配上这个格调超高的标题. 1.0问题背景 现在要实现一个带验证码网站的的自动登陆功能.验证码识别过程不再这篇文章的讨论之中.(之后有篇文章我会详细的总结验证码的识别 ...
- 【转】Android HTTP协议
前言 说到HTTP协议,那必须要说说WWW了,WWW是环球信息网(World Wide Web )的缩写,也可以简称为Web,中文名字为“万维网”.简单来说,WWW是以Internet作为传输媒介的一 ...
- JavaScript 初识Promise 对象
什么是Promise? 其实, Promise就是一个类,而且这个类已经成为ES6的标准,是 ECMAScript 6 规范的重要特性之一.这个类目前在chrome32.Opera19.Firefox ...
- 解决github访问问题
github这是个好地方.但是,上不去就蛋疼. 今天github上不去,果断f12下,看下network.发现里面好多请求都是指向 github.global.ssl.fastly.net这个域名的, ...
- Android checkbox和radiobutton 以及Toast和AlertDialog的使用
package com.example.radiobutton_01; import android.app.Activity; import android.os.Bundle; import an ...
- 王立平--Button底,点击效果设置
1.新....xml <? xml version="1.0" encoding="utf-8"?> <selector xml ...
- Android数据加载和Json解析——蓝本
1.下载数据来创建一个实体类 class MyData { String imagepath; String title; String desc; public MyData(String imag ...