初步认识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. How to Use NSLog to Debug CGRect and CGPoint

    转载:  http://iosdevelopertips.com/debugging/how-to-use-nslog-to-debug-cgrect-and-cgpoint.html CGPoint ...

  2. Kinect开发笔记之二Kinect for Windows 2.0新功能

    这是本博客翻译文档的第一篇文章.笔者已经苦逼的竭尽全力的在翻译了.但无奈英语水平也是非常有限.不正确或者不妥当不准确的地方必定会有,还恳请大家留言或者邮件我以批评指正.我会虚心接受. 谢谢大家.   ...

  3. C++随机数的使用方法

         学过别的高级语言的都知道,产生随机数用的都是相似于random这种字符,c++也不例外,在C++中使用的是rand()函数,可是不同的是,假设在C++中仅仅使用了比如 "int i ...

  4. CCBValue

    #ifndef __CCB_VALUE_H__ #define __CCB_VALUE_H__ #include "cocos2d.h" #include "Extens ...

  5. 源码编译安装 MySQL 5.5.x 实践(转)

    1.安装cmakeMySQL从5.5版本开始,通过./configure进行编译配置方式已经被取消,取而代之的是cmake工具.因此,我们首先要在系统中源码编译安装cmake工具. # wget ht ...

  6. 7-days-asp-dotnet-mvc-day1

    目录 第 1 天 第 2 天 第 3 天 第 4 天 第 5 天 第 6 天 第 7 天 0. 前言 今天是开心的一天.因为我们终于来到了系列学习的最后一节.我相信你喜欢之前的课程,并从中学到了许多. ...

  7. 创建和分析excel文件

    jxl.jar:下载地址:http://download.csdn.net/detail/xuxu198899223/7717737 package excel; public class BookV ...

  8. JavaEE(6) - JMS消息选择和查看

    1. JMS消息的类型.消息头和消息属性 消息类型: StreamMessage MapMessage TextMessage ObjectMessage BytesMessage JMS消息中的消息 ...

  9. 使用 CodeIgniter 框架快速开发 PHP 应用(七)

    原文:使用 CodeIgniter 框架快速开发 PHP 应用(七) CodeIgniter 和对象这是玩家章节.它讲述的是 CodeIgniter 的工作原理,也就是揭开CI头上'神秘的面纱'.如果 ...

  10. 第17章 中介者模式(Mediator Pattern)

    原文 第17章 中介者模式(Mediator Pattern) 中介者模式  概述:   在软件开发中,我们有时会碰上许多对象互相联系互相交互的情况,对象之间存在复杂的引用关系,当需求更改时,对系统进 ...