转载:https://dzone.com/articles/what-is-functional-testing-types-tips-limitations
功能测试是一种软件测试,用于评估软件应用程序的各个功能的性能。功能测试的目的是确保应用程序及其所有单个功能在现实世界中都能正常工作并满足所有要求和规范。这是一种很有价值的测试方法,用于验证每个应用程序功能提供的输出是否符合预期。
功能测试的工作原理
功能测试通常是通过向被测试的功能提供适当的输入(与实际用例中预期的典型输入一致),然后通过将其与预期结果进行比较来验证结果来进行的。此类测试可以回答有关软件应用程序功能的问题,例如用户能够执行哪些操作。
通常从以下两个角度之一进行处理:
- 以需求为中心的测试,它根据风险标准对需求进行优先级排序,以便首先评估最关键和最重要的特性和功能。
- 以业务流程为中心的测试,它依赖于最终用户业务需求的知识来评估应用程序在典型用例上下文中的性能。
有几种特定的功能测试技术。两种主要技术包括白盒测试和黑盒测试,但还有其他技术包括:
- 烟雾测试。
- 单元测试。
- 用户验收测试。
- 集成测试。
- 接口测试。
- 系统测试。
- 本地化测试。
- 回归测试。
- 全球化测试。
功能测试的好处
功能测试是在软件应用程序交付实际使用之前评估其性能的重要步骤。发布具有严重功能缺陷的应用程序可能会给依赖软件应用程序来满足其使用要求的最终用户带来灾难性后果。
在最好的情况下,无法正常工作的应用程序会让最终用户感到沮丧。但对于专为商业用途设计的应用程序,后果可能很严重。许多行业都有必须满足的特定合规性要求和监管指南,不能满足这些要求的应用程序几乎总是会给用户带来负面影响。
例如,如果工资单应用程序未能准确说明企业负责计算和汇出的各种税款,则可能导致监管机构的付款不足、罚款甚至罚款。从轻微的不便到严重的灾难,无法正常运行的应用程序总会带来后果,而功能测试是避免这些负面结果的最有效方法之一。
因为功能测试是在考虑到最终用户的需求的情况下进行的,所以它有助于开发人员创建与现实世界使用场景非常相似的测试场景。用户规范越具体,功能测试的效果就越好,通过通知设计适当的功能测试来确保满足这些期望。最终,功能测试的有效性取决于对用户需求的了解以及精明的测试设计。
功能测试的局限性
功能测试侧重于应用程序完成它应该做的事情的程度,尽管它不包括与其功能没有直接关系但仍然是确定应用程序是否准备好部署时要考虑的关键因素的其他性能问题. 通常,不属于功能测试范围的评估和可用性因素被归类为非功能测试,其中可能包括:
- 安全测试。
- 可用性测试。
- 操作准备测试。
- 耐力测试。
- 互操作性测试。
- 可维护性测试。
- 人体工程学测试。
- 可用性测试。
- 可恢复性测试。
- 和别的!
从本质上讲,功能测试包含应用程序设计的关键组件,确保每个功能都根据应用程序的设计和客户或最终用户的要求执行预期的操作,但它没有考虑其他变量,例如具体需要多长时间执行功能、安全性和其他对大多数用户也至关重要的问题。因此,虽然功能测试是一个完整的测试过程,但仅靠它并不能确保应用程序已准备好在现实世界中使用。
根据Software Testing Fundamentals,功能测试的其他缺点包括在应用程序中丢失逻辑错误的可能性以及进行冗余测试的可能性很高。功能测试还需要对用户需求有深入的了解,这可能并不总是很清楚或随时可用,并且设计特定于上下文的测试来评估功能性能可能非常耗时。
功能测试的最佳实践
功能测试可能是一个漫长的过程,您的时间表可能会根据测试过程中是否发现功能缺陷而改变。这意味着您需要保持灵活性,以便您的团队能够轻松适应不断变化的需求。
此外,大多数软件应用程序都有大量的单独功能,因此拥有一个既定的系统和定义的标准来帮助您确定测试的优先级将有助于您的团队保持专注并确保首先评估最关键的功能。您还需要确保您的功能测试计划涵盖所有主要业务用例——通过典型的流程评估功能,从开始到结束。事实上,在开始功能测试过程之前制作用户故事是一个好主意,以便在您计划和设计适当的测试时提供指导和上下文。
确保所有测试都可以很容易地追溯到应用程序/用户需求和任何已识别的错误也是一种很好的做法。如果没有跟踪需求、测试和错误的地图,几乎不可能确保您在发布之前已经纠正了每个已识别的问题。
有些测试者更愿意进行功能和性能测试同时,它可以用于功能测试技术提供更大的范围内。此外,在某些情况下,性能实际上会影响功能测试,因此确保功能和性能同步并且不妨碍另一个非常重要。最后,将功能测试和性能测试作为两个独立的可交付成果进行维护有时会导致性能测试在优先级范围内降低,从而导致假设如果功能正常工作,性能应该随之而来——但情况并非总是如此。
为了充分利用功能测试工作,将功能映射到业务需求,相应地确定各个测试的优先级,并保持灵活性以适应您在发现功能问题时肯定会改变的需求。最重要的是,永远不要将测试仅限于功能测试。未能解决性能问题可能会成就或破坏您的应用程序的成功,如果您的应用程序未按预期执行,则会对最终用户产生严重影响。