验收测试和功能测试的区别是什么?

167

验收测试和功能测试之间的实际区别是什么?

每个测试的重点或目标是什么?无论我在哪里读到,它们似乎都含糊不清地相似。

11个回答

191
在我的领域中,我们使用以下术语: 功能测试:这是一种验证活动;我们构建了一个正确工作的产品吗?软件是否满足业务需求?
为了进行这种类型的测试,我们有测试用例覆盖所有可能的场景,即使该场景在“现实世界”中不太可能存在。在进行此类测试时,我们旨在实现最大的代码覆盖率。我们使用任何可用的测试环境,它不必是“生产”级别,只要它可用即可。 验收测试:这是一项验证活动;我们是否建立了正确的东西?这是客户真正需要的吗?
通常与客户合作完成,或由内部客户代表(产品负责人)完成。对于此类测试,我们使用涵盖我们期望软件使用的典型场景的测试用例。此测试必须在“类似生产”的环境中进行,在硬件上,该硬件与客户将使用的相同或接近。这是我们测试自己的"ilities":
- 可靠性和可用性:通过压力测试进行验证。 - 可扩展性:通过负载测试进行验证。 - 可用性:通过向客户演示和检查进行验证。UI是否按照他们的喜好配置?我们是否将客户品牌放在了正确的地方?我们是否有他们要求的所有字段/屏幕? - 安全性(也称为安全性,只是为了适应):通过演示进行验证。有时客户会聘请外部公司进行安全审计和/或入侵测试。 - 可维护性:通过演示我们如何交付软件更新/补丁进行验证。 - 可配置性:通过演示客户如何修改系统以适应其需要进行验证。

这绝非标准做法,而且我认为没有“标准”定义,因为这里的答案互相矛盾。对于您的组织来说,最重要的是精确地定义这些术语并坚持使用。


1
加1给这个好答案,“又名Securability,只是为了适应一下” :)。有趣的事情 :) SO团队没有考虑到在现实世界中,有人可能会用真正的单词替换+号,就像我所做的那样。因此,他们不允许在评论中输入+1作为第一个单词,但他们允许“plus 1” :)。因此,从功能上来说,他们未能正确测试这个问题:)。也许他们只是尝试了验收测试:)。 - Geo C.

85

我喜欢Patrick Cuff的答案。我想补充一下的是测试层次和测试类型之间的区别,这对我来说是一个启示。

测试层次

测试层次V模型很容易解释,例如: enter image description here 每个测试层次都有其对应的开发层次。它具有典型的时间特征,在开发生命周期的某个阶段执行。

  1. 组件/单元测试 => 验证详细设计
  2. 组件/单元集成测试 => 验证全局设计
  3. 系统测试 => 验证系统需求
  4. 系统集成测试 => 验证系统需求
  5. 验收测试 => 验证用户需求

测试类型

测试类型是特定测试目标的特征。 测试类型强调您的质量方面,也称为技术或非功能方面。 测试类型可以在任何测试层次执行。我喜欢使用ISO/IEC 25010:2011中提到的质量特性作为测试类型

  1. 功能测试
  2. 可靠性测试
  3. 性能测试
  4. 可操作性测试
  5. 安全性测试
  6. 兼容性测试
  7. 可维护性测试
  8. 可传输性测试
为了使其完整,还有一个称为“回归测试”的东西。这是除了测试级别和测试类型之外的额外分类。回归测试是您想要重复执行的测试,因为它涉及产品中的关键部分。实际上,它是您为每个测试级别定义的测试子集。如果产品中有小错误修复,人们并不总是有时间重新执行所有测试。回归测试是对此的答案。

2
这是对这个问题最好的答案,“测试级别和测试类型之间的区别”是大多数答案都忽略了的内容,你是正确的,它是一个“启发性”的内容。 - zmilan

31

测试问题和解决方案之间的区别在于,软件是解决问题的方案,两者都可以被测试。

功能测试确认软件在解决问题的方式范围内执行功能。这是开发软件的不可或缺的一部分,类似于在大规模生产产品离开工厂之前进行的测试。功能测试验证产品实际按照开发者预期运行。

验收测试验证产品实际解决了它所设计解决的问题。最好由用户(客户)来执行此项测试,例如执行软件协助完成的任务。如果软件通过了这个真实世界的测试,它就能够替代之前的解决方案。特别是当你有匿名客户(例如网站)时,这种验收测试有时只能在生产环境中正确执行。因此,一个新功能只有在几天或几周的使用后才会得到接受。

功能测试 - 测试产品,验证它是否具有你设计或构建的质量(功能、速度、错误、一致性等)。

验收测试 - 测试产品在其上下文环境中,需要(模拟)人的交互作用,测试它对原始问题是否具有期望的影响。


1
这是我在这个问题上最喜欢的答案。问题和解决方案之间的区别有助于使这种区别更加清晰。 - Lou
终于有一个清晰的解释了。 - kta

15
答案是个人观点。我在许多项目中担任测试经理、问题经理和各种不同的角色,各种书籍中的描述都有所不同,因此这是我的变化: 功能测试:从功能的角度出发,对所有业务需求进行全面彻底的测试。 验收测试:“付费”客户进行测试,以便能够接受交付的产品。这取决于客户,但通常测试不如功能测试彻底,特别是如果这是一个内部项目,因为利益相关者会审核并信任早期测试阶段完成的测试结果。
就像我说的,这是我的观点和经验。功能测试是系统化的,验收测试则更像是业务部门的测试。

我喜欢这个答案 :) 它们基本上是一样的东西。 - anbanm
1
UAT最终由“付费”客户完成。然而,大多数情况下,它首先由一个QA人员完成,该人员擅长测试和“尝试”破坏系统,并寻找所有“小”问题,然后再将其交给“付费”客户。Selenium自动化用于重复繁琐的事情,可以与QA测试人员进行真正的UAT测试,但永远不要重复真正的测试以测试所有预期浏览器的所有功能。UAT相当自我解释。我认为大多数功能测试描述似乎过于机械和字典。 - Tom Stickel
正如我所说,这是我的经验,关于术语的解释。 - hol
没问题。当我注意到这个模糊的定义时,我不得不评论说:“功能测试:从功能角度出发,考虑业务需求并全面彻底地测试所有内容。” - Tom Stickel
哈哈,是的,现在我明白你的意思了。好的,这是一件你可以写一整本书的事情。当时我写它的时候并不想深入探讨这个问题。 - hol

10
  1. 受众。功能测试旨在确保制作软件的团队成员能够满足他们的期望。验收测试旨在确保消费者满足他们的需求。

  2. 范围。功能测试仅测试一个组件的功能。验收测试涵盖了产品中任何对消费者来说值得花时间或金钱进行测试以确定其可接受性的方面。

软件可以通过功能测试、集成测试和系统测试,但当客户发现功能不符合他们的需求时,它可能会失败验收测试。这通常意味着规格说明书出了问题。软件也可能会在某些功能测试中失败,但通过验收测试因为客户愿意处理一些功能性错误,只要软件能够满足他们核心需求就可以(测试版软件通常在完全功能之前将被一部分用户接受)。


2

功能测试:使用从指定的功能需求中获取的测试数据进行测试,而不考虑最终程序结构。也被称为黑盒测试。

验收测试:正式测试,用于确定系统是否满足其验收标准,使最终用户能够确定是否接受该系统。


1
两者之间的关系: 验收测试通常包括功能测试,但也可能包括其他测试。例如检查标签/文档要求。 功能测试是指将被测试的产品放置在测试环境中,该环境可以产生各种刺激(在测试范围内),这些刺激通常与目标环境产生的刺激相同或甚至超出,同时检查被测试设备的响应。
对于物理产品(非软件),有两种主要类型的验收测试:设计测试和制造测试。设计测试通常使用大量已通过制造测试的产品样本。不同的消费者可能以不同的方式测试设计。
当设计针对产品规格进行测试时,验收测试被称为验证,而当产品放置在消费者的真实环境中时,验收测试被称为确认。

1

验收测试是客户进行的测试,包括其他类型的测试:

  • 功能测试:"这个按钮不起作用"
  • 非功能性测试:"这个页面可以工作但速度太慢"

有关功能测试与非功能测试(它们的子类型)- 请参见我对此SO问题的回答。


1

在我看来,主要的区别在于谁说测试成功或失败。

功能测试是测试系统是否符合预定义的要求。它由负责开发系统的人员进行并进行检查。

验收测试由用户签署。理想情况下,用户会说出他们想要测试什么,但实际上很可能是功能测试的一个子集,因为用户没有投入足够的时间。请注意,这个观点来自我处理的业务用户,其他用户群体(如航空和其他安全关键领域)可能不会有这种区别。


验收测试将确定系统是否满足给定用例或所有可想象的用例的验收标准。通常由专家用户执行,以确定系统是否可接受。在航空领域,试飞员是通过进行特定机动测试新飞机的飞行员。顶级飞行员、导航员和工程师进行飞行测试,在测试任务结束时提供评估和认证数据。 - jjpcondor

1

验收测试

在系统(例如软件、大量制造的机械零件或批量化学产品)交付之前对其进行的黑盒测试。

尽管它接着说:

它也被称为功能测试、黑盒测试、发布验收、QA 测试、应用测试、置信度测试、最终测试、验证测试或出厂验收测试。

带有“需要引用”的标志。

功能测试(实际上是重定向到系统测试):

在集成系统上进行,以评估系统是否符合其指定的要求。系统测试属于黑盒测试范畴,因此不需要了解代码或逻辑的内部设计。

因此,从这个定义来看,它们基本相同。

根据我的经验,验收测试通常是功能测试的一个子集,并由客户在正式签署过程中使用,而功能/系统测试将由开发人员/QA 部门运行。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接