测试驱动javascript开发 -- 3.测试驱动开发过程(上)

简介:   通过之前文件关于单元测试的介绍,我们学会了如何减少代码的缺陷,通过回归测试抓取bug,减少对公共测试的依赖提高开发效率。本章我们的关注点将会放在测试驱动开发(TDD)上,他是测试先行、开发置后的开发模式。

  通过之前文件关于单元测试的介绍,我们学会了如何减少代码的缺陷,通过回归测试抓取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开发习惯的时候,他确实能提高你的开发效率。他可能需要你多花点时间去完成功能代码和测试代码的编写,但是他能减少你手工测试的时间,取而代之的是运行单元测试。最重要的是,你开发出了有单元测试保障的、能工作的代码,代码重构的工作将不会变得那么荆棘。你的工作会变得更快速、压力更少和更快乐。

 

目录
相关文章
|
8天前
|
Web App开发 JavaScript 前端开发
Node.js开发
Node.js开发
25 13
|
15天前
|
存储 JavaScript 前端开发
深入浅出Node.js后端开发
在数字化时代的浪潮中,后端开发作为连接用户与数据的桥梁,扮演着至关重要的角色。本文将以Node.js为例,深入探讨其背后的哲学思想、核心特性以及在实际项目中的应用,旨在为读者揭示Node.js如何优雅地处理高并发请求,并通过实践案例加深理解。无论你是初学者还是有一定经验的开发者,这篇文章都将为你提供新的视角和思考。
|
12天前
|
Web App开发 开发框架 JavaScript
深入浅出Node.js后端开发
本文将带你领略Node.js的魅力,从基础概念到实践应用,一步步深入理解并掌握Node.js在后端开发中的运用。我们将通过实例学习如何搭建一个基本的Web服务,探讨Node.js的事件驱动和非阻塞I/O模型,以及如何利用其强大的生态系统进行高效的后端开发。无论你是前端开发者还是后端新手,这篇文章都会为你打开一扇通往全栈开发的大门。
|
14天前
|
机器学习/深度学习 人工智能 自然语言处理
智能化软件测试:AI驱动的自动化测试策略与实践####
本文深入探讨了人工智能(AI)在软件测试领域的创新应用,通过分析AI技术如何优化测试流程、提升测试效率及质量,阐述了智能化软件测试的核心价值。文章首先概述了传统软件测试面临的挑战,随后详细介绍了AI驱动的自动化测试工具与框架,包括自然语言处理(NLP)、机器学习(ML)算法在缺陷预测、测试用例生成及自动化回归测试中的应用实例。最后,文章展望了智能化软件测试的未来发展趋势,强调了持续学习与适应能力对于保持测试策略有效性的重要性。 ####
|
15天前
|
Web App开发 开发框架 JavaScript
深入浅出Node.js后端开发
在这篇文章中,我们将一起探索Node.js的奇妙世界。无论你是刚接触后端开发的新手,还是希望深化理解的老手,这篇文章都适合你。我们将从基础概念开始,逐步深入到实际应用,最后通过一个代码示例来巩固所学知识。让我们一起开启这段旅程吧!
|
11天前
|
Web App开发 JavaScript 前端开发
深入浅出Node.js后端开发
本文将带领读者从零基础开始,一步步深入到Node.js后端开发的精髓。我们将通过通俗易懂的语言和实际代码示例,探索Node.js的强大功能及其在现代Web开发中的应用。无论你是初学者还是有一定经验的开发者,这篇文章都将为你提供新的见解和技巧,让你的后端开发技能更上一层楼。
|
14天前
|
JavaScript 前端开发 API
深入理解Node.js事件循环及其在后端开发中的应用
本文旨在揭示Node.js的核心特性之一——事件循环,并探讨其对后端开发实践的深远影响。通过剖析事件循环的工作原理和关键组件,我们不仅能够更好地理解Node.js的非阻塞I/O模型,还能学会如何优化我们的后端应用以提高性能和响应能力。文章将结合实例分析事件循环在处理大量并发请求时的优势,以及如何避免常见的编程陷阱,从而为读者提供从理论到实践的全面指导。
|
12天前
|
并行计算 算法 测试技术
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面,旨在通过综合策略提升程序性能,满足实际需求。
37 1
|
13天前
|
存储 算法 C语言
用C语言开发游戏的实践过程,包括选择游戏类型、设计游戏框架、实现图形界面、游戏逻辑、调整游戏难度、添加音效音乐、性能优化、测试调试等内容
本文探讨了用C语言开发游戏的实践过程,包括选择游戏类型、设计游戏框架、实现图形界面、游戏逻辑、调整游戏难度、添加音效音乐、性能优化、测试调试等内容,旨在为开发者提供全面的指导和灵感。
30 2
|
15天前
|
Web App开发 JavaScript 前端开发
深入浅出Node.js后端开发
本文将带你走进Node.js的世界,从基础到进阶,逐步解析Node.js在后端开发中的应用。我们将通过实例来理解Node.js的异步特性、事件驱动模型以及如何利用它处理高并发请求。此外,文章还会介绍如何搭建一个基本的Node.js服务器,并探讨如何利用现代前端框架与Node.js进行交互,实现全栈式开发。无论你是初学者还是有一定经验的开发者,这篇文章都将为你提供新的视角和深入的理解。
14 4