软件测试中最复杂的业务_复杂软件开发项目中的有效测试

本文探讨了软件测试的重要性,特别是在复杂项目中的挑战。强调了自动化测试的优势,如单元测试和集成测试,以及测试驱动开发(TDD)和行为驱动开发(BDD)的实践。同时介绍了域驱动设计(DDD)在处理复杂业务规则项目中的作用。文章还讨论了测试工具,如RSpec、Turnip、FactoryBot和VCR,以提高测试效率和质量。
摘要由CSDN通过智能技术生成

软件测试中最复杂的业务

手动还是自动测试?

该软件总是由人创建,经过人测试并且在大多数情况下是由人使用的。 任何负责任的测试人员最糟糕的梦想是错过一个严重的错误。 测试人员尝试仔细检查需求并编写测试用例,仔细检查产品,并在发布后,用户在一周内报告严重问题。

遗失了多少对其他人显而易见的错误? 而且,也许是时候只使用自动测试仪了?

自动测试仪或质量检查人员

自动化测试可以更早地发现错误,从而阻止部署错误。 它们为程序员提供了更快的反馈循环,因为他们不需要手动遍历应用程序中的每个路径。 编写良好的测试可能要花费毫秒,并且有了良好的开发设置,您甚至不必离开编辑器。

如果您每天将这种方法与手动方法进行比较一百次,则可以节省大量时间。 这使开发人员可以更快地实现功能,因为他们无需打开浏览器就可以放心地编写代码。

当应用程序在没有可靠的测试套件的情况下增长时,频繁的错误会静默地渗透到其代码中。 而且随着应用程序的增长,整体解决方案是扩大平台上的人员数量-雇用专业测试人员(QA),这在捕获回归方面将永远不会像自动测试那样有效。

质量保证(QA)增加了实现功能所需的时间,因为开发人员必须与其他人进行交流。 与一组测试相比,它很昂贵。

这并不意味着质量保证绝对没有用,但是除了良好的测试套件外,还应聘用质量保证人员,而不应替代它们。 尽管手持式测试仪在搜索回归时不如计算机有效,但是它们在测试软件(如用户界面)的主观质量方面要好得多。

测试类型

让我们看一下不同类型的测试。 一方面是单元测试。 这些测试隔离了各个组件,证明了它们可以提供预期的行为,而与周围的系统无关。 因此,单元测试通常很小而又快速。

在现实世界中,这些组件并不是真空存在的:它们必须彼此交互。 实际上,如果一个协作者拥有完全不同的界面,那么他可以期望该协作者具有特定的界面。 尽管所有测试都通过了,但软件整体还是坏了。

这是集成测试。 这些测试使用整个系统,而不是单个组件。 他们通常通过模拟试图在软件中完成任务的用户来执行此操作。 集成测试不是访问调用方法或协作者调用,而是与用户单击和键入有关。

使用测试组合来创建自己的测试集的最佳方法。 这是一个套件,包含几个涵盖应用程序整体功能的高级集成测试,几个涵盖子系统的更详细的中级测试以及涵盖每个组件详细信息的许多单元测试。

当试图最小化其缺点(例如执行时间缓慢)时,此方法对应于每种测试的强度。

开发过程阶段

测试驱动的开发过程

自动化测试可能是增强对不断增长的代码库的信心的最佳方法。 为了增加这种信心并在节省时间和清理代码方面获得更大的收益,建议使用称为“测试驱动开发”的过程来编写代码。 TDD是使用测试来开发设计和应用程序的过程。 它从红色,绿色,重构开发周期开始。

红色,绿色,重构是导致开发此功能或纠正错误的一系列步骤。

解决TDD问题时,您需要确定从哪里开始测试代码。 从高层次开始,检查用户如何与系统交互,然后变为零? 还是从低级开发开始,然后过渡到最终功能? 答案因人而异,因职能而异。

如果测试是最初编写的,则并不意味着将使用测试开发。 在执行红色,绿色,重构循环时,仅响应测试失败所导致的错误消息编写代码非常重要。 这样可确保不会执行未经测试的功能。

行为驱动的开发过程

软件开发方法“行为驱动开发”是“测试驱动开发”的分支。

这种方法的主要思想是在发展纯技术利益和商业利益的过程中结合起来,从而允许管理人员和程序员说同一种语言。 对于这些方面之间的交流,使用了非专家可以理解的自然语言构造,例如管理面板,通常表示软件产品行为和预期结果的注册表格。

BDD方法是TDD的扩展,因为在编写任何测试之前,您必须首先以面向主题的语言描述所添加功能的期望结果。 完成此操作后,专家或特殊软件会将这种语言的结构翻译成测试说明。

域驱动设计

BDD也可以描述为域驱动设计(DDD)与TDD之间的交集。 域驱动设计是一种软件开发方法,旨在处理具有复杂业务规则的项目,其中开发人员和领域专家之间的协作(通常,此角色由客户端承担)对于设置通用语言和领域模型是必需的。转化为非常具体和详细的​​要求。 在BDD中,这些特定要求用于在其周期的第一步中驱动开发过程。

从业务到技术测试流程

我们的人用于测试的是什么?

对于我们的团队而言,测试首先是一个良好的音调规则。 我们创建了自己的工具和应用程序集,完全没有放弃手工测试,我们认为这对于每个IT公司的工作都是最佳的。

让我们回顾一下我们选择用于测试的工具。

1. RSPEC

要验证Ruby代码,请使用用Ruby RSpec编写的工具。 这是一个基于行为的开发环境(BDD),并且编写了足够的代码(TDD)。 Amoniac团队的整个工作旨在使开发过程清晰易懂,并使最终客户满意。 这就是我们之所以选择RSpec的原因,因为我们认为RSpec是我们测试工作中最好,最有效的工具。

2.萝卜

Turnip是一个开放源码的Ruby gem,它提供了一个接受测试的平台,旨在解决用Cucumber编写规范时面临的一些问题。 Cucumber支持各种编程语言,并且作为验收测试框架也非常受欢迎。

Turnip像Cucumber一样工作,因为它是主要支持验收测试的框架。 尽管Turnip不像Cucumber那样功能丰富,但它简单而强大,这使验收测试更加容易且更易于访问。

3.工厂启动

Factory Bot是编写用于Ruby测试的工厂的助手。 它以前被称为Factory Girl。 对于较旧的版本,请使用FactoryGirl而不是FactoryBot。

该库用于方便地创建模型实例,我们将在这些实例上进行测试。 例如,某些用户,文章,项目以及任务。 我们不能每次都通过填写所有必填字段来创建对象。 这是Factory Bot派上用场的地方。 只需定义一次模式,然后基于该模式生成新实体就足够了。

4.录像机

防止外部请求的方法是记录实时互动并在测试过程中“回放”。 VCR gem有一个盒式磁带的概念,它将记录您的测试套件传出的HTTP请求,然后重播它们以供将来进行测试。

使用VCR时的注意事项:

  • 与其他开发者共享盒带通信。
  • 需要外部服务可用于首次测试运行。
  • 难以模拟错误。

如果您有需要发出API请求的方法,则VCR gem非常有用。 您不想在测试期间发出API请求,尤其是在API具有某种速率限制的情况下。 您可以做的是创建一个文本文件,模拟从您正在制作API的Web服务获得的响应并以这种方式进行测试,或者可以使用VCR gem。

5. WEBMOCK

WebMock是一个库,用于在Ruby中对HTTP请求进行存根并设置HTTP请求的期望值。 使用WebMock,开发人员可以根据方法,URI,标头和正文匹配请求,并以不同的表示形式匹配相同的标头。

摘要

最后,我们可以轻松地说,是的,测试是开发人员和最终客户节省的时间的绝大部分。 正是这项工作使您可以精确地制造出最终在头脑中看到的产品,并且向客户保证了它可以完美工作。

这套工具能够在几秒钟内进行测试,在这种情况下,编写测试将节省时间,反之亦然。 编写测试会给出错误消息,该测试将告诉您下一步该做什么。 而且,也许它看起来像是一种机械化,但是随着项目数量和规模的不断增长,它成为必需品。

但是永远不要忘记,在测试的过程中应该避免大量陷阱和反模式,因为编写不当的测试会产生相反的效果并导致崩溃。

测试使您充满信心,可以继续前进。 软件和质量保证可以并且应该一起使用以驯服现有项目并解决更大,更复杂的项目!

翻译自: https://hackernoon.com/effective-testing-in-complex-software-development-projects-mcck3y4t

软件测试中最复杂的业务

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值