`

TDD测试驱动开发

阅读更多

      TDD是Test Driven Development的简称,意为测试驱动开发。测试驱动开发是一种软件的开发方法。它指在编写某个功能的代码之前先编写测试代码,然后编写能使测试通过的功能代码,逐个测试来实现软件的开发。测试驱动开发有助于提高代码质量和开发进度。

测试驱动开发一般步骤:

1.新增一个测试

2.运行所有测试,发现新增测试不能通过

3.做一些小改动,让程序可以运行

4.运行所有测试,并且全部通过

5.重构代码

      我做的练习是一个测试一个四位随机数的例子(开发工具rubymine)

      要求:产生一个四位数;每位必须是数字;第一个(或千位)数字不能是0;四位数的每位数字不能相同

首先根据要求写测试程序,下面是测试程序的基本模版:

 

describe("number", function () {

    beforeEach(function () {
    });

    afterEach(function(){
    })

    it("should be four length ", function () {
    });

 describe后面的number是对本页测试的一个总的描述。

 

beforeEach(function ( ) {})是对本页测试的一个初始化,只要加载过这个页面,他就会执行。

而afterEach(function (){ })是本页面的所有测试程序执行完后进行的操作,若涉及到相关的存储事件,一般添加 :

localStorage.clear();

 意为清空本页涉及存储的所有数据,包括beforeEach(function ( ) {})执行过的初始化数据

 

上述测试程序我存储的文件名是number_spec.js。若要加载此页需要在SpecRunner.html中引入。下面是引入的格式:

 

<script type="text/javascript" src="spec/number_spec.js"></script>

 

 

根据我做的练习,下面是一部分例子:

 

 it("should be four length ", function () {
        var number = creat_a_number().toString()

        expect(number.length).toEqual(4);
    });

 这个是测试是关于所要求的数字是否是四位的。create_a_number( )是功能函数中的一个产生随机数的方法,在此处代表产生的随机数,而

 

 

create_a_number( ).toString()

 将这个随机数转化为字符串形式,这样就可以根据字符串的长度来测试这个数是不是四位的。

 

 

expect(number.length).toEqual(4);

 expect括号中的内容代表要测试的内容,toEqual括号中的内容表示要测试内容的结果,如果不一致则SpecRunner.html中就会报错

 

 

 

下面是判断生成的内容是否是数字:

 

it("should be a number", function () {
        var number = creat_a_number();

        expect(isNaN(number) == 0).toEqual(true);
    });

 这个测试用到了isNaN方法,用来判断是否全是数字,用的“==”,所以如果是数字则返回值是“true”

 

 

 

下面是判断这个随机数是否是随机产生的,其方法就是测试产生的随机数中的某个数的概率,设计离散数学相关思想。

 

it("should be randomly producing", function () {
        var numbers = [];
        for(var i = 0; i < 1000; i++){
            var number = creat_a_number();
            numbers.push(number);
            localStorage.numbers = JSON.stringify(numbers);
        }
        var same_number =  _.filter(numbers,function(number){
            return numbers[0] == number;
        })
        var Probability =  same_number.length/numbers.length;
        expect(Probability>=0.001 && Probability<0.005).toEqual(true);
    });

 通过for循环产生一千个随机数,然后存储一下,此前我并没有存储,而是调用产生随机数的方法返回值,但那样容易导致电脑卡死,所以我就存储了一下,这样在 afterEach(function(){})就加上localStorage.clear(),结束本页测试后来清除这些数据。

 

 

var Probability =  same_number.length/numbers.length;

 先找到所产生的一千个随机数中的某一个,再找与这个随机数相等的存数在same_number数组中。通过上面两个数组的长度比来对比随机数的产生概率,下面的expect用到这个概率,给出这个概率的范围Probability>=0.001 && Probability<0.005(不要写成0.001<=Probability<0.005),只要这个概率在此范围就通过测试。概率范围自己设定。

 

 

此前我将产生一千个随机数及上面将数字转化为字符串和判断数字的方法均写到的功能函数中,这样就不符合测试驱动开发的思想了,也可以将这些方法写到一个专门的测试函数中

 

 

下面是有关随机数的功能方法内容,这是我写的一个产生所需要求的方法:

 

function creat_a_number(){
    var one = Math.floor(Math.random()*9+1);
    var two = Math.floor(Math.random()*9+0);
    var three = Math.floor(Math.random()*9+0);
    var four = Math.floor(Math.random()*9+0);
    if(!(one!=two&&one!=three&&one!=four&&two!=three&&two!=four&&three!=four)){
        return creat_a_number ();
    }
    var number = one*1000+two*100+three*10+four*1;
    localStorage.current_number = number;
    return number;
}

 Math.floor(Math.random()*9+1)是产生一个1到9的随机数的方法,若是产生0到9就是Math.floor(Math.random()*9+0)。

 

 

我后面要做的是猜数字,也就是猜这个随机数,而且若有几个位置相同且数字相同就返回几A,若位置不同但数字相同就返回几B,所以就需要对这个四位数进行拆分,取出每位的数字。这个用到parseInt方法,详细介绍见“http://www.w3school.com.cn/jsref/jsref_obj_regexp.asp”;

function get_every_number(number){
    var one = parseInt(number / 1000);
    var two = parseInt((number - one * 1000) / 100);
    var three = parseInt((number - one * 1000 - two * 100) / 10);
    var four = number % 10;
    var every_number = [];
    every_number.push(one,two,three,four)
    return every_number;
}

 前三个数字用的是减去上一位值,第四个数字要用减明显不太合适,它更适合用取余的方法。这样就可以将每位的数字取出与所猜测的数字逐位比较,返回相应的值。

 

 

分享到:
评论
1 楼 it_node 2017-10-23  
文章写得真好,推荐个在线实战的地方:
http://xc.hubwiz.com/course/5911d52ab343f27b0ae1b895?affid=iteye

相关推荐

    TDD测试驱动开发.pptx

    总之,TDD测试驱动开发是一种值得推广的软件开发方法。尽管它有自身的挑战和局限,但其带来的好处却远远超过了这些不足。通过不断的实践和学习,开发团队能够逐渐适应TDD的节奏,并最终将TDD内化为开发流程的一部分...

    TDD 测试驱动开发 文档 详细

    标题中的“TDD测试驱动开发文档详细”表明这是一个关于TDD的详细资料集合,可能涵盖了TDD的理论基础、实践步骤、工具使用等方面。描述中提到的“java TDD测试开发流程”,意味着这些文档专注于Java语言的TDD实践,...

    Visual Studio 2010 TDD 测试驱动开发 实战 视频及源码

    教程主题:Visual Studio 2010 TDD 测试驱动开发 实战 教程录制:柳永法 web:http://www.yongfa365.com/ 本教程旨在以最简单的hello world方式像您展示 Visual Studio 2010强大的TDD,推荐任何没接触过VS2010及TDD...

    TDD测试驱动开发(Kent Beck) 讲解代码(C#)

    测试驱动开发(Test-Driven Development, 简称TDD)是一种软件开发方法,由Kent Beck在其著作中提出。在TDD中,测试是开发过程的先驱,开发者首先编写测试用例,确保它们失败,然后编写最小化的代码来使这些测试通过...

    TDD测试驱动开发PDF及源码.zip

    TDD是测试驱动开发(Test-Driven Development)的英文简称,是敏捷开发中的一项核心实践和技术,也是一种设计方法论。TDD的原理是在开发功能代码之前,先编写单元测试用例代码,测试代码确定需要编写什么产品代码。...

    测试驱动开发(TDD)入门讲解及代码实例

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

    测试驱动开发介绍及实践.pptx

    TDD测试驱动开发讲稿,配合技术分享视频:https://www.bilibili.com/video/BV1t64y1u7C1

    tdd测试驱动在软件工程中的辩证思考-软件工程-工程.pdf

    软件工程中,TDD 测试驱动开发模式是一种重要的开发方法论。该模式自上世纪九十年代中后期开始流行以来,一直在争论中前进发展。TDD 模式的优点在于可以提升代码的质量,要求需求和开发的一致,保证了简洁高效的类、...

    测试驱动开发的艺术 epub电子书

    极限编程反其道而行之,主张采用测试驱动开发(TDD)的方法,即通过测试定义所要开发的功能的接口,然后实现功能的开发过程。TDD通过不断地测试推动代码的开发,既简化了代码,又保证了软件质量。本书采用“手把手”...

    code kata以及测试驱动开发TDD介绍实用PPT课件.pptx

    "Code Kata 和测试驱动开发(TDD)介绍实用 PPT课件" 本课程主要介绍了 Code Kata 和测试驱动开发(TDD)的概念和实践方法,并对软件设计的基本原则进行了详细的讲解。课程共计 13 页,涵盖了软件设计的九个原则,...

    测试驱动开发(TDD)深入浅出

    测试驱动开发 TDD ,将读者带入XP极限编程的神奇世界!

    测试驱动开发的3项修炼:走出TDD丛林

    测试驱动开发(TDD)是一种敏捷软件开发技术,它要求开发者在编写功能代码之前先编写测试代码。这种方法提倡先写失败的单元测试,然后编写刚好足够使测试通过的代码,最后通过重构来提高代码的质量。王晓毅所著的...

    java测试驱动开发教程+代码实例

    《Java测试驱动开发》介绍如何将各种TDDzui佳实践应用于Java开发,主要内容包括:用Java语言进行TDD会用到的各种工具和框架,所需环境搭建;通过实际应用程序,展示TDD优点及开发中应注意的主要问题;TDD是如何通过...

    测试驱动开发.pdf测试驱动开发.pdf

    测试驱动开发(Test-Driven Development,简称TDD)是一种敏捷软件开发的技术,以测试作为开发过程的中心环节。它倡导在编写产品代码之前先编写测试代码,确保产品代码能够通过这些测试。这种方法与传统的开发方式...

    TDD驱动测试开发培训

    测试驱动开发(TDD)是一种软件开发方法,它要求开发者首先编写失败的单元测试用例,然后再编写足够的代码以使测试通过。接下来,开发者会对代码进行重构以改善设计,同时确保测试依然能够通过。这个过程循环进行,...

    测试驱动开发TDD培训讲义

    测试驱动开发(Test Driven Development,简称TDD)是一种软件开发方法,强调在编写实际的生产代码之前,先编写能够失败的单元测试。TDD的核心理念是“先测试,后编码”,通过测试来驱动设计,确保软件的质量和可...

Global site tag (gtag.js) - Google Analytics