最近学习Node,使用mocha,接触到了BDD等概念,看了很多博客,发现很多都看不懂,作为一个门外汉,这一篇还是相对简单易懂的:


1. TDD

TDD指的是Test Drive Development,很明显的意思是测试驱动开发,也就是说我们可以从测试的角度来检验整个项目。大概的流程是先针对每个功能点抽象出接口代码,然后编写单元测试代码,接下来实现接口,运行单元测试代码,循环此过程,直到整个单元测试都通过。这一点和敏捷开发有类似之处。

TDD的好处自然不用多说,它能让你减少程序逻辑方面的错误,尽可能的减少项目中的bug,开始接触编程的时候我们大都有过这样的体验,可能你觉得完成得很完美,自我感觉良好,但是实际测试或者应用的时候才发现里面可能存在一堆bug,或者存在设计问题,或者更严重的逻辑问题,而TDD正好可以帮助我们尽量减少类似事件的发生。而且现在大行其道的一些模式对TDD的支持都非常不错,比如MVC和MVP等。

但是并不是所有的项目都适合TDD这种模式的,我觉得必须具备以下几个条件。

首先,项目的需求必须足够清晰,而且程序员对整个需求有足够的了解,如果这个条件不满足,那么执行的过程中难免失控。当然,要达到这个目标也是需要做一定功课的,这要求我们前期的需求分析以及HLD和LLD都要做得足够的细致和完善。

其次,取决于项目的复杂度和依赖性,对于一个业务模型及其复杂、内部模块之间的相互依赖性非常强的项目,采用TDD反而会得不尝失,这会导致程序员在拆分接口和写测试代码的时候工作量非常大。另外,由于模块之间的依赖性太强,我们在写测试代码的时候可能不采取一些桥接模式来实现,这样势必加大了程序员的工作量。

 2. BDD

BDD指的是Behavior Drive Development,也就是行为驱动开发。这里的B并非指的是Business,实际上BDD可以看作是对TDD的一种补充,当然你也可以把它看作TDD的一个分支。因为在TDD中,我们并不能完全保证根据设计所编写的测试就是用户所期望的功能。BDD将这一部分简单和自然化,用自然语言来描述,让开发、测试、BA以及客户都能在这个基础上达成一致。因为测试优先的概念并不是每个人都能接受的,可能有人觉得系统太复杂而难以测试,有人认为不存在的东西无法测试。所以,我们在这里试图转换一种观念,那便是考虑它的行为,也就是说它应该如何运行,然后抽象出能达成共识的规范。如果你用过JBehave之类的BDD框架,你将会更好的理解其中具体的流程。这里我推荐一篇具体阐述的文章。亲身体验行为驱动开发。

另外,关于TDD和BDD之间的关系,还可以参考这篇文章: 虚拟座谈会:代码测试比率、测试驱动开发及行为驱动开发

 3. DDD

DDD指的是Domain Drive Design,也就是领域驱动开发。这是一种非常好的思想,在我们刚开始学习程序,甚至刚开始学习三层架构的时候,我们曾经面临过很多疑惑,比如如何来实现我们的数据层?后来我们开始学习MVC,MVP等架构,如何设计Model层又成了我们的新问题。我们见过太多这种情况,Model变成了单纯的数据容器,也就是我们经常说的贫血模式。DDD实际上也是建立在这个基础之上,因为它关注的是Service层的设计,着重于业务的实现,因此不可避免的以贫血模式为基础而存在。但是它最大的特别是将分析和设计结合起来,不再使他们处于分裂的状态,这对于我们正确完整的实现客户的需求,以及建立一个具有业务伸缩性的模型,是有很大帮助的。


原文:http://www.cnblogs.com/ustbwuyi/archive/2012/10/26/2741223.html

BDD,TDD和DDD的相关推荐

  1. DDD与TDD比较之——TDD

    DDD与TDD比较--TDD 最近承诺要写一篇TDD和DDD区别的文章,在比较之前,我这里会先分别给出一个DDD的开发实例和TDD的开发实例.这篇文章主要讲解TDD. 最近在做一个金融的项目,很多金融 ...

  2. DDD与TDD比较之——DDD

    DDD与TDD比较之--DDD 最近承诺要写一篇TDD和DDD区别的文章,在比较之前,我这里会先分别给出一个DDD的开发实例和TDD的开发实例.这篇文章主要讲解DDD. 几年前,曾接手了别人写了一半的 ...

  3. 行为驱动开发(BDD)你准备好了吗?

    GitChat 作者:冰尘 原文:行为驱动开发(BDD)你准备好了吗? 关注微信公众号:「GitChat 技术杂谈」 一本正经的讲技术 [不要错过文末彩蛋] 这个Chat笔者将会和大家一起探讨下面的主 ...

  4. 用ABP只要加人即可马上加快项目进展(二) - 分工篇 - BDD实战篇 - .NET Core里跑Specflow...

    这是<如何用ABP框架快速完成项目 >系列中的一篇文章. BDD很赞!比TDD先进很多,能够大大提高编码效率. 上一篇文章说了如何在.NET Core里安装Specflow. 然而文章成果 ...

  5. Go:基于BDD的测试框架 Ginkgo 简介及实践

    文章目录 简介 1. TDD 2. BDD 3. Ginkgo 一.Ginkgo实践 1. 安装Ginkgo 2. 使用 二.高级用法 1. 标志 2. 并发 3. goroutine 4. Desc ...

  6. 如何用ABP框架快速完成项目(2) - 快的定义!

    为什么要从快的角度来讲这系列课程呢? 因为快是一个很统一很清晰的标准. 所有人对时间都有一个统一清晰的概念.  比如说这系列课程会讲到的一个实例: 集成LinqToExcel, 用我的方法大概耗时1个 ...

  7. php laravel 优点,Laravel 特点有哪些?

    Laravel特点:1."artisan"命令行工具,可以自动化完成手动的工作:2."migration"管理数据库和版本控制:3.测试功能也很强大:4.适合应 ...

  8. 学弟:功能测试转测试开发容易吗?

    最近看到后台留言问:功能测试转测试开发容易吗? 从这个问题,我能读出一些信息如下: 不知道你从事测试工作多久了,可以看出您特别羡慕测试开发工程师: 你可能一直从事功能测试工作,工作模式或大环境下,被中 ...

  9. 软件测试,功能测试转测开容易吗?

    一.从这个问题,我能读出一些信息如下: 1.不知道您从事测试工作多久了,可以看出您特别羡慕测试开发工程师: 2. 您可能一直从事功能测试工作,工作模式或大环境下,被中了草,想学习测试开发相关的知识: ...

最新文章

  1. 2021年大数据Spark(二十):Spark Core外部数据源引入
  2. 26张图带你彻底搞懂volatile关键字
  3. 机器人 陆梅东_上海乐高创客工作坊活动顺利举行
  4. win7 VS2008 编译luabind-0.9.1 动态库 静态库
  5. python selenium 下载文件_Python Selenium —— 文件上传、下载,其实很简单
  6. 基于javaweb+jsp+mysql的美容院管理系统
  7. PHP连接mysql数据库使用方法,PHP连接MySQL数据库的操作方法
  8. 使用PdgCntEditor软件对PDF目录进行快速编辑
  9. 折线统计html,canvas制作简单的HTML图表,折线或者矩形统计(原创)
  10. python画太阳花代码
  11. 扒一扒:2020台湾Android-Kotlin--Java-面試題庫,竟如此--
  12. arm版红帽企业linux,红帽:ARM架构下的Linux不是玩笑
  13. Win10 下搭建PHP开发环境(自定义方式)
  14. 哈希表的画法_2018年流行什么眉型
  15. 织梦dedecms 忘记管理员后台密码的解决技巧
  16. 我的世界光影mod怎么用_我的世界光影怎么安装 光影安装教程
  17. 安卓与苹果盒子与h5相互调用,js,vue
  18. 智能车竞赛技术报告 | 智能视觉组 - 哈尔滨工程大学 - 济海追风0队
  19. Visual Studio 2005/2008/2010 简单更换配色主题(转自:http://apit.blogbus.com/logs/84846293.html)
  20. “node“不是内部或外部命令,也不是可运行的程序 或批处理文件

热门文章

  1. android viewpager2,Android-ViewPager2的使用
  2. 数学基础 - 第十四章 整式的乘法和因式分解
  3. 【Handler】IdleHandler
  4. 见好多做程序的哥们想考公务员-分享下公务员考试秘诀
  5. 国外LEAD:这几类人赚钱之路
  6. nyoj252 01串
  7. w10系统mysql_win10系统mysql安装及配置
  8. 单片机包络检波c语言,基于AVR单片机的125kHz简易RFID阅读器设计.PDF
  9. 视频会议系统有哪些部分组成?
  10. 构建自己的网站(一)——uWSGI+Django实现显示图片点击更新