专栏首页FunTesterTDD测试驱动开发的基础

TDD测试驱动开发的基础

★如果您需要软件并且需要快速,那么测试驱动开发(TDD)可能是解决方案。TDD致力于快速将软件从计算机推向市场,是当今顶级软件开发和软件测试公司正在使用的最有效方法之一。

什么是测试驱动开发?

敏捷性和速度是赋予测试驱动开发运动力量的两个概念。但是什么是TDD,流程如何运作?

测试驱动的开发是一个软件开发过程,其重点是在开发人员编写实际代码之前为软件测试编写测试。目的是使开发人员专注于代码的用途并确保其功能。

运作方式如下:

  • 每个测试驱动的开发周期都始于编写测试以查看软件是否可以运行。该测试基于软件的功能,要求和规格。
  • 接下来,开发人员运行测试以确保其适当性和有效性。在此阶段,测试应该失败,这意味着它可以工作并且不会显示出假阳性结果。
  • 一旦建立了足够的测试,开发人员便会继续编写代码。在此阶段,代码可能还不够完善,但必须通过测试才能继续前进。这就是为什么此测试阶段必不可少的原因。
  • 一旦一段代码通过测试,就可以进行重构。这是代码清理阶段,其中删除重复项,正确命名所有代码元素(对象,类,模块,变量,方法等),并添加所有必需的新功能。
  • 完成此过程后,开发人员可以重新启动该循环以进行编码改进,添加新功能或修复任何编码错误。简而言之,测试驱动的开发关注于代码是否完成了应做的工作。如果有效,请转到下一个阶段,否则请重写。概念就是这么简单。

TDD是如何发明的?

现代TDD的原型是在1960年代发明的。该技术的“重新发现”归功于一位肯特·贝克(Kent Beck)的美国软件工程师。贝克还是敏捷软件开发的创始人之一,也是《敏捷宣言》的签署人。

早在2002年,贝克(Beck)就在他的《测试驱动开发:范例》一书中向世界介绍了TDD的概念。

虽然一般来说不是一个新主意,但是Beck声称TDD是“有效的干净代码”,着眼于模型的简单性和消除了传统软件开发方法附带的代码不起作用的担忧。

TDD与传统测试之间的差异

让我们比较一下。

传统测试

TDD

最后测试的方法,其中开发人员创建代码,但保留测试直到开发过程结束。

一种测试优先的方法,其中开发人员或测试自动化工程师首先创建测试,然后开发人员进行编码以满足测试的要求。

专注于代码正确性,但可能无法检测到所有编码缺陷。

然后,测试将进行重构,直到代码通过测试为止;直到代码满足功能为止,然后继续进行测试,并减少系统中的错误数量。

线性过程。(设计代码测试)

循环过程。(测试代码重构)

测试驱动开发的好处

测试驱动开发的支持者可以在快速开发代码时提高其速度,敏捷性和功能。但是,这些并不是唯一的优点。开发系统还:

  • 保持代码简单,有用且切合实际,使所有相关人员的过程更加轻松。
  • 有助于查明由于严格测试而导致的错误和其他代码缺陷,因此开发人员可以准确地知道问题出在哪里。这样可以减少(但不会否定)最终测试时间。
  • 允许开发人员查看实际的代码,采用用户的观点并对最终用户产生同情。因此,代码可以更好地反映用户的需求。
  • 巩固了项目的目的和目标,从抽象的想法到精确的目标,鼓励开发人员专注于他们真正需要做的事情。

测试驱动开发的缺点

但是,使用测试驱动的开发方法存在一些缺点。让我们来看看:

  • 尽管声称TDD比传统编码过程快,但最初该过程可能很慢。但是,随着时间的推移,生产率将大大提高。
  • 开发人员可能过于专注于一两个编码问题,而看不到全局。尝试修复错误时,这一点尤其重要。
  • 开发足够的初始测试(尤其是对于创新软件)存在一些问题,因为测试开发人员应该几乎完全知道他们想要从代码中获得什么。
  • 这种方法不允许在初始设计中进行大量更改,否则,这将增加TDD流程的执行时间。

您应该在软件开发中使用测试驱动的方法吗?

与所有业务决策一样,选择采用测试驱动的开发方法是公司特定的决策。如果您正在考虑使用测试驱动的方法,则应首先确保TDD适合您的业务。

首先,这将取决于您团队的需求和经验。由于TDD是一种快节奏的敏捷方法,因此您需要确保它们已准备好应对挑战。另外,您可以求助于质量保证咨询以帮助您采用这种方法。

也就是说,测试驱动的开发可能是将您的产品尽快从代码行转换为可用于市场的产品的绝佳方法。

本文分享自微信公众号 - FunTester(NuclearTester),作者:八音弦

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-11-04

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 左移测试

    随着软件行业的发展,新趋势和运营模型也随之发展,每种“软件模型”旨在在“软件开发”的每个阶段带来更高的效率。

    八音弦
  • 如何从测试自动化中实现价值

    如果几年前,质量管理部门都试图通过ROI指标来证明对测试的投资是合理的,那么现在情况发生了变化,是时候重新审视这个问题了。当实施连续测试,并且每天在不同的环境下...

    八音弦
  • 43种常见软件测试分类

    我们每个人在测试过程中都会遇到几种类型的测试。我们可能听过一些,也许已经做了一些工作,但是并不是每个人都了解所有测试类型。

    八音弦
  • 软件敏捷开发 TDD 方案

    现在开发软件都讲敏捷开发,何为敏捷开发?敏捷开发是一种应对快速变化的需求的一种软件开发能力。它们的具体名称、理念、过程、术语都不尽相同,相对于"非敏捷",更强调...

    拾贰
  • 推行TDD的思考

    我在参与的开发项目以及咨询项目中,都有实践TDD的经验。直至今日,我仍然会在某些功能开发时采用TDD的方式实现功能。虽然没有达到将TDD溶于开发血液之中形成自然...

    张逸
  • 软件测试工作规范

    为了规范测试工作、减少开发与测试之前的沟通成本、保证项目进度、提高软件质量,测试组起草了这份软件测试工作规范。

    小老鼠
  • 微服务架构系统中的自动化测试

    一个成功的微服务架构的业务系统,必须进行大量的自动化测试。简单来说,在微服务架构中,测试的层次变得更多,而且对环境的搭建要求更高。

    程序你好
  • 云测评 | RedisGraph 1.0的基准测试

    导读:本文来自RedisGraph团队,RedisGraph是一个Redis内嵌高性能内存图数据库。本文介绍了RedisGraph v1.0正式版本的一些实现...

    腾讯云数据库 TencentDB
  • 云测评 | RedisGraph 1.0的基准测试

    导读:本文来自RedisGraph团队,RedisGraph是一个Redis内嵌高性能内存图数据库。本文介绍了RedisGraph v1.0正式版本的一些实现特...

    腾讯云数据库 TencentDB
  • Golang实现带优先级的channel

    一般Go语言同时使用多个channel的方法是使用select/case语句配合<-操作符,比如 select {case <- chan1: // do...

    李海彬

扫码关注云+社区

领取腾讯云代金券