`
xinklabi
  • 浏览: 1588249 次
  • 性别: Icon_minigender_1
  • 来自: 吉林
文章分类
社区版块
存档分类
最新评论

测试驱动开发-TDD

 
阅读更多
测试驱动开发,英文全称Test-Driven Development,简称TDD,是一种不同于传统软件开发流程的新型的开发方法。它要求在编写某个功能的代码之前先编写测试代码,然后只编写使测试通过的功能代码,通过测试来推动整个开发的进行。这有助于编写简洁可用和高质量的代码,并加速开发过程。
 

1概述编辑

Kent Beck先生最早在其极限编程(XP)方法论中,向大家推荐“测试驱动”这一最佳实践,还专门撰写了《测试驱动开发》一书,详细说明如何实现。经过几年的迅猛发展,测试驱动开发已经成长为一门独立的软件开发技术,其名气甚至盖过了极限编程。[1]

2基本原理编辑

测试驱动开发的基本思想就是在开发功能代码之前,先编写测试代码,然后只编写使测试通过的功能代码,从而以测试来驱动整个开发过程的进行。这有助于编写简洁可用和高质量的代码,有很高的灵活性和健壮性,能快速响应变化,并加速开发过程。
测试驱动开发的基本过程如下:
① 快速新增一个测试
② 运行所有的测试(有时候只需要运行一个或一部分),发现新增的测试不能通过
③ 做一些小小的改动,尽快地让测试程序可运行,为此可以在程序中使用一些不合情理的方法
④ 运行所有的测试,并且全部通过
⑤ 重构代码,以消除重复设计,优化设计结构
简单来说,就是不可运行/可运行/重构——这正是测试驱动开发的口号。[2]

3一个生动比喻编辑

举个比较生动的例子,这个例子你一定已经在很多关于TDD的文献资料上都看到过,但它确实是一个不错的比喻。在此我进行了一些加工和扩展。
盖房子的时候,工人师傅砌墙,会先用桩子拉上线,以使砖能够垒的笔直,因为垒砖的时候都是以这根线为基准的。TDD就像这样,先写测试代码,就像工人师傅先用桩子拉上线,然后编码的时候以此为基准,只编写符合这个测试的功能代码。
而一个新手或菜鸟级的小师傅,却可能不知道拉线,而是直接把砖往上垒,垒了一些之后再看是否笔直,这时候可能会用一根线,量一下砌好的墙是否笔直,如果不直再进行校正,敲敲打打。使用传统的软件开发过程就像这样,我们先编码,编码完成之后才写测试程序,以此检验已写的代码是否正确,如果有错误再一点点修改。
你是希望先砌墙再拉线,还是希望先拉线再砌墙呢?如果你喜欢前者,那就算了,而如果你喜欢后者,那就转入TDD阵营吧!详细可参阅。[3]

4本质和优势编辑

或许只有了解了测试驱动开发的本质和优势之后,你才会领略到她的无穷魅力。 测试驱动开发不是一种测试技术,它是一种分析技术、设计技术,更是一种组织所有开发活动的技术。相对于传统的结构化开发过程方法,它具有以下优势:[3]
1) TDD根据客户需求编写测试用例,对功能的过程和接口都进行了设计,而且这种从使用者角度对代码进行的设计通常更符合后期开发的需求。因为关注用户反馈,可以及时响应需求变更,同时因为从使用者角度出发的简单设计,也可以更快地适应变化。
2) 出于易测试和测试独立性的要求,将促使我们实现松耦合的设计,并更多地依赖于接口而非具体的类,提高系统的可扩展性和抗变性。而且TDD明显地缩短了设计决策的反馈循环,使我们几秒或几分钟之内就能获得反馈。
3) 将测试工作提到编码之前,并频繁地运行所有测试,可以尽量地避免和尽早地发现错误,极大地降低了后续测试及修复的成本,提高了代码的质量。在测试的保护下,不断重构代码,以消除重复设计,优化设计结构,提高了代码的重用性,从而提高了软件产品的质量。
4) TDD提供了持续的回归测试,使我们拥有重构的勇气,因为代码的改动导致系统其他部分产生任何异常,测试都会立刻通知我们。完整的测试会帮助我们持续地跟踪整个系统的状态,因此我们就不需要担心会产生什么不可预知的副作用了。
5) TDD所产生的单元测试代码就是最完美的开发者文档,它们展示了所有的API该如何使用以及是如何运作的,而且它们与工作代码保持同步,永远是最新的。
6) TDD可以减轻压力、降低忧虑、提高我们对代码的信心、使我们拥有重构的勇气,这些都是快乐工作的重要前提。
7)快速的提高了开发效率

5现状和前景编辑

测试驱动开发的技术已得到越来越广泛的重视,但由于发展时间不长,相关应用并不是很成熟。现今越来越多的公司都在尝试实践测试驱动开发,但由于测试驱动开发对开发人员要求比较高,更与开发人员的传统思维习惯相违背,因此实践起来有一定困难。 美国不少著名软件公司如IBM很早就开始向敏捷转型,在此过程中,TDD通常是最重要也最艰难的一个,正如IBM开发转型部门副总裁Sue Mckinney所言:测试驱动开发前景非常诱人,但是“在这个过程中我们的付出可能也是最多的。”Forrester的高级分析师Dave West认为,测试驱动开发(TDD)就像是“圣杯”,但是“如果能达到这个目标,付出再多的辛苦也是值得的。”
我想,测试驱动开发的推广过程中,首要的问题是将开发人员长期以来形成的思维观念和意识形态转变过来,开发人员只喜欢编码,不喜欢测试,更无法理解为什么没有产品代码的时候就先写单元测试;其次是相关的技术支持,测试驱动开发对开发人员提出了更高的要求,不仅要掌握测试和重构,还要懂得设计模式等设计方面的知识。
正像每种革命性的产物刚刚产生之初所必然要经历的艰难历程,测试驱动开发也正在经历着,但她正在逐渐走向成熟,前途一片光明。相信未来几年内,国内的一定会越来越多的软件企业开始普及测试驱动开发。[3]

6参考文献编辑

张平平等 译. Kent Beck . [M][1]
王晓毅. 测试驱动开发的三项修炼—走出TDD丛林[M][2]
鲍志云 译. Vincent Massol . JUnit in Action中文版[M].[4]
陈浩等 译, J.B.Rainsberger , Scott Stirling. JUnit Recipes中文版——程序员实用测试技巧[M][5]
陈峰. 毕业设计. 用测试驱动的方式开发Struts2应用[3]
 
 
参考资料
  • 1.  Kent Beck .测试驱动开发(中文版) :中国电力出版社 ,2004 .

  • 2.  王晓毅 .测试驱动开发的3项修炼:走出TDD丛林 :清华大学出版社 ,2008 .

  • 3.  用测试驱动的方式开发Struts2应用  .清晨之风技术博客 .2009-07-30 [引用日期2013-06-15] .

  • 4.  马森 .JUnit IN ACTION中文版 :电子工业出版社 ,2005 .

  • 5.  J.B.Rainsberger , Scott Stirling .JUnit Recipes中文版:程序员实用测试技巧 :电子工业出版社 ,2006 .

相关文献
分享到:
评论

相关推荐

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

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

    测试驱动开发-中文英文.zip

    测试驱动开发(Test-Driven Development,简称TDD)是一种软件开发方法,由Kent Beck在其著作《测试驱动开发:通过实例》中提出并详尽阐述。这种方法主张先编写自动化测试用例,然后再编写满足这些测试的代码,从而...

    测试驱动开发-实例1

    ### 测试驱动开发(TDD)概述 测试驱动开发(Test-Driven Development,简称TDD)是一种软件开发方法论,它要求在编写实际功能代码之前先编写测试用例。这种方法有助于确保代码的质量,并使得代码更加健壮、易于维护...

    Laravel开发-laravel-tdd-docs

    在 Laravel 框架中,Test-Driven Development(TDD,测试驱动开发)是一种强大的软件开发方法论,它强调先编写测试,然后编写满足这些测试的代码。这种实践有助于确保代码质量、减少错误并促进更好的设计。`laravel-...

    Laravel开发-tdd

    【Laravel开发-TDD(测试驱动开发)】 在软件开发领域,TDD(Test-Driven Development,测试驱动开发)是一种编程实践,它强调先编写测试用例,再编写实现功能的代码。Laravel,作为一款流行的PHP框架,高度支持TDD...

    ansible-sample-tdd, 利用ServerSpec实现Ansible的测试驱动开发 这是样品.zip

    ansible-sample-tdd, 利用ServerSpec实现Ansible的测试驱动开发 这是样品 ansible-sample-tdd利用ServerSpec实现Ansible的测试驱动开发。 这是样品ServerSpec是一个基于 ruby的测试框架。通知如果你想在其他项目中...

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

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

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

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

    测试驱动开发(TDD)

    测试驱动开发(TDD)是一种先进的软件开发方法,它的核心理念是“先写测试,后写代码”。在TDD的流程中,开发人员首先编写测试用例,这些测试用例定义了所需功能的行为边界和预期结果。然后,他们会运行这些测试,...

    9、测试驱动开发(TDD)介绍1

    测试驱动开发(TDD)介绍 测试驱动开发(TDD)是一种开发流程,旨在通过编写测试代码来驱动开发过程。这种开发方法可以保证项目的健壮性,尽可能地排除未知的bug,并提高代码的可读性、可维护性和可扩展性。 TDD的...

    phpunit-TDD驱动开发

    测试驱动开发(TDD, Test-Driven Development)是一种软件开发方法论,它要求在编写实际功能代码之前先编写测试用例。通过这种方式,可以确保代码的质量,并且有助于降低bug出现的概率。本篇文章将详细介绍如何使用...

    TDD测试驱动开发.pptx

    "TDD测试驱动开发.pptx" TDD 测试驱动开发是一种软件开发方法,它强调通过编写自动化测试来驱动整个开发过程。TDD 是敏捷开发中的一个核心实践和技术,也是一种设计方法论。其主要包括两方面:测试先行和代码重构。...

    JUnit 4测试驱动开发----junit技术讲解

    4. 测试驱动开发(TDD) 测试驱动开发是一种软件开发方法论,强调先写测试,再编写满足测试的代码。在JUnit 4的支持下,TDD流程变得更加顺畅。首先,开发者编写一个失败的测试,然后编写最小量的生产代码使测试通过...

    C-C++项目的测试驱动开发(TDD):从单元测试到集成测试.md

    在C/C++项目中应用测试驱动开发(TDD)的方法,从单元测试到集成测试,详尽介绍了测试的基础、框架选择、实际应用及最佳实践。文章首先阐述了TDD的核心理念及其优势,包括提升代码质量、减少错误和改进设计等。接着...

    TDD 测试驱动开发 文档 详细

    测试驱动开发(Test-Driven Development, 简称TDD)是一种软件开发实践,强调在编写实际代码之前先编写测试用例。这种方法的核心理念是通过编写能够失败的测试来定义需求,然后编写足够的代码使测试通过,最后重构...

    测试驱动开发-cpputest源码

    测试驱动开发(TDD)是一种软件开发方法,它提倡在编写实际功能代码之前先编写测试用例。cpputest是一个开源的C/C++测试框架,它为TDD提供了强大的支持。cpputest源码包含了框架的核心组件,以及示例代码,帮助开发者...

    测试驱动开发TDD(1-3)

    总结来说,测试驱动开发TDD是一种以测试为指导的开发模式,它通过编写测试来驱动功能代码的实现,强调代码的可测试性、可读性和可维护性。在实际应用中,TDD能够帮助开发者发现设计上的问题,提前预防错误,并提高...

    python测试驱动开发

    1. **测试驱动开发(TDD)的概念** - 定义与原则 - TDD在软件开发生命周期中的作用 - 实施TDD的好处与挑战 2. **Python与测试驱动开发** - Python作为TDD的理想语言 - Python中的测试框架:`unittest`与`pytest`...

    测试驱动开发-多币种实例3 笔记

    测试驱动开发(Test-Driven Development,简称TDD)是一种软件开发方法,强调在编写实际代码之前先编写测试用例。这种做法有助于确保软件的质量,因为每个功能或模块都必须通过预先定义的测试才能被认为是完整的。在...

Global site tag (gtag.js) - Google Analytics