译者 | 李睿
审校 | 孙淑娟
功能测试和非功能测试是对不同类型的软件测试进行分类的流行方法。这两个类别指的是测试过程的本质以及正在测试的内容。如果以前从未深入研究过这两个测试类别,那么需要了解什么是功能测试和非功能测试。
首先,功能测试和非功能测试之间的区分并不是一成不变的,对于某些测试类型来说,对它们进行分类并非易事。其次,功能测试和非功能测试对于软件测试项目的成功都是至关重要的,尽管方式不同。以下将仔细研究功能性需求和非功能性需求之间的区别,这两种类型的测试在软件测试过程中的位置,以及它们如何影响测试成本。
什么是功能测试?
根据国际软件测试资质认证委员会(ISTQB)的定义,功能测试是一种检查组件或整个系统功能的测试。简而言之,功能测试帮助企业确保软件产品的特定功能完全按照预期工作。例如,如果采用车辆对软件产品进行类比,其功能需求将是车辆从A点行驶到B点的能力。换句话说,这就是每次想使用该产品时都希望它完美地做到的事情以及使用该产品的原因。
什么是非功能测试?
国际软件测试资质认证委员会(ISTQB)将非功能测试定义为一种处理与系统功能无关组件的测试。非功能测试的范围可能是无穷无尽的,并且很大程度上取决于产品的具体情况。非功能性需求更多地与产品为最终用户工作的方式有关,而不是与预期结果有关。如果以汽车作为类比,非功能性需求可以是任何事物,从汽车最高速度到在汽车收音机上找到所需电台的步骤数。
为什么功能测试和非功能测试有区别?
功能测试和非功能测试之间没有区别,因为这两种类型的测试相互独立。它们对质量保证(QA)工程师来说太重要了。对于大多数质量保证工程师来说,重要的是测试的结果,是一个没有错误、漏洞和不一致的软件产品。
质量保证团队负责人Igor Kovalenko说,“由于我们正在测试面向最终用户的产品,因此非常关心用户接收和交互产品的方式,这反过来又会为客户提供所需的结果。”
功能测试和非功能测试之间存在任何区别的最大原因是客户的便利性。通过明确的类别和分组方法,客户可以更轻松地选择对其项目至关重要的测试类型,并不选择与他们的需求特别相关的测试类型。
功能测试vs.非功能测试:主要区别
哪些类型的功能测试和非功能测试是最重要的?为什么?
如今有几十种功能测试和非功能测试类型,每种类型都有其自身的重要性。因此不要贸然说某些类型的测试对一个项目比其他类型的测试更重要,因为没有适用于每个项目的通用测试集。尽管如此,仍会特别频繁地执行几种类型的功能测试和非功能测试,并且如果执行得当,会对最终产品的质量产生特别显著的影响。以下是其中一些测试类型。
(1)功能测试
功能测试技术帮助质量保证(QA)团队了解产品是否符合开发人员为其设定的初始要求。每天都会进行多种类型的功能测试,以下是最常见的三种。
- 用户界面(UI)测试。在大多数情况下,图形用户界面是受众与产品交互的唯一方式。错误的界面是阻止用户访问产品的某些功能甚至完全使用产品的致命障碍。从功能验证到拼写,有几十个不同的用户界面方面需要测试。
- 单元测试。在单元测试的帮助下,质量保证(QA)工程师可以在测试新创建或最近更新的软件产品时尽可能精确。单元测试处理最小的代码片段,可以人工进行以实现最大精度,也可以自动进行以实现最大效率。
- 安全测试。软件系统的安全性一直都很重要,但随着2019年新冠疫情的爆发,其重要性达到了历史最高水平。由于风险处于历史最高水平,很多企业无法承受数据安全和品牌忠诚度方面的任何安全风险。一些企业专门进行安全测试,但它也可以作为功能测试包的一部分来完成。
(2)非功能测试
非功能测试处理系统作为一个整体的运行方式,而不是它包含的特定功能。当然,系统的每个非功能性测试本身都很重要,但某些类型的非功能性测试适用于任何软件项目:
- 用户体验(UX)测试。这种类型的测试有助于开发人员了解产品是否易于最终用户操作。UX测试通常与UI测试一起被提及,但它们在用户故事的不同级别上运行。虽然用户UI测试确保界面的所有方面都存在并且正常工作,但UX测试确保它们都为令人满意的用户旅程做出贡献。
质量保证(QA)团队负责人Andrii Nikitenko说,“UX测试和UI测试是不同类型的测试,它们不能一起使用。UX是一种非功能测试,而UI是功能测试。没有任何类型的产品可以跳过这些类型的测试。即使产品没有用户界面,最终用户仍然会以某种方式与之交互,这就是为什么UX测试和UI测试都是必不可少的。而且它们也不能互换。例如一个应用程序可以有一个从UI角度看起来很正常的按钮,但它在某些屏幕上显得太小了。当最终用户主要在这些屏幕上使用产品时,用户体验就会受到影响。”
- 性能测试。性能测试既是一种测试,用于分析软件产品的应用程序大小、速度和可靠性;又是一组功能测试,可能包括压力测试、负载测试、配置测试、峰值测试、可扩展性测试等。这些非功能测试可以确保在任何情况下都具有稳定的性能。
- 兼容性测试。鉴于企业的软件产品可以在多种平台上使用,兼容性测试是项目要考虑的最重要的非功能测试类型之一。QA团队将针对不同类型的硬件、软件、移动设备、操作系统及其版本、浏览器和网络测试企业的应用程序,以确保它们的性能始终如一。
有时被忽视但仍然非常重要的测试类型
根据软件测试公司的经验,有两种主要类型的客户需要QA服务。第一种类型完全取决于QA团队在流程每个阶段的专业知识,包括测试类型的选择和测试范围。第二种类型有一组需要完成的特定要求和测试类型。但是,在第二种情况下,测试计划中通常存在一些基本类型的测试缺失的风险。这些是有时被忽视但不应该被忽视的三种类型的测试:
- 安装测试。用户与产品交互的方式受到了很多关注,但它在应用程序首次启动之前就开始了。准确地说,当应用程序或其他类型的软件产品安装到用户的设备上时,它就会启动。用户在使用过程中遇到的障碍越少,他们对产品的满意度就越高。
- 本地化测试。很少有软件产品(例如网站或应用程序)仅用于单个国家或地区。企业的产品发布要覆盖的世界越多,就越需要关心正确的本地化。它涉及从正确的时间和日期格式和货币设置到遵守各国的法律和法规的任何事情。
- 集成测试。在系统测试的层次结构中,首先是单元测试,然后是集成测试,最后是系统测试。当然,没有人会忽视单元测试以测试产品的各个组件或系统测试以了解它们如何相互交互。尽管如此,它仍然是集成测试,它处理被分成组的软件模块,这有时被错误地视为事后的想法。
功能测试和非功能测试:它们在测试过程中处于什么位置?
制定详细的测试计划和设计测试过程是确保整个测试工作顺利进行,并且系统的功能和非功能方面都是经过测试的方法之一。但是功能性和非功能性测试与测试过程的关系在哪里呢?
一般来说,关于测试过程需要了解的一个关键问题是,没有适合每个项目和场景的通用方法。与其相反,在每一个新的测试项目中,工程师都会考虑几十个不同的因素,从项目的规模到目标受众。
根据软件测试公司的经验,通过查看随代码附带的文档来开始每个测试项目。仅文档就应该提供足够的信息来帮助正确设计测试过程,并确保它没有遗漏任何重要的东西。
但是,在某些情况下,文档缺失或不足。在这种情况下,QA工程师将首先在探索性测试之旅的帮助下进行探索性测试。它通常被视为一种独立的测试技术,不包括在功能或非功能测试类别中。它帮助工程师规划测试过程,并决定需要测试的产品功能和非功能需求。或者,当软件产品具有相对标准的规范和架构时,可以执行基于清单的测试。
一旦探索性测试产生了可观的结果,工程师就可以看到即将到来的测试过程的大局和细节。通常情况下,将会先测试产品的功能,然后再进行非功能方面的测试。然而,这也不是唯一正确的做事方式。在功能测试或探索阶段测试产品的某些非功能方面是可能的。例如,经验丰富的QA工程师已经发现产品的可用性和UX问题,同时仍然定义测试范围。
变更相关测试及其重要性
虽然对软件测试进行分类的最常见方法是将所有测试类型分为功能性测试和非功能性测试,但许多专业的QA工程师现在区分了第三类软件测试,也就是与变更相关的测试。
正如其名字所证明的那样,与更改相关的软件测试仅在对代码进行多次更改后才会发生。这包括冒烟测试、健全性测试、回归测试和重新测试。但是,从软件测试过程的角度来看,与变更相关的测试可以在任何阶段进行,无论是在产品的功能组件和非功能组件更改之后。
执行与变更相关的测试(最重要的是回归测试)可能会让企业的产品发布延迟几周。但是,它是经过良好测试的产品最关键的方面之一。与更改相关的测试可以帮助企业确保产品的功能或非功能方面都不会受到最近代码更改的负面影响,并且不会在没有及时回归测试的情况下再次出现原有的错误。
功能和非功能测试:成本方面
无论企业是从头开始开发软件项目并最终对其进行测试,还是准备发布最近完成的产品并将软件测试视为未完成项目和已完成项目之间的最终边界,成本都很重要。
(1)功能性和非功能性测试如何影响成本?
对于大多数软件产品所有者来说,测试项目的成本是继测试服务质量之后的下一个大问题。由于大量资源投入到开发过程中,大多数开发人员和产品所有者在测试方面无法承担类似的费用。这就是为什么他们经常想知道功能测试和非功能测试对测试项目总成本的影响的原因。
这里要理解的重要一点是,企业的测试项目的预算不是由其选择的合作模型需要执行的功能和非功能测试来定义的。除了一些出色的测试类型(包括安全测试、UX测试和性能测试)之外,QA工程师不会对特定类型的测试收取更多费用。这就是为什么在预算项目时不应该区分功能测试和非功能测试的原因。
(2)影响测试成本的因素
除了影响测试项目成本的最明显因素之外,例如选择的合作模式和项目规模,还有一些其他因素直接影响整体价格。以下在每个测试项目中都以一种或另一种方式出现的五个因素。
- 团队的规模、资历和位置。QA团队的选择是建立新测试项目(包括其成本)最关键的方面之一。团队规模和资历级别背后的逻辑很简单,但团队的位置也很重要。例如,在乌克兰聘请QA团队的薪酬将显著低于在美国或西欧的同一团队。
- 功能复杂性。企业的员工无需成为软件工程师,而了解应用程序具有的功能越多,进行彻底测试所需的资源就越多。例如,在包含数千种产品的电子商务网站上执行测试总是比测试具有单一核心功能(例如闹钟)的应用程序更昂贵。
- UX和UI的复杂性。企业的产品可能具有最具开创性的功能,但与无法导航、充满错误或外观和感觉过时的界面搭配使用时,它的价值并不高。企业的产品拥有的UI元素越多,用户与产品交互的方式就越多,这部分测试的复杂性和成本就会越高。
- 人工和自动测试的数量。人工测试和自动测试的数量都会影响软件测试项目的成本,但方式不同。许多QA工程师的共识是,虽然测试自动化的设置成本更高,但从长远来看,它通常被证明更具成本效益,因为测试可以重复使用。相比之下,人工测试需要人工执行,因此其成本不会随着项目的进展而发生太大变化。
- 功能性和非功能性测试的数量。功能测试的范围不仅仅是测试产品的功能。单元测试、系统测试和用户验收测试的数量会影响项目的成本。非功能测试也是如此。企业希望对安全性、性能、兼容性和其他类型的非功能测试进行得越彻底,其项目成本就越高。
QA团队负责人Andrii Nikitenko说,“项目的持续时间取决于产品的复杂性,需求的明确度,团队之间的沟通水平,客户回答问题的准备程度、项目规模、技术范围、平台的种类和屏幕的数量。项目的成本取决于类似的因素。”
(3)功能测试和非功能测试的投资回报率
投资回报率在软件测试社区中是一个颇具争议的话题。有人说没有确定的方法来计算软件测试的投资回报率,而另一些人甚至声称计算软件测试的投资回报率是一个误区。
在通常情况下,真相就在其中。不幸的是,计算软件测试工作的投资回报非常困难:可以确定测试项目的成本,但无法确切知道它如何影响企业的利润。
就其本身而言,功能性或非功能性软件测试都不会产生利润。但是在及时测试的帮助下,企业可以通过防止软件错误、安全问题、可用性问题和其他对其产品在市场上的地位产生负面影响的因素来提高利润。
那么就投资回报率而言,功能测试和非功能测试有区别吗?如果看一下这两种测试在测试过程中的位置,就会发现功能测试通常比非功能测试发生得更早。越早发现错误,修复它们花费的资源就越少。此外,功能性错误通常更容易定位,尤其是当有足够的文档时。所有这些都使功能测试具有明显的成本效益。
另一方面,非功能测试通常发生在软件产品开发的最后阶段,有时甚至发生在其发布之后。在这一点上,修复错误需要花费更多的时间和费用。此外,非功能性错误通常更难发现,因为它们涉及软件产品操作的更精细方面。
但是,始终牢记不应将非功能测试视为功能测试的次要内容。这些测试类型直接影响企业的软件产品的接受度,因此即使在投资回报率(ROI)与其预期不同的情况下,也不是限制测试工作的理由。
(4)可以跳过某些类型的测试步骤节省成本吗?
在各种情况下,测试范围都是在本文前面讨论的因素定义的。然而,在大多数情况下,QA工程师对软件产品运行功能测试和非功能测试。这样做是为了使测试过程全面而有效,这将产生一个经过彻底测试的产品,并将故障概率降至最低。
如果谈论的是一个抽象的软件产品,那么确实如此,如果缺乏资源,有时可以缩小测试范围。但是,企业的测试项目仍然需要包括功能测试和非功能测试。
只有在开发不打算与用户交互的产品时,才能完全跳过非功能测试,例如没有用户界面的实用软件产品。即使这样,企业也可能需要测试它的性能、安装、承受不同负载的能力以及其他影响软件产品成功的因素。
为什么在投资时间和成本方面非功能测试与功能测试一样重要
对于功能测试的重要性通常不会引起太多争论,因为它直接处理产品的预期功能——而这正是设计它的目的。然而,对于那些刚接触软件开发和测试的人来说,非功能性测试似乎并不重要。此外,由于非功能测试往往是资源密集型的,产品所有者经常怀疑这是否值得投资。
非功能测试不足或缺失的软件产品在市场上的表现永远不会像每个非功能方面都经过尽可能的细节测试的产品那样好。因此,在这里的工作不是试图减少非功能性测试以减少资源消耗,而是找到一个适合企业的需求和预算的QA团队。
QA团队负责人Igor Kovalenko说,“在这个时代,几乎没有任何行业或产品类型能够将非功能测试视为事后的想法,因为产品的每一个新特性都是为最终用户而设计的。”
结论
将测试分为功能性和非功能性只是对软件测试进行分类的一种可能方法,但这是一个非常重要的区别。本文旨在展示功能测试和非功能测试对于企业的软件项目的成功来说至关重要。
如果企业希望其产品按照功能要求工作并受到客户的好评,那么跳过任何一种类型的测试或将其重要性最小化将会是一个最终适得其反的结果。另一方面,企业根据其项目规范和内部资源设计一个全面的测试计划是一种最终会得到回报的策略。
原文标题:Functional vs. Non-functional Testing: Can You Have One Without the Other? ,作者:Anna Smith