如何把BDD,ATDD和TDD结合起来?

原创 2017年01月01日 23:53:21

笔者最近在研究BDD,尽管在做BDD(行为驱动开发,或者ATDD,可接受性测试)的时候,不一定需要TDD(测试驱动开发),或者在做TDD(测试驱动开发的时候也不需要BDD(为驱动开发)。但是如果项目对代码覆盖率有质量要求的时候,我想BDD一般很难达到很高的代码覆盖率(比如90%),因为其是一种比普通单元测试更高粒度的用户需求,那么在这种情况下,如何在BDD(行为驱动开发)把TDD(测试驱动开发)结合起来,从而提高代码的测试覆盖率呢?为了解释这个问题,首先咱们来看BDD和TDD分别是什么,其特点是什么。

  • Behavior Driven Development,行为驱动开发是一种敏捷软件开发的技术,它鼓励软件项目中的开发者、QA和非技术人员或商业参与者之间的协作。BDD最初是由Dan North在2003年命名,它包括验收测试和客户测试驱动等的极限编程的实践,作为对测试驱动开发的回应。在过去数年里,它得到了很大的发展。其中支持BDD的框架,有Cucumber,Spec,Spock等开源项目。
    

  •  TDD是测试驱动开发(Test-Driven Development)的英文简称,是敏捷开发中的一项核心实践和技术,也是一种设计方法论。TDD的原理是在开发功能代码之前,先编写单元测试用例代码,测试代码确定需要编写什么产品代码。TDD虽是敏捷方法的核心实践,但不只适用于XP(Extreme Programming),同样可以适用于其他开发方法和过程,一般高级语言都会提供某种xUnit框架来实现TDD,比如Java中的JUnit,.NET中的NUnit。 其基本步骤和周期如下。

       

从上面的BDD和TDD的定义已经流程,我们可以知道,其实BDD已经包含了TDD,但是因为其是面向可接受性测试的,是直接面向客户的,其测试案例(Test Case)的粒度又不可能细化到代码中每一个方法或者代码中的分支路径(if else; 异常等等),否则就变成了单元测试;但是如果其描述的可接受性测试,不覆盖代码中每一个方法或者代码中的分支路径的话,如果保证交付的软件产品的方法级别的代码质量呢?这个时候,肯定需要有某一个契合点能把BDD和TDD结合起来,具体结合方式请看下图示意。



从上面的图,我们可以看出。BDD(ATDD)是一种一种更高效的开发策略,其能帮助开发者精确的把握客户的需求。是一种高层次的行为方式。而低层次,需要更进一步细化的细节的实现,则需要使用TDD来进行分解BDD(ATDD)的需求规格说明。换句话说,TDD是为了保证开发者正确的做开发;而BDD(ATTD)则是保证了开发出来的产品或者软件是正确的。因此,其结合的契合点就是,在上层,还是通过和客户商量定义好的测试场景,进行一一列出,然后把需要实现的粗粒度测试场景(更面向用户的),分解成开发人员能够实现的方法级别的粒度,从而能够使用上TDD,从而不但能让客户和开发人员需要文档,只需要看我们的BDD中的功能规则说明只能知道该软件是否满足他们的需求,同时也能达到目标的代码覆盖率,从而进一步提高产品质量。






版权声明:本文为博主原创文章,未经博主允许不得转载。

浅谈TDD、BDD与ATDD软件开发

这些知识之前就了解了一点,还没来得急总结,现在总结一下。 1. 首先了解一下这三个开发模式都是什么意思: TDD:测试驱动开发(Test-Driven Development) 测试驱动开发是敏捷开发...

大话TDD,BDD,ATDD的本质

最近在研究软件工程中最佳实践,接触了TDD(测试驱动开发),BDD(行为驱动开发), ATDD(可接受性测试驱动开发)。有一天,在路上走的时候,突然想了一下,他们之间有什么共通点呢?TDD,BDD,A...

TDD/ATDD

1,用正确的方法解决正确的问题.  代码质量影响缺陷率和可维护性.  传统开发模型经常产出不满足客户需求的产品(需求理解不准确或变化). 在细节层面,以TDD方式编写代码(用正确的方法做...

浅谈TDD、BDD与ATDD软件开发 (敏捷开发模式)

这些知识之前就了解了一点,还没来得急总结,现在总结一下。 1. 首先了解一下这三个开发模式都是什么意思: TDD:测试驱动开发(Test-Driven Development) 测试驱动开发...

怎样看待活文档“ATDD”---记敏捷中国2012 open space

为什么要有一份活文档? 在现实中有太多这样的情形:新介入一个项目,老人会丢过来一堆的文档或者链接地址,并告诉你说,这些是与这个项目相关的一些文档资料,这些资料里有些内容是已经过时了的,项目有些最新的...
  • janne09
  • janne09
  • 2012年12月17日 17:46
  • 1801

BDD:源于TDD而胜于TDD

什么是BDD?    Behave Driven Development(行为驱动开发?)为什么要有BDD?     TDD其实是测试行为的     TDD的测试用例太专业,业务和需求人员...
  • kiol
  • kiol
  • 2006年12月08日 14:54
  • 4273

从 TDD 到 BDD

转自http://www.cnblogs.com/lidaobing/archive/2010/07/18/1779987.html 最近在学 ruby, 也用了 rspec, 传统的 xUnit 是...

TDD、BDD、ATDD、DDD 软件开发模式

四个开发模式意思: TDD:测试驱动开发(Test-Driven Development) BDD:行为驱动开发(Behavior Driven Development) ATDD:验收测试驱动开...

BDD敏捷开发入门与实战

BDD敏捷开发入门与实战1.BDD的来由2003年,Dan North首先提出了BDD的概念,并在随后开发出了JBehave框架。在Dan North博客上介绍BDD的文章中,说到了BDD的想法是从何...
  • dc_726
  • dc_726
  • 2015年11月06日 22:11
  • 4099

ATDD和TDD的区别是什么?

ATDD和TDD区别
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:如何把BDD,ATDD和TDD结合起来?
举报原因:
原因补充:

(最多只允许输入30个字)