一、详解TDD

1.1、TDD概念 :Test Drived Develop

测试驱动开发是敏捷开发中的一项核心实践和技术,也是一种方法论。TDD的原理是在开发功能代码之前,编写单元测试用例代码,测试代码决定先编写什么产品代码。TDD虽是敏捷方法的核心实践,但不只是适用于XP,同样可以适用于其他开发方法和过程

TDD的基本思路就是通过测试来推动整个开发的进行,但测试驱动开发并不只是单纯的测试工作,而是把需求分析,设计,质量控制量化的过成。

TDD的重要目的不是仅仅测试软件,测试工作保证代码质量只是其中一部分,而且是开发过程中帮助客户和程序员去除模棱两可的需求。TDD首先考虑使用需求(对象、接口、功能、过程、等)

1.2 测试驱动开发的优缺点

  TDD:测试驱动开发的优点:

再任意一个开发节点都可以拿出一个可以使用,含少量的BUG 并具有一定的功能能够发布的产品。

TDD:测试驱动开发的缺点:

缺点:增加了代码工作量。测试代码几乎是系统代码的两倍或更多,但是同时节省了程序调试的时间以及挑错的时间。

 TDD=TFD+Refactoring      第一次测试开发加上重构

TDD:Test First Development  首次测试开发

1.3、TDD原则

1.独立测试:不同代码的测试应该相互独立,一个类对应一个测试类(对于C代码或C++全局函数,则一个文件对应一个测试文件),一个函数对应一个测试函数用例也应该各自独立,每个用例不能使用其他用例的结果数据,结果也不能依赖于例执行顺序。一个角色开发过程中包含多种工作,(编写测试代码、编写产品代码、代码重构 等。做不同工作的时候,应专注于当前要做的事情,不考虑其他,比如测试的时候就做测试)

2.测试列表:代码的功能点很多,不可能是所有的需求都是很明确的,而是陆陆续续的出现新的需求,在进行的任何阶段时想添加功能时,应把相关的功能点 添加到测试列表中,在继续改阶段的工作,以避免疏漏。

3.测试驱动:及利用测试来驱动开发,是TDD的核心。要实现某个功能,要编写某个类或某个函数,应该先编写测试代码,明确这个类、这个函数如何使用,如何测试,然后对其进行设计、编码。

4.先写断言:编写测试代码时,应该首先编写判断代码功能的断言语句,然后编写必要的辅助语句。

能应该比较单纯,每个类、每个函数、只做自己的事情,不掺杂然和功能。

6.及时重构:对结构不合理,重复等不好的代码,在测试通过后,应及时进行重构。

7.小步前进:软件开发是复杂性非常高的工作,小步前进是降低复杂性的好办法。

1.4、TDD总结

测试驱动开发:既可以测试框架的性能、也可以测出业务的合理性,也可以测试出代码的问题、虽然开发时间会延后、但是可以提高客户的满意度,上线后系统比较稳定。

一个软件的产出,需要具有详细的设计:从开始的竞标,到立项到设计,开发,交付任何一个环节都不可缺少。

举例描述:

某公司竞标后拿下了这样一个工程,在两座山之间建造一座大桥,产品经理把业务具体分析过后交给了公司的设计师(架构师)设计师根据客户对产品的质量、美观、使用性、进行架构设计:产出物如下图:

架构师设计出有几个桥墩沉重力度,桥面宽度高度,形状。。。等。

这样整体架构就出现了,高级工程师根据架构师的架构进行小的设计比如说用什么样的材料怎么做桥于桥之间的关联等,(在开发来说就是用什么接口,接口怎么制定,怎么保证安全性)剩下的就交给中级工程师了,等到开发完后进行测试。

上面简单的描述是一般产品的产出流程,但是一般的流程去做这样一个特殊的工程显然不够的,比如说怎么知道这个框架是否安全,现在的说服力一般都体现在数字和具体的有说服力的案例上面,但是没有案例的话,就需要我们队框架进行测试了,在这个没有真正做施工之前,框架设计出之后进行的测试,大家就可以理解成TDD测试了,这时候的TDD很显然偏向于架构的设计。再往小点的方面来说比如测试接口的时候,其实也是设计接口,TDD偏向于设计,而不是很多人认为的测试。

利用TDD 测试驱动 举一个例子:

业务场景:用户下订单,订单类型“普通订单、批量订单、个人订单” 判断用户是是否具有下此类订单的权限。

如果所根据这个业务让咱们设计一下咱们肯定都没有问题:

数据库创建脚本

CREATE TABLE  OederTable --订单表
(
ID INT PRIMARY KEY IDENTITY (,), -- ID
OredrNo varchar(), --订单编号
OrderTypeNo varchar(), --订单类型编号
CreateBy varchar()--创建人
) CREATE TABLE UserRights --用户权限表
(
OrderTypeNo varchar(),--订单类型编号
UserID INT --用户ID
) CREATE TABLE UserTable --用户表
(
ID INT PRIMARY KEY IDENTITY (,), --ID
UserName varchar(), --用户名
UserPwd varchar() --用户密码
) CREATE TABLE TypeTable --订单类型表
(
OrderTypeNo varchar(),--订单类型编号
OrderTypeName varchar()--订单类型名称
)

 填充数据

实现测试业务流程代码具体如下:

代码中映射了四个实体类,一个订单操作类。

订单操作类具体代码如下(代码中并没有具体实现主要以意会为主(~o~))

 //测试代码
public void TestMethod1()
{
OrderOperation OrderOperation = new OrderOperation();
OederTable Oeder = new OederTable();
Oeder.OredrNo = "";
Oeder.OrderTypeNo = ""; //普通订单权限
Oeder.CreateBy = "admin";
//1.验证用户是否存在
//2.验证用户是否是否具有下订单的权限
//3.保存入库
/************假设用户表为空时咱们已经通过用户名密码查询过并且存在该用户*************/
UserTable user = new UserTable();
if (user != null)
{
//通过UserID查询权限是否有下普通订单的权限 Oeder.OrderTypeNo = "1"; 普通订单权限
UserRights Rights = new UserRights();
if (Rights != null)
{
//添加入库
OrderOperation.add(Oeder);
}
}
}

其实不管用任何办法,只要结果符合描述就行,HARD Code 也是一个很好的方法,我们现在关注点应该放在业务流程的正确性,数据从哪里来不重要。

如果添加成功最好有一个返回值能体业务的正确性,比如添加成功后返回“OK”

以上描述有部分来自于互联网:

测试驱动开发 TDD的更多相关文章

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

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

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

    组里马上要转变开发模式,由传统的开发模式(Developer开发,QA测试),转变为尝试TDD(Test-driven development,测试驱动开发)的开发模型.由此将不存在QA的角色,或者仅 ...

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

    测试驱动开发原则 翻译自<<Expert Python Programming>> 测试驱动开发是指首先编写包含所有测试软件特点的测试集,然后再去开发软件.也就是说,在编写软件 ...

  4. 44 | 测试先行:测试驱动开发(TDD)

  5. 浅谈测试驱动开发(TDD)

    测试驱动开发(TDD)是极限编程的重要特点,它以不断的测试推动代码的开发,既简化了代码,又保证了软件质量.本文从开发人员使用的角度,介绍了 TDD 优势.原理.过程.原则.测试技术.Tips 等方面. ...

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

    测试驱动开发(TDD)是极限编程的重要特点,它以不断的测试推动代码的开发,既简化了代码,又保证了软件质量.本文从开发人员使用的角度,介绍了 TDD 优势.原理.过程.原则.测试技术.Tips 等方面. ...

  7. 敏捷开发 —— TDD(测试驱动开发)

    测试驱动开发 TDD(Test-Driven Development)是敏捷开发的一项核心实践,同时也是一种设计技术和方法. 既然是测试驱动,便是测试,测试用例先行: 首先编写好测试用例,期待值,实际 ...

  8. 测试驱动开发与Python

    最近在看一本书<Test-Driven Development with Python>,里面非常详细的介绍了如何一步一步通过测试驱动开发(TDD)的方式开发Web项目.刚好这本书中使用了 ...

  9. 基于Python的测试驱动开发实战

    近年来测试驱动开发(TDD)受到越来越多的关注.这是一个持续改进的过程,能从一开始就形成规范,帮助提高代码质量.这是切实可行的而非天马行空的. TDD的全过程是非常简单的.借助TDD,代码质量会得到提 ...

随机推荐

  1. Oracle开发环境搭建

    一.软件准备 地址:oracle官网 安装包:因为个人学习用,所以就安装服务器端就可以了,不需要客户端. 一共两个压缩文件,解压时一起解压到到一个文件夹. 本人使用的:win32_11gR2_data ...

  2. 有关uploadifive的使用经验(转:http://www.cnblogs.com/itBscs/p/4781786.html )

     这段时间做了一个项目用到uploadifive上传控件,和uploadify不同,这个控件是基于HTML5的版本而不用支持falsh,因而移动端也可以使用. 整理用过的相关属性与方法: 属性 作 ...

  3. UICollectionView请求网络数据显示(Text)

    TEXT: AppDelegate.m self.window.rootViewController = [[[UINavigationController alloc]initWithRootVie ...

  4. Python学习 - 输入和输出

    #输出 print('hello, python') print('The quick brown fox', 'jumps over', 'the lazy dog') #多个字符串,用逗号隔开,就 ...

  5. 10、Libgdx的内存管理

    (官网:www.libgdx.cn) 游戏是非常耗资源的应用.图片和音效可能耗费大量的内存,另一方面来说,这些资源没有被Java垃圾回收,让一个垃圾处理来决定将显存中的5M的图片进行释放也不是一个明知 ...

  6. Java关键字之static

    static 表示"全局"或者"静态"的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念. 被stati ...

  7. HashMap与HashTable面试宝典

    u012233832的专栏 初生牛犊 目录视图 摘要视图 订阅 写博客,送money.送书.送C币啦   7-8月博乐推荐文章    砸BUG 得大奖 100%中奖率   微信开发学习路线高级篇上线  ...

  8. PLSQL_R12 MOAC多组织的四个应用(案例)

    一.摘要 R12 Form 或者其他二次开发时,很多情况下会涉及R12 MOAC多组织开发,以下介绍了4个常见的应用,如有遗漏还请学友继续补充 1. 开发时打开Form自动弹出组织选择实现方式(增加C ...

  9. React Native ios开发第一课

    前言 本篇文章的作用在于帮助你快速上手使用React Native编写iOS应用.如果你现在还不太了解React Native是什么以及Facebook为什么要创建React Native,你可以先看 ...

  10. 开发资源库(repositiory)

    1.. 52研发网MTK软件 2.一流研发 3. android+MTK/华为的源代码及资料库(CryToCry96) 点击打开链接 4.android+MTK/华为/联想的源代码及资料库(lucka ...