测试驱动开发(Test-Driven Development)是一种不同于传统软件开发流程的新型开发方法,它将具体实现的功能进行模块划分,实现不同模块之间的零交集,并且各个模块实现的功能先编写测试代码,然后编写使测试通过的功能代码,实现测试驱动功能的开发。使用测试驱动开发(简称TDD)有助于编写简洁可用和高质量的代码,有很高的灵活性和健壮性,能快速响应变化,查找错误源,并加速开发过程。
下面我主要就我做的一个猜数字的小游戏来分析如何进行测试驱动开发。
首先获得测试驱动开发的脚手架,网址:http://jasmine.github.io/2.0/introduction.html
一、测试的基本模块介绍
测试的工程项目主要有两个文件夹要注意spec、src,spec文件夹里的js文件里编写测试用例,一般命名规则...Spec.js,文件主要内容:
describe("Contrast_number", function () { beforeEach(function () { }); afterEach(function () { }); it("should be able to match none and there is no same word in the different location", function () { var contrast_result=contrast([1,2,3,4],[5,6,7,8]); expect(contrast_result).toBe("0A0B"); }); });
describe里定义了的测试的描述Contrast_number,也就是这个js的中心是Contrast_number,参数里定义了要执行的方法。
beforEach是在执行测试代码之前先执行的,一般函数里写数据的初始化函数。
afterEach是在执行完测试后执行的,一般写数据清空的方法调用函数。
每个it代表一个测试,第一个参数写该测试的描述,第二个参数执行测试方法,一般是执行了功能函数后返回可用于测试的结果,使用expect来写自己期望执行功能函数获得的返回值能够得到什么。
这样一个测试就完成了,然后在相应的src文件的js文件里写功能方法,这个步骤就体现了先写测试后写功能实现方法这个特点。
二、猜数字游戏为例
1、整个测试驱动开发与项目结合的步骤如下
1)分析功能,划分模块
这里猜数字游戏主要有三大块:
电脑随机数与竞猜者输入数的对比,返回对比结果(以 *A*B的形式返回,A代表位置、值都相同,B代表值相同,位置不同);
获得电脑随机数;
竞猜次数不能超过6次的判断;
这三个模块在进行测试时方法要没有交集,这点非常重要,因为我当时就将模块方法之间进行了交叉使用,使得逻辑出现交叠,这样对于测试是非常不好的,因为它没有办法精确定位错误方法。
2)分别编写三个模块的测试
这里要尽可能把测试可能出现的情况想全了,比如数字对比可能出现的集中结果;猜数字游戏如果次数用完了没猜对,或次数不大于6次且猜数字成功,或次数不大于6次,而且还没成功。还有就是随机数的重复判断等。分别编写it里的函数
3)具体功能方法的编写
由于是分模块的所以不同模块的功能实现要写到不同的js文件里面,而各个模块方法的调用,以及模块之间的调用要建一个专门的js文件放这些逻辑方法。
这样就可以通过测试不断地改功能方法直到测试通过。
测试通过后,要进行代码的重构,简化,写功能方法时,边重构边写也可以。
4)实际开发项目前台设计
功能方法测试通过后,只需将建的这几个测试方法、功能方法及其相关文件复制到自己的工程项目下,然后编写界面,编写controller,controller里就可以直接调用已通过测试的功能方法。
这样一个测试驱动开发的项目就基本完成了。
2、功能代码实现
在整个项目中,一个重难点是获得随机数并判断重复,还有就是对比结果
1)获得随机数
var no = parseInt(10*Math.random());
我这里使用Math.random()获得[0,1)的随机数,然后乘以10,换算到[0,10)之间的随机数,使用parseInt取整,得到[0,10)之间的整数。
2)随机数重复判断
我将每个随机数存到一个数组里,再获得的遍历数组进行判断是否重复,如果重复,就再重新获得一个no,如果不重复,然后存进数组里接着获取下一个。这里使用_.filter来判断
var is_repeat=_.filter(random,function(num){ return num==no; });
3)猜数字比较函数
function contrast(Random_number,input_number){ var a=0; var b=0; for(var i=0;i<Random_number.length;i++){ if(Random_number[i]==input_number[i]){ a++; } } c =_.difference(Random_number,input_number.length; b=4-a-c; var result= a.toString()+"A"+ b.toString()+"B"; return result; }
使用测试驱动开发,使得逻辑思维从传统开发方法中转换过来,先测试后实现功能,模块划分清晰明了,逻辑明确,易于纠错,灵活调用。总的感觉就是测试驱动开发,让我的开发逻辑变得更加清晰!
相关推荐
测试驱动开发(Test-Driven Development,简称TDD)是一种敏捷软件开发的技术,以测试作为开发过程的中心环节。它倡导在编写产品代码之前先编写测试代码,确保产品代码能够通过这些测试。这种方法与传统的开发方式...
《Java测试驱动开发》介绍如何将各种TDDzui佳实践应用于Java开发,主要内容包括:用Java语言进行TDD会用到的各种工具和框架,所需环境搭建;通过实际应用程序,展示TDD优点及开发中应注意的主要问题;TDD是如何通过...
要使测试驱动开发在软件行业中得以繁荣兴盛,需要一些条件,《C#测试驱动开发》从讨论这些条件开始。软件开发发展到今天,有其历史和特定的条件,理解这些很重要。避免重复过去的错误也很重要。在自己当前的开发实践...
极限编程反其道而行之,主张采用测试驱动开发(TDD)的方法,即通过测试定义所要开发的功能的接口,然后实现功能的开发过程。TDD通过不断地测试推动代码的开发,既简化了代码,又保证了软件质量。本书采用“手把手”...
《测试驱动开发》是Kent Beck的经典著作,这本书深入探讨了测试驱动开发(TDD)这一软件开发实践。TDD是一种编程方法论,它强调在编写实际功能代码之前,先编写测试用例,以此来指导软件设计和编码过程。通过这种...
### 测试驱动开发(TDD)概述 测试驱动开发(Test-Driven Development,简称TDD)是一种软件开发方法论,它要求在编写实际功能代码之前先编写测试用例。这种方法有助于确保代码的质量,并使得代码更加健壮、易于维护...
测试驱动开发(Test-Driven Development,简称TDD)是一种软件开发方法,它的核心思想是先编写测试用例,再编写满足这些测试用例的代码。这种方法强调在编码之前,先明确需求并创建能够验证功能是否正确的测试。TDD...
测试驱动开发(Test-Driven Development,简称TDD)是一种软件开发方法,由Kent Beck在其著作《测试驱动开发:通过实例》中提出并详尽阐述。这种方法主张先编写自动化测试用例,然后再编写满足这些测试的代码,从而...
花井志生*的《C现代编程(集成开发环境设计模 式*限编程测试驱动开发重构持续集成)》从使用C语 言进行嵌入式开发的特点入手,主要讲解了如何将集 成开发环境、设计模式、*限编程、测试驱动开发、 重构、持续集成这些...
测试驱动开发(Test-Driven Development,简称TDD)是一种软件开发方法,由Kent Beck在其同名著作《测试驱动开发》中提出。这种方法主张先编写测试用例,再编写实现功能的代码,以此来驱动开发过程,确保代码的质量...
《java测试驱动开发》 源码 本书介绍如何将各种TDD最佳实践应用于Java开发,主要内容包括:用Java语言进行TDD会用到的各种工具和框架,所需环境搭建;通过实际应用程序,展示TDD优点及开发中应注意的主要问题;TDD是...
测试驱动开发(TDD)是极限编程的重要特点,它以不断的测试推动代码的开发,既简化了代码,又保证了软件质量。本文从开发人员使用的角度,介绍了 TDD 优势、原理、过程、原则、测试技术、Tips 等方面。 背景 一个...
"TDD测试驱动开发.pptx" TDD 测试驱动开发是一种软件开发方法,它强调通过编写自动化测试来驱动整个开发过程。TDD 是敏捷开发中的一个核心实践和技术,也是一种设计方法论。其主要包括两方面:测试先行和代码重构。...
### Python测试驱动开发 #### 知识点概览 1. **测试驱动开发(TDD)的概念** - 定义与原则 - TDD在软件开发生命周期中的作用 - 实施TDD的好处与挑战 2. **Python与测试驱动开发** - Python作为TDD的理想语言 -...
测试驱动开发(TDD)是一种敏捷软件开发技术,它要求开发者在编写功能代码之前先编写测试代码。这种方法提倡先写失败的单元测试,然后编写刚好足够使测试通过的代码,最后通过重构来提高代码的质量。王晓毅所著的...