初步认识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之后,给我的感觉就是自下而上了。不考虑全局的东西,我一个小功能一个小功能的实现,曾经是从树顶来做,现在是从树根了,每一个根节点实现了我往上一层一层加起来,最后就是一棵树了,哈哈~

时间: 2024-08-02 19:40:42

初步认识TDD的相关文章

(转)TDD的iOS开发初步以及Kiwi使用入门

本文转自“瞄神”博客 TDD的iOS开发初步以及Kiwi使用入门 测试驱动开发(Test Driven Development,以下简称TDD)是保证代码质量的不二法则,也是先进程序开发的共识.Apple一直致力于在iOS开发中集成更加方便和可用的测试,在Xcode 5中,新的IDE和SDK引入了XCTest来替代原来的SenTestingKit,并且取消了新建工程时的“包括单元测试”的可选项(同样待遇的还有使用ARC的可选项).新工程将自动包含测试的target,并且相关框架也搭建完毕,可以说

使用TDD理解views.py与urls.py的关系

首先必须对MVC的概念有初步的认识,django也遵循这样一套规范,views.py相当于视图函数,是整个架构中的处理引擎,而urls.py的作用就是将用户请求送入这样的引擎. 项目结构: urls.py: from django.conf.urls import include, url from django.contrib import admin urlpatterns = [ # Examples: #url(r'^$', 'mysite.views.home', name='home

初步了解CPU

了解CPU By JackKing_defier 首先说明一下,本文内容主要是简单说明CPU的大致原理,所需要的前提知识我会提出,但是由于篇幅我不会再详细讲解需要的其他基础知识.默认学过工科基础课. 一.总述 先从计算机的结构说起,在现代计算机中,CPU是核心,常常被比喻为人的大脑.现在的计算机都为“冯·诺依曼机”,“冯诺依曼机”的一个显著的特点就是由运算器.存储器.控制器.输入设备和输出设备组成.CPU是运算器和控制器合起来的统称,因为运算器和控制器在逻辑关系和电路结构上联系十分紧密,尤其在大

zerglurker的C语言教程004——指针初步讲解

在上次的教程里面,我提到了指针. 针对指针,这次我将简单的讲讲,后面我还会讲到--那个时候你应该有了相当的基础. 首先,先讲讲指针类型. 任何类型关键字后面加一个*符号,就会变成指针类型. 比如: char → char* 字符指针 int → int* 整数指针 double→double* 双精度指针 甚至还可以这样: char*→char** 字符指针的指针类型 →char*** 字符指针的指针的指针类型- 指针本质上是一个内存地址值,该内存地址上存放的是相关类型的数值.但是void*指针

nodejs,webpack安装以及初步运用

nodejs安装: 1.下载:https://nodejs.org/en/download/ 2.安装node-v6.11.3-x64.msi文件,直接默认安装(next--): 3.验证是否完成安装:cmd 进入后输入命令 node -v  回车能得到nodejs版本号: 输入node 回车再输入console.log('aaaaa') 回车能正常显示输出. 这表示nodejs安装成功. webpack安装: 1.npm安装:在f盘新建文件夹webpack,在webpack文件夹建文件夹dem

Github 的注册教程和初步使用体验

我叫许晴,是网工143的学生,学号是1413042064,兴趣包括手绘,看书和手游.学习过c++和汇编语言课程,但在编程方面没什么独立实践经验. 我的Githup用户名是 XQ123 .下面是我在github的注册流程及初步使用体验. 我先搜索github,试了好几次才进去官网,但是在手机客户端注册的话比较好进.这是网页注册的界面.使用名不能设成中文,只能使用数字.字母和特殊符号,不能以短横线开头.如果设置的用户名有重复的话也不能设置 如果设置的用户名已经有人使用的话,也是不能设置的. 然后就是

Unity3D游戏开发初探—2.初步了解3D模型基础

一.什么是3D模型? 1.1 3D模型概述 简而言之,3D模型就是三维的.立体的模型,D是英文Dimensions的缩写. 3D模型也可以说是用3Ds MAX建造的立体模型,包括各种建筑.人物.植被.机械等等,比如一个大楼的3D模型图.3D模型也包括玩具和电脑模型领域. 互联网的形态一直以来都是2D模式的,但是随着3D技术的不断进步,在未来的时间里,将会有越来越多的互联网应用以3D的方式呈现给用户,包括网络视讯.电子阅读.网络游戏.虚拟社区.电子商务.远程教育等等.甚至对于旅游业,3D互联网也能

虚拟桌面技术的初步探讨

[文章标题]: 虚拟桌面技术的初步探讨  [文章作者]:  newjueqi  [作者邮箱]: [email protected][作者QQ号]: 190678908[编写语言]:VC++6.0[操作平台]: XP-SP2[作者声明]:感觉到这是一种非常有意思的技术,这篇就当成是学习笔记吧!本人只是感兴趣,没有其它目的,失误之处敬请给位大侠原谅! 本文曾发表于看学论坛http://bbs.pediy.com/showthread.PHP?t=82537                      

【Qt学习笔记】1.初步接触

一.前言 Qt是一个跨平台的C++图形面向对象的框架,今天开始学习并记录学习过程,希望通过这段时间的努力学会Qt的使用. 同时我也希望在学习的过程中对C++的各种特性有能深刻的认识. 此外,我在Qt初步的学习过程中,所用的环境应该是 VS2015 IDE 二.安装 官网下载Qt安装包和 Qt for VS addin,分别安装,并配置. 三.Hello World 接下来用Qt框架来完成第一个程序 首先打开VS,创建一个Qt工程 熟悉的C++界面,但Qt是有可视化界面的,点击解决方案管理器中的.