通过之前文件关于单元测试的介绍,我们学会了如何减少代码的缺陷,通过回归测试抓取bug,减少对公共测试的依赖提高开发效率。本章我们的关注点将会放在测试驱动开发(TDD)上,他是测试先行、开发置后的开发模式。他有很多的好处,例如:更好的可测试代码、更简洁的接口和可以提高开发者信心的代码质量。

  测试驱动开发的目标和目的

  测试驱动开发的目标是简洁的代码。TDD是一种迭代的开发过程,每个迭代式以写单元测试开始,单元测试可以作为将要开发功能的规范文档。短期迭代对代码的反馈是及时的,这样可以更容易发现我们不好的设计。编写开发代码之前,先写单元测试还可以提高单元测试覆盖率。

  1.开发置后

  传统的开发模式中,问题知道代码全部编写完才得以解决。理想情况下,代码会有整体的架构考虑,但是很多情况下,特别是JavaScript开发的过程中,情况往往不是这样。这种解决方案,通过去猜什么样的代码能解决问题,导致的结果是代码肿胀和紧耦合。如果没有单元测试,产品代码中可能会包含一些没有运行的代码,例如异常处理逻辑。还有就是边界值可能没有被测试到。

  TDD把开发顺序颠倒了,首先做的不是编写功能实现代码,而是考虑目标的制定,要实现什么功能和如何实现。单元测试在这里起到规范和文档的作用。TDD的目标不是测试,所以他不能保证在边界值的处理上做的更好。TDD虽然产生了额外的单元测试代码,但是他提高了系统的健壮性,而且保证系统不包含不执行的代码。

  2.在TDD中做设计

  TDD的特点是“没有大的预先设计”,并不是“没有预先设计”。为了写出整洁的代码,我们需要衡量整个项目的持续时间和考虑开发的生命周期,所以我们需要制定计划。TDD不会无中生有的自动生成好的设计,但是他会帮助我们进化我们的设计。通过对单元测试的依赖,TDD更多的把关注点放在了相互独立的、隔离的组件上。这种方式可以帮我们我们写出接偶的代码,代码遵循单一职责和避免不必要的膨胀。TDD提供了严格控制,可以将很多设计的决定时间延迟到直到真正需要的时候。他可以很好的应对需求的变化,因为我们很少设计不需要的功能,或者不需要按照预先期望开发。

  TDD驱使我们去处理设计,当有了新功能的时候,我们需要以单元测试的形式制定合理的用例。写单元测试时需要思考的,我们需要描述我们在解决什么样的问题。只有完成这个工作,才能开始编码。换句话说,TDD要求我们在提供解决方案之前,要先想想结果。

  促进测试驱动开发

  测试驱动开发最关键的是运行测试,测试需要能快速而容易的运行。如果不是这样的话,开发人员就会忽略测试,当开发了新功能之后也不会运行测试。这样会让开发变得一团糟。最糟糕的是,我们花费额外的时候使用TDD的开发模式,却没有起到我们期望的作用,我们开发的代码还是一团糟。所以,顺利的运行测试是相当重要的。

  推荐的方案是使用自动测试(autotest),每个测试保存在独立的文件中,可以单独运行。他能在屏幕上显示测试结果,告诉我们哪些测试通过了(显示绿色),哪些测试正在运行,和哪些测试失败了(显示红色)。这样可以提高我们开发的效率,帮助我们重构代码,我们只需要关注测试失败的情况。

  测试驱动开发的好处

  1.能够工作的代码

  TDD最大的好处就是生产可以工作的代码。一个基本的单元测试可以确保一段代码的稳定。可再生的单元测试在JavaScript中特别有用,我们需要在很多浏览器平台上进行测试。测试代码只需要写一次,通过测试可以很快找到不能工作的代码,发现bug。

  2.遵循单一职责原则

  在隔离的条件下描述和开发组件,能更容易的写出解耦和符合单一职责原则的代码。TDD的单元测试不需要测试组件的依赖,他们需要能用mock或stub的方式替换。另外,单元测试也可以帮助我们找到程序中紧耦合的代码。

  3.迫使有意识的开发

  因为在每次迭代之前,我们都是先写描述特定功能的测试,TDD就迫使我们在编写代码之前先进行思考。在解决问题之前先进行思考,有助于我们找到一个更可靠的解决方案。通过用例对功能进行描述,也有助于我们开发出更简明的代码。这样也会避免我们引入不必要的功能。

  4.提高生产效率

  如果你是第一次接触TDD,你会觉得所有的测试和步骤都需要你花费更多的时间。使用TDD从一开始也不是那么简单的事情,写出好的单元测试需要不断的练习,本系列课程会通过很多例子教会你如何完成这个工作。当你养成了好的TDD开发习惯的时候,他确实能提高你的开发效率。他可能需要你多花点时间去完成功能代码和测试代码的编写,但是他能减少你手工测试的时间,取而代之的是运行单元测试。最重要的是,你开发出了有单元测试保障的、能工作的代码,代码重构的工作将不会变得那么荆棘。你的工作会变得更快速、压力更少和更快乐。

测试驱动javascript开发 -- 3.测试驱动开发过程(上)相关推荐

  1. 测试驱动javascript开发 -- 4.测试驱动开发过程(下)

    TDD是一个迭代的开发过程,他包括下面的步骤:1.编写测试:2.运行测试,观察失败:3.确保测试通过:4.重构,减少重复. 每次迭代中,测试就是规范.在我们完成开发之后,测试就可以通过了.之后我们就需 ...

  2. Arduino与JavaScript开发实例-舵机驱动

    舵机驱动 伺服电机是一种独立的电气设备,它以高效率和高精度旋转机器的部件. 伺服机构(伺服)可以指代很多不同的机器,这些机器的使用时间比大多数人可能意识到的要长. 从本质上讲,伺服系统是任何内置反馈元 ...

  3. linux驱动基础开发2——linux 驱动开发前奏(模块编程)-转

    一.linux内核模块简介 linux内核整体结构非常庞大,其包含的组件也非常多.我们怎么把需要的部分都包含在内核中呢?      一种办法是把所有的需要的功能都编译到内核中.这会导致两个问题,一是生 ...

  4. esp32系列(11):ESP32 IDF平台 mpu6050 DMP 驱动移植及测试上位机开发

    目录 1 DMP 官方库介绍 1.1 DMP与MPL(Motion Processing Libraries)功能 1.2 运行MPL的硬件要求 1.3 Motion Driver 6.12 的架构 ...

  5. 新能源汽车电驱动系统集成与驱动电机设计开发

    汽车工业已经成为经济发展的支柱产业,但是汽车排放的尾气是造成城市污染的主要来源之一.故而新能源汽车的研制已经引起人们的极大关注,随着新能源汽车技术的发展,电驱动系统面临越来越高的要求,对企业而言,电机 ...

  6. 软件测试基础理论体系学习2-软件开发和测试的过程

    2-软件开发和测试的过程 1 软件开发过程 1.1 软件产品的组成 1.2 软件开发项目组 1.2.1 项目管理员 1.2.2 设计师或系统工程师 1.2.3 程序员 1.2.4 软件测试员 1.2. ...

  7. 1.6 开发集和测试集的大小-深度学习第三课《结构化机器学习项目》-Stanford吴恩达教授

    ←上一篇 ↓↑ 下一篇→ 1.5 训练/开发/测试集划分 回到目录 1.7 什么时候该改变开发_测试集和指标 开发集和测试集的大小 (Size of Dev and Test Sets) 在上一个视频 ...

  8. 电池电堆及发动机的测试软件,燃料电池发动机测试系统的开发

    燃料电池发动机测试系统的开发 维普资讯 http://doc.docsou.com 第 5总第 1期)期( 4 7 20年 l 03 0月 车 用 发 动 机 N .( e a N .4 ) o 5 ...

  9. 开发、测试、测试开发

    投一大波简历,自己依旧懵懵懂懂,尽管我投的是C++开发工程师,但是总有人想把朕转到测试开发岗,我也不能像个小白一样傻不拉几就同意啊,于是,查啊查,总算对这些岗位有个初步了解. 1.开发工程师 顾名思义 ...

  10. 测试分类-软件开发阶段的各个测试

    大家好,我是十一. 还记得我们上篇中的测试分类图吗?其中有一部分是"按软件开发阶段划分",不记得没关系,这里我截了图出来,大家直接看图吧. 这个图呢就是我们这篇所要讲解的内容.主要 ...

最新文章

  1. SAP WMSD集成之Copy WM Quantity – Copy WM qty as delivery qty into delivery and PGI
  2. 教你如何成为一名区块链工程师!
  3. 【C 语言】文件操作 ( 配置文件读写 | 写出或更新配置文件 | 追加键值对数据 | 更新键值对数据 )
  4. debian及ubuntu挂载本地硬盘的ISO镜像文件
  5. DAZ studio 4.9基础
  6. HTML 代码复用实践 (静态页面公共部分提取复用)
  7. 【转载】谁动了摩卡的奶酪?
  8. 安装rpcbind出错
  9. Ubuntu 18安装腾达u12 无线网卡驱动
  10. A Survey on Knowledge Graph-Based Recommender
  11. darknet训练时Couldn‘t open file的问题解决
  12. 微软Visual Studio Code基本特征
  13. 2022-2028年全球及中国红外(IR)传感器行业投资前景分析
  14. 【轮播图】使用bootstrap轮播插件(Carousel)
  15. 为什么农民收入少,到底为什么
  16. f15纸飞机折法_A4纸折F15战斗机的折法视频折纸飞机教程
  17. the specified license key not be verified as belonging to this host
  18. 掌上单片机实验室 — 编程环境(3)
  19. Java虚拟机崩溃,出现Problematic frame: # C 0x0000000000000000
  20. 马上520了!!!js爱情表白树带给大家

热门文章

  1. slim.conv2d以及slim.convolution2d与tf.nn.conv2d的不同
  2. 利用神经网络内部表征可视化class-specific image regions区域
  3. 训练深度学习模型的小技巧
  4. php解密 hr+c_PHP每15分钟自动更新网站地图(减少服务器消耗)
  5. ElasticSearch相似性度量
  6. scala连接mongodb_使用Casbah / Scala在MongoDB上执行自定义功能
  7. adb服务无法开启问题解决方法
  8. Java Servlet(十一):一个servlet被10个浏览器客户端访问时会创建几个servlet实例?...
  9. 2017-2018-1 20155220 《信息安全系统设计基础》第十四周学习总结
  10. java 23中设计模式