BDD vs TDD

 

在敏捷开发中我们常听到BDD,TDD,ATDD….等术语。这里我想谈谈我对TDD和BDD的看法,以及在项目中的应用。

TDD is 测试驱动开发. TDD针对每个特定的功能写测试代码。当然一开始测试会失败(Red)的,因为我们的功能还不存在。然后写简单的代码使测试通过(Green)。接着重构代码(Refactor)。始终重复Red-Green-Refactor直到整个功能完成

BDD is 行为驱动开发. BDD首先创建的是可执行的规范(Specification)。当然一开始规范会失败(Red)的,因为我们的功能还不存在。然后写简单的代码使规范通过(Green)。接着重构代码(Refactor)。

clip_image002

在我看来BDD并不是替代TDD的一种敏捷开发模式。BDD可以看作是对TDD的一种补充,当然你也可以把它看作TDD的一个分支。在上图中BDD并没有去掉单元测试,BDD的验收测试是建立在单元测试的基础中。BDD在意程度上可以 TDD在项目实施过程中的一些不足。因为TDD并不能完全保证根据设计所编写的测试就是用户所期望的功能。BDD将这一部分简单和自然化,用自然语言来描述,让开发、测试、BA以及客户都能在这个基础上达成一致。因为测试优先的概念并不是每个人都能接受的,可能有人觉得系统太复杂而难以测试,有人认为不存在的东西无法测试。

最后TDD/BDD在我个人所接触的或参加过的一些项目中,并不能完全做到测试先行。尤其在项目的初期或是项目竞标阶段,成功的关键是快速验证你的IDEA的正确性,快速应变市场变化的速度。而且很多情况下我们在和客户的Specification没有确认的情况下,也就无从入手BDD了。无论TDD还是BDD,我们都关注开发过程中的产品质量,但是不能盲目引用TDD/BDD。。。

posted on 2012-12-31 21:37  Sandy8103  阅读(830)  评论(2编辑  收藏  举报