单元,功能,验收和集成测试之间有什么区别? [关闭]

问题描述 投票:771回答:8

单元,功能,验收和集成测试(以及我未提及的任何其他类型的测试)之间有什么区别?

testing terminology definition
8个回答
1314
投票

根据您的外观,您会得到略有不同的答案。我已经读了很多关于这个主题的内容,这是我的精华;再次,这些是略微愚蠢的,其他人可能不同意。

单元测试

测试最小的功能单元,通常是方法/函数(例如,给定具有特定状态的类,在类上调用x方法应该导致y发生)。单元测试应该集中在一个特定的功能上(例如,当堆栈为空时调用pop方法应该抛出InvalidOperationException)。它触及的一切都应该在记忆中完成;这意味着测试代码和被测代码不应该:

  • 呼唤(非平凡)合作者
  • 访问网络
  • 点击数据库
  • 使用文件系统
  • 旋转一个线程
  • 等等

任何缓慢/难以理解/初始化/操作的依赖都应该使用适当的技术进行存根/模拟/处理,这样您就可以专注于代码单元正在做什么,而不是它的依赖关系。

简而言之,单元测试尽可能简单,易于调试,可靠(由于外部因素减少),执行速度快,有助于证明程序中最小的构建块在组合之前按预期运行。需要注意的是,虽然你可以证明它们完全孤立地工作,但代码单元在组合时可能会爆炸,这使我们...

集成测试

集成测试建立在单元测试的基础上,通过组合代码单元并测试生成的组合正确运行。这可以是一个系统的内部结构,也可以将多个系统组合在一起以做一些有用的事情。此外,将集成测试与单元测试区分开来的另一个因素是环境。集成测试可以并将使用线程,访问数据库或执行所需的任何操作,以确保所有代码和不同的环境更改都能正常工作。

如果你已经构建了一些序列化代码并且单元测试了它的内部而没有触及磁盘,你怎么知道它在你加载并保存到磁盘时会起作用?也许你忘了刷新和处理文件流。也许你的文件权限不正确,你已经在内存流中测试了内部。唯一可以确定的方法是使用最接近生产的环境来测试它“真实”。

主要的优点是,他们会发现单元测试无法发现的错误,例如布线错误(例如A类的实例意外收到B的空实例)和环境错误(它在我的单CPU机器上运行正常,但是我的同事的4核心机无法通过测试)。主要缺点是集成测试会触及更多代码,可靠性降低,故障难以诊断且测试难以维护。

此外,集成测试不一定证明完整的功能有效。用户可能不关心我的程序的内部细节,但我这样做!

功能测试

功能测试通过将给定输入的结果与规范进行比较来检查特定功能的正确性。功能测试不涉及中间结果或副作用,只是结果(他们不关心在执行x之后,对象y具有状态z)。它们被编写为测试规范的一部分,例如“调用函数Square(x),参数为2,返回4”。

验收测试

验收测试似乎分为两种类型:

标准验收测试涉及在整个系统上执行测试(例如,通过Web浏览器使用您的网页),以查看应用程序的功能是否满足规范。例如。 “单击缩放图标可将文档视图放大25%。”没有真正的连续结果,只有通过或失败的结果。

优点是测试用简单的英语描述,并确保整个软件功能完整。缺点是你已经在测试金字塔上移动了另一个级别。验收测试触及大量代码,因此追踪故障可能会非常棘手。

此外,在敏捷软件开发中,用户验收测试涉及创建测试以镜像在开发期间由软件客户创建的用户故事。如果测试通过,则意味着软件应满足客户的要求,并且可以认为故事是完整的。验收测试套件基本上是以域特定语言编写的可执行规范,该语言描述了系统用户使用的语言中的测试。

结论

他们都是互补的。有时,关注一种类型或完全避开它们是有利的。对我来说,主要的区别在于,一些测试从程序员的角度来看待事物,而其他测试则以客户/最终用户为中心。


80
投票

重要的是你知道这些术语对你的同事意味着什么。例如,当他们说“完全端到端”测试时,不同的群体对他们的意思略有不同的定义。

我最近遇到了Google的命名系统进行测试,我更喜欢它 - 他们只使用Small,Medium和Large来绕过这些参数。为了确定测试适合哪个类别,他们会考虑几个因素 - 运行需要多长时间,访问网络,数据库,文件系统,外部系统等等。

http://googletesting.blogspot.com/2010/12/test-sizes.html

我认为您当前工作场所的小,中,大差异可能与Google不同。

然而,这不仅仅是关于范围,而是关于目的。马克关于测试的不同观点的观点,例如:程序员与客户/最终用户,非常重要。


57
投票

http://martinfowler.com/articles/microservice-testing/

Martin Fowler的博客文章讲述了测试代码的策略(特别是在微服务架构中),但大多数都适用于任何应用程序。

我将引用他的摘要幻灯片:

  • 单元测试 - 在应用程序中运行最小的可测试软件,以确定它们是否按预期运行。
  • 集成测试 - 验证组件之间的通信路径和交互以检测接口缺陷。
  • 组件测试 - 将运行的软件的范围限制在被测系统的一部分,通过内部代码接口操作系统,并使用测试双精度将被测代码与其他组件隔离。
  • 合同测试 - 验证外部服务边界处的交互,声明它符合消费服务所期望的合同。
  • 端到端测试 - 验证系统是否满足外部要求并实现其目标,从头到尾测试整个系统。

29
投票

单元测试 - 顾名思义,此方法在对象级别进行测试。针对任何错误测试各个软件组件。该测试需要了解程序,并创建测试代码以检查软件是否按预期运行。

功能测试 - 在不了解系统内部工作的情况下进行。测试人员将通过提供不同的输入并测试生成的输出来尝试通过遵循要求来使用系统。该测试也称为闭箱测试或黑盒测试。

验收测试 - 这是在将软件移交给客户端之前进行的最后一次测试。执行此操作是为了确保开发的软件满足所有客户要求。有两种类型的验收测试 - 一种由开发团队成员执行,称为内部验收测试(Alpha测试),另一种由客户或最终用户执行(Beta测试)

集成测试 - 已经进行单元测试的各个模块相互集成。一般来说,遵循两种方法:

1)自上而下 2)自下而上


17
投票

这很简单。

  1. 单元测试:这是由具有编码知识的开发人员实际进行的测试。此测试在编码阶段完成,它是白盒测试的一部分。当一个软件用于开发时,它被开发成一段代码或称为一个单元的代码片。这些单元的单独测试称为开发人员进行的单元测试,以发现某些人为错误,如缺少语句覆盖等。
  2. 功能测试:此测试在测试(QA)阶段完成,它是黑盒测试的一部分。以前编写的测试用例的实际执行情况。此测试实际上由测试人员完成,他们找到站点中任何功能的实际结果,并将此结果与预期结果进行比较。如果他们发现任何差异,那么这是一个错误。
  3. 验收测试:知道为UAT。这实际上是由测试人员以及开发人员,管理团队,作者,编写者以及参与此项目的所有人完成的。确保项目最终准备好免费提供。
  4. 集成测试:代码单元(在第1点中解释)相互集成以完成项目。这些代码单元可以使用不同的编码技术编写,也可以使用不同的编码技术,因此开发人员可以完成此测试,以确保代码的所有单元与其他单元兼容,并且不存在任何集成问题。


4
投票

单元测试:已知应用程序中单个模块或独立组件的测试是单元测试,单元测试将由开发人员完成。

集成测试:结合所有模块和测试应用程序来验证通信和模块之间的数据流是否正常工作,此测试也由开发人员执行。

功能测试检查应用程序的各个功能意味着进行功能测试

验收测试此测试由最终用户或客户完成,无论构建应用程序是否符合客户要求,客户规范是否已知是验收测试


4
投票

我将用一个实际的例子解释你这个,没有理论的东西:

开发人员编写代码。尚未实现GUI。此级别的测试将验证函数是否正常工作以及数据类型是否正确。此测试阶段称为单元测试。

开发GUI并将应用程序分配给测试人员时,他会与客户端验证业务需求并执行不同的方案。这称为功能测试。在这里,我们将客户端需求映射到应用程序流。

集成测试:假设我们的应用程序有两个模块:人力资源和财务。 HR模块之前已交付并经过测试。现在财务已经开发并可供测试。相互依赖的功能现在也可用,因此在此阶段,您将测试两者之间的通信点,并验证它们是否按要求中的要求运行。

回归测试是另一个重要阶段,在任何新的开发或错误修复之后完成。其目的是验证以前的工作功能。

© www.soinside.com 2019 - 2024. All rights reserved.