正面测试和负面测试示例

⚡ 智能摘要

正向测试和负向测试共同决定软件是否接受应该接受的内容并拒绝不应该接受的内容。本文将解释这两种方法、其背后的技术、实际示例以及降低缺陷泄漏率的实践方法。

  • 检测结果呈阳性: 仅输入有效数据,并确认应用程序能够完全按照规范描述完成预期流程。
  • 检测结果为阴性: 输入无效或极端数据,并确认应用程序拒绝该数据,显示明确的错误,并保持稳定。
  • 📏 边界值分析: 测试每个可接受范围的边缘,然后超出范围一步,以便快速发现差一缺陷。
  • 🧩 等价类划分: 将输入数据分成有效和无效两组,然后从每组中抽取一个值,而不是测试所有值。
  • 覆盖规则: 每个需求至少编写两个用例,一个正面用例和一个负面用例,以确保所有验收标准都经过充分测试。
  • 🛡️ 安全收益: 反例会暴露出注入漏洞、过期令牌和未处理的异常,而正例永远不会触及这些问题。
  • 🤖 自动化适应性: 自动生成稳定的正向回归值数据,并自动生成负面验证检查以获得弹性反馈。

软件测试是对软件应用程序进行验证和确认,以检查其是否按预期运行的过程。其目的是发现缺陷并提高产品质量。软件测试有两种方法,即正向测试和负向测试。

这两种方法回答的是相反的问题:应用程序在一切正常时是否能正常工作,以及当出现问题时是否能保持稳定?

什么是阳性检测结果?

积极检测 是一种测试类型,它通过提供有效数据集作为输入来对软件应用程序执行。它检查软件应用程序在接收到有效输入时是否按预期运行。

正向测试是为了检验软件应用程序是否完全按照预期运行而进行的。因此,它也被称为正常路径测试。

例如,请看下面所示的数字文本框。

积极检测

应用程序中有一个文本框,它只能接受数字。输入不超过 99999 的值将被系统接受,除此之外的任何其他值均不可接受。要进行正面测试,请将有效输入值设置为 0 到 99999,然后检查系统是否接受这些值。

什么是负面测试?

负面测试 是一种通过提供无效或不正确的数据集作为输入来测试软件应用程序的方法。它检查软件应用程序在接收到负面或不期望的用户输入时是否按预期运行。

负面测试的目的是确保软件应用程序在输入无效数据时不会崩溃并保持稳定。因此,它也被称为错误路径测试或故障测试。

例如,考虑将同一个字段接收字符而不是数字。

负面测试

可以通过输入 A 到 Z 或从 a 到 z 的字符来执行负面测试。软件系统不应该接受这些值,否则它应该针对这些无效数据输入抛出错误消息。

两种类型的测试都需要考虑以下几点:

  • 输入数据
  • 需要执行的操作
  • 输出结果

阳性检测与阴性检测:主要区别

两种方法都具有相同的 测试用例 结构。区别在于你提供的输入以及通过的结果所证明的。

参数 积极检测 负面测试
也被称为 快乐路径测试 错误路径或故障测试
输入已使用 有效且符合预期的数据 无效、极端或意外数据
目标 确认该功能是否正常工作 确认该功能拒绝了它不应该拒绝的操作。
预期结果 流程成功完成 出现明显的错误提示,系统保持稳定。
错误处理 并非重点 全部焦点
保障范围 窄型,符合规范 范围广泛,涵盖规范之外的所有内容。
如果跳过这一步骤,通常会面临以下风险。 核心功能已损坏 崩溃和安全漏洞会影响生产环境

阳性测试失败表明功能出现故障。阴性测试失败表明缺少保护机制,一旦用户发现该机制,修复成本将高得多。

用于阳性和阴性检测的检测技术

在实践中,两种经典的输入设计技术会从同一需求中生成正反两方面的例子:

  • 边值分析
  • 等价划分

边值分析

这是软件测试技术之一,其中测试用例被设计为包含边界值。如果输入数据在边界值限制内使用,则称为正测试。如果输入数据是在边界值限制之外选取的,则称为负测试。

例如,请看下图所示的可接受范围。

正面与负面测试

系统可以接受 0 到 10 之间的数值。所有其他数字都是无效值。根据此技术,将测试边界值 -1,0,1 和 9,10,11。

等价划分

这是一个 软件测试 将输入数据划分为多个分区的技术。每个分区的值必须至少测试一次。具有有效值的分区用于正向测试。而具有无效值的分区用于负向测试。

例如,研究下面所示的两个分区。

等价划分

数值范围从零到十可以分为两(或三)个区间。在本例中,我们有两个区间:-10 到 -1 和 0 到 10。可以从每个区间中抽取样本值(例如 5 和 -5)来测试各种场景。参见…… 等价类划分和边界值分析 本课将提供更多示例。

如何进行阳性和阴性检测

以下序列将一个要求转化为一组平衡的正面和负面案例。

  1. 阅读有关限制的要求。 请注意所有可接受的格式、范围和必填字段。规范允许的都视为肯定情况,规范排除的都视为否定情况。
  2. 先写出正面情况。 提供有效数据,执行操作,并将预期成功结果记录为基准。
  3. 从相同的极限推导出反例。 使用边界值分析和等价类划分来生成空白字段、错误的数据类型和超出范围的数字。
  4. 添加敌对输入。 包括 SQL注入 字符串、过期令牌和格式错误的 API 有效负载 安全性测试 差距很早就显现出来了。
  5. 扩展到非功能性检查。 A 负载测试 当支持的用户数量为正数时, 压力测试 超过这个限制就是对应的反例。
  6. 选择每个案件的审理地点。 排除阴性病例。 烟雾测试和健全性测试它们是快速正向门,并在功能和 回归测试 周期。

ATM取款会显示配对信息。成功的情况是输入正确的PIN码和有效金额,因此会拿到现金和收据。失败的情况是输入错误的PIN码,会收到拒绝信息,然后银行卡会被冻结。

保持平衡的最佳实践

  • 在开发开始之前,针对每个需求至少编写两个案例,一个正面案例和一个负面案例。
  • 按影响程度优先处理负面案例,因此注射和支付失败优先于表面输入错误。
  • 要明确指出错误信息本身,而不仅仅是指出操作失败,因为含糊不清的信息也是一种缺陷。
  • 留出空间 探索性测试并通过您的系统记录调查结果。 缺陷管理流程.

⚠️警告: 切勿在实际生产环境中运行负面测试用例。负面测试用例旨在强制触发故障,而故意崩溃会影响真实用户和真实数据。

常见问题

负面测试 检查应用程序能否优雅地拒绝无效输入。破坏性测试更进一步,故意将系统推向崩溃边缘,例如在事务处理过程中断开数据库连接,以衡量系统在极端条件下的恢复行为和弹性。

序号 烟雾测试和健全性测试 只使用正面检查,因为它们可以作为新版本快速的质量关卡。负面检查会故意制造错误,因此团队会在更深层次的功能开发周期中运行它们。

是的。人工智能生成器会读取需求或用户故事,并生成有效和无效的输入集,包括边界值。但测试人员仍然需要审核这些输入集,因为生成的反例往往会超出某些领域限制,例如监管阈值或货币舍入规则。

是的。AI 功能需要针对错误注入、模型响应格式错误、超时以及超出范围的问题等情况设置反例。由于每次运行的输出结果可能不同,断言应该检查响应格式、安全过滤器和回退行为,而不是仅仅检查某个固定的预期字符串。

Selenium 驱动浏览器字段验证, Postman 涵盖无效的 API 负载和状态代码,以及 JMeter 在应力场景下,负载会超过支持的极限。选择与要验证的图层相匹配的工具。

总结一下这篇文章: