[置顶] 如何把BDD,ATDD和TDD结合起来?

标签: ATDDTDDBDDjavaxUnit
929人阅读 评论(0) 收藏 举报
分类:

笔者最近在研究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中的功能规则说明只能知道该软件是否满足他们的需求,同时也能达到目标的代码覆盖率,从而进一步提高产品质量。






1
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:385741次
    • 积分:6344
    • 等级:
    • 排名:第4081名
    • 原创:228篇
    • 转载:0篇
    • 译文:5篇
    • 评论:157条
    博客专栏