BDD测试和TDD测试

TDD

TDD是测试驱动开发(Test-Driven Development)的缩写,是敏捷开发中的一项测试技术,也是一种设计方法论。她的大概思路是:先针对每个功能点抽象出接口代码,然后编写单元测试代码,接下来再实现接口,最后运行单元测试代码,循环整个过程直到整个单元测试通过。

TDD步骤

测试驱动开发是一个过程,依赖于不断重复极短的开发周期。它基于极限编程(XP)的测试优先理念,倡导采用可高度信赖的简单设计。

流程并不复杂,由几个步骤反复进行:

  1. 编写一个测试
  2. 运行所有测试
  3. 编写实现代码
  4. 重构
  5. 运行所有测试

鉴于测试是在实现前编写的,因此它应该不能通过。如果通过了,就说明测试是错误的:要么它描述的功能早已存在,要么编写不正确。

TDD的好处

  1. 保证代码的质量
  2. 提高开发效率
  3. 能够更好的满足测试
  4. 减少自测的时间
  5. 能够成为更好的代码说明文档

总结

当然,并不是所有的项目都适合TDD这种模式。采用TDD测试应该具备一下几个条件:

  1. 项目需求清晰
  2. 开发人员对需求有足够的理解
  3. 业务模型不能过于复杂,模块之间的依赖性不能太强,过于复杂会导致拆分接口和编写测试代码工作量增大

BDD

BDD是TDD的一种衍生,她通过特定的框架,用自然语言或类自然语言,按照编写用户故事或用户用例的方式,以功能使用者的角度,描述并编写测试用例。她不是某种工具或技术,她是一种思想、一种协作方式。

BDD 工具

  1. Cucumber

BDD与TDD区别

  1. TDD更多的关注测试接口的实现正确性,BDD更多关注用户使用功能时的行为和结果是否符合预期
  2. TDD是使用编程语言来描述测试用例,而BDD是用自然语言来描述
  3. TDD的需求文档和测试用例是分别储存的,而BDD的需求文档就是测试用例

BDD的实现

  1. 确定沟通和协作方式,如:slack、Teams
  2. 确定工作流程,如:什么阶段开始写测试代码
  3. 选定BDD实现,如cucumber
  4. 设计用户场景
  5. 编写测试代码
  6. 持续执行和改进

BDD测试和TDD测试的更多相关文章

  1. python+selenium自动化软件测试(第10章):测试驱动TDD

    测试驱动开发模式,要求开发在写业务代码的时候,先写出测试代码,同时单元测试例子决定了如何来写产品的代码,并且不断的成功的执行编写的所有的单元测试例子,不断的完善单元测试例子进而完善产品代码, 这样随着 ...

  2. testem方便的web tdd 测试框架使用

    备注:    单元测试,对于日常的开发是比较重要的,testem 简化了我们的代码编写,以及运行.    主要特性:    a. 支持的测试框架有:jasmine quint mocha buster ...

  3. web测试与app测试的区别

    才开始做测试就接触的web端,后来也接触app端,所以在这里对于自己工作中所接触到的做一些总结(总要养成总结的好习惯). 对于web端和移动端app,功能方面的测试,例如测试设计方法这些都大同小异,都 ...

  4. (转)学习使用Jmeter做压力测试(一)--压力测试基本概念

    一.性能测试的概念 性能测试是通过自动化的测试工具模拟多种正常峰值及异常负载条件来对系统的各项性能指标进行测试.负载测试和压力测试都属于性能测试,两者可以结合进行. 通过负载测试,确定在各种工作负载下 ...

  5. Java基础-继承-编写一个Java应用程序,设计一个汽车类Vehicle,包含的属性有车轮个数 wheels和车重weight。小车类Car是Vehicle的子类,其中包含的属性有载人数 loader。卡车类Truck是Car类的子类,其中包含的属性有载重量payload。每个 类都有构造方法和输出相关数据的方法。最后,写一个测试类来测试这些类的功 能。

    #29.编写一个Java应用程序,设计一个汽车类Vehicle,包含的属性有车轮个数 wheels和车重weight.小车类Car是Vehicle的子类,其中包含的属性有载人数 loader.卡车类T ...

  6. Android Testing学习01 介绍 测试测什么 测试的类型

    Android Testing学习01 介绍 测试测什么 测试的类型 Android 测试 测什么 1.Activity的生命周期事件 应该测试Activity的生命周期事件处理. 如果你的Activ ...

  7. <转>iOS应用程序内使用IAP/StoreKit付费、沙盒(SandBox)测试、创建测试账号流程!

    原文地址:http://blog.csdn.net/xiaominghimi/article/details/6937097 //——2012-12-11日更新   获取"产品付费数量等于0 ...

  8. app测试与web测试的区别

    1.从功能测试的来讲的话,在流程和功能测试上是没有区别的.系统测试和一些细节可能会不一样. 那么我们就要先来了解,web和app的区别. web项目,一般都是b/s架构,基于浏览器的,而app则是c/ ...

  9. Android渗透测试Android渗透测试入门教程大学霸

    Android渗透测试Android渗透测试入门教程大学霸 第1章  Android渗透测试 Android是一种基于Linux的自由及开放源代码的操作系统,主要用于移动设备,如智能手机.平板等.目前 ...

  10. 【转】WEB测试到移动测试的转换

    移动互联网的发展毋庸置疑是必然的趋势,我们曾经传统WEB互联网测试的同学,也必然走上移动测试的道路,移动测试与pc测试到底需要怎样的思维转变才能更快的进入移动节奏呢?对比下WEB与移动的测试不同点: ...

随机推荐

  1. Blazor Hybrid (Blazor混合开发)更好的读取本地图片

    在 Blazor Hybrid 应用中,Razor 组件在设备上本机运行. 组件通过本地互操作通道呈现到嵌入式 Web View 控件. 组件不在浏览器中运行,并且不涉及 WebAssembly. R ...

  2. 集合框架-Collection集合

    集合框架 JAVASE提供了满足各种需求的APl,在使用这些API前,先了解其继承与接口操作架构,才能了解何时采用哪个类,以及类之间如何彼此合作,从而达到灵活应用.集合按照其存储结构可以分为两大类,分 ...

  3. MyBatis的使用八(动态SQL)

    本主要讲述mybatis处理动态sql语句 一. 问题引入 前端展示的数据表格中,查询条件可能不止一个,如何将用户输入的多个查询条件,拼接到sql语句中呢? DynamicMapper接口声明如下 p ...

  4. 走进Linux

    走进Linux Linux诞生 ​ BSD,Unix,Minix都是操作系统. ​ 1991年,林纳斯托瓦兹在上大学时,对操作系统很好奇.但是由于 386 BSD 还没有出来.可是他不喜欢他的 386 ...

  5. 12月7日内容总结——jQuery查找标签、操作标签、事件和动画效果,Bootstrap页面框架的介绍和使用讲解

    目录 一.jQuery查找标签 基本选择器 层级选择器 基本筛选器 属性选择器 表单筛选器 筛选器方法 二.操作标签 样式操作(class操作) 位置操作 尺寸 文本操作 创建标签 属性操作 文档处理 ...

  6. 函数传参 Java JavaScript python 都是按值传递的

    实验代码如下: Java python JavaScript:

  7. WinRAR的 安装与下载

    一.简介 WinRAR 是一个强大的压缩文件管理工具.它能备份你的数据,减少你的 E-mail 附件的大小,解压缩从 Internet 上下载的 RAR.ZIP 和其他格式的压缩文件,并能创建 RAR ...

  8. 为Jekyll静态网站添加PlantUML插件

    前言 突然想起来要好好整理一下自己的博客空间,已经荒废很多年,如果再不捡起来,等到自己知识老化的时候再去写东西就没人看了. 使用Github Pages + Jekyll把博客发布为静态网站,给人感觉 ...

  9. JavaScript原型和原型链?有什么特点?

    一.原型 JavaScript 常被描述为一种基于原型的语言--每个对象拥有一个原型对象 当试图访问一个对象的属性时,它不仅仅在该对象上搜寻,还会搜寻该对象的原型,以及该对象的原型的原型,依次层层向上 ...

  10. Redis 源码解读之 AOF Rewrite