什么是阴性检测?测试用例与示例

⚡ 智能摘要

负面测试检查软件应用程序在接收到意外的输入数据或操作条件时的行为,以便产品能够优雅地降级,而不是崩溃、损坏数据或暴露安全漏洞。

  • ???? 目的: 确认应用程序能够正确拒绝无效数据,而不是失败或崩溃。
  • 对比: 阳性检测结果证明了一切顺利;阴性检测结果则探究了一切不顺利的情况。
  • 🛗 比喻: 电梯不仅要能承受正常的乘客出行,还要能承受超载、火灾和断电等情况。
  • 🔒 安全性: 无效上传和 SQL 注入尝试是典型的负面测试场景。
  • 🧪 设计: 边界值、等价类、误差猜测和模糊测试生成测试用例。
  • 📊 优先级: 按影响程度对无效输入进行排名,因为全面负面报道的成本太高。
  • ⚠️ 权衡: 过多的阴性检测会消耗预算,而阳性检测可能需要更多预算。

软件测试中的负面测试:使用无效输入示例

负面测试

负面测试 负面测试是一种软件测试类型,用于检查软件应用程序是否能够应对意外的输入数据和情况。意外数据或情况的范围很广,从简单的表单字段中错误的数据类型到蓄意的黑客攻击都包括在内。负面测试的目的是防止应用程序因无效输入而崩溃,并提高产品的质量和稳定性。

仅靠正向测试只能证明系统在正常情况下运行良好。负向测试则能确认同一系统也能应对异常情况,而这正是容错产品所要求的。

负面测试示例

电梯是最常被用来解释负面测试的例子,因为它的正常行为和故障行为都很容易想象。

电梯的使用要求很熟悉:按下楼层号,电梯就会到达该楼层;电梯到达指定楼层后,门会自动打开。

下面列出了同一电梯的一些负面情况,以及阳性检测所作的假设。

负面测试 积极检测
如果人数(重量)超过规定的限制会怎样? 假设只有指定数量的人员会进入电梯
如果有人在电梯内吸烟或引发火灾会发生什么? 假设电梯内不会出现烟雾或火灾。
如果运行过程中发生电源故障怎么办? 假设电梯运行期间不会发生停电。

所有这些病例的检测结果均为阴性。但任何一种情况都无法保证永远不会发生,因此必须对每一种情况进行控制。

假设从未检查过超载情况,而电梯在超载后出现异常运行。这一个疏忽就会损害系统的可靠性,甚至危及生命。这就是负面测试在实践中的意义,以及它为何如此重要。

软件的行为方式也类似。否定测试是指故意偏离正常操作流程。例如,注册表单就是一个例子。

负面测试 积极检测
在电子邮件字段中输入了无效的电子邮件地址。 只有在电子邮件地址字段中才能输入有效的电子邮件地址。
在电话号码栏中输入无效电话号码(例如,输入特殊字符)。 数字栏只能输入数字。
上传尺寸超出指定范围的图片 只有符合指定尺寸范围的图片才会被上传。
上传无效文件,例如 XML or SQL 图片上传字段中的文件 仅允许上传.jpg或.png等有效图像格式的文件。

即使出现这些负面情况,系统也必须保持正常运行。如果在数字字段中输入字符,应用程序将无法处理它从未预料到的意外数据,并可能崩溃。更糟糕的是, SQL注入 同一字段中的字符串可能会导致数据库内容被覆盖。正是由于存在这类损失,才需要进行负面测试。

为什么要做负面测试?

测试耗时耗力,因此决定测试什么、如何测试以及测试多少至关重要。对于是否应该将部分预算用于负面测试,项目双方的看法截然不同。

组织视角

向客户交付优质产品是企业的责任,而阴性测试是履行这一责任的一部分。它也是企业证明其已尽一切合理努力防止故障发生的证据,尽管没有任何系统能够完全避免错误。

影响程度才是决定性因素。一个电商网站可能通过了所有正面测试,但仍然可能存在漏洞,攻击者可以利用该漏洞进行 SQL 注入并抹除网站背后的数据。这是一种严重的安全漏洞,只有负面测试才能发现它。

面向公众的应用程序,尤其是网站,几乎无法控制访问者的使用方式,因此,负面测试是确认异常使用情况是否被覆盖和控制的唯一方法。恶意用户也是如此:攻击者会积极寻找机会入侵系统,而黑客攻击场景理应包含在负面测试的覆盖范围内。

客户视角

客户期望产品零漏洞,而负面测试正是为了满足这一期望。对于电子商务或在线股票交易等敏感产品而言, 安全性测试 阴性检测结果是强制性的,而不是可选项。

客户唯一真正关心的问题是成本。一旦分析出故障的影响,客户就可以决定负面测试工作应该做到什么程度。

如何进行阴性检测

负面测试首先要考虑应用程序实际能够接收到的所有输入,而不仅仅是它应该接收到的输入。这些输入都属于以下范畴: 测试用例 即使这种使用方式显然是错误的。例如,系统会测试电子邮件字段是否包含所有无效的电子邮件地址,并测试图像上传控件是否包含所有非图像文件类型。

无效输入的列表几乎无穷无尽,因此必须对负面测试用例进行优先级排序。例如,对于一个只接受 .png 文件的图像字段,候选上传文件格式包括 .jpeg、.xml、.xls 等等。XML 或 SQL 文件的影响远大于 .jpeg 文件,因此这些用例会优先执行。在执行前根据影响程度对用例进行排序,正是降低负面测试成本的关键所在。

大多数负面测试用例都来自一套既定的设计技巧,而不是即兴发挥:

  • 边界值: 对紧邻有效范围之外的值进行练习,例如,对于一个接受 1 到 100 的字段,练习 0 和 101。
  • 无效的等价类: 从每类被拒绝的输入中挑选一个代表,例如数字字段中的字母。
  • 猜测错误: 利用以往缺陷的经验,找出最有可能导致此类功能失效的输入。
  • 畸形和恶意数据: 脚本标签、SQL 片段和过大的有效负载会探测验证和安全处理。
  • 模糊测试: 自动生成大量随机或变异的输入,以查找未处理的崩溃。
  • 中断的流程: 交易过程中途取消、刷新、超时或失去连接。

无论采用何种技术,预期结果都必须记录为可控的、可读的失败——验证消息、被拒绝的上传、干净的回滚——而绝不能仅仅记录为“系统没有崩溃”。

阴性检测的利弊

与其他所有测试技术一样,负面测试也有其优点和缺点,这取决于在哪里、何时以及应用多少。

负面测试的优点

  • 它直接保护产品质量,因为高质量的产品就是没有可被利用的漏洞的产品。
  • 它扩大了覆盖范围。无效输入可能有意或无意地进入运行中的系统,因此,为了使覆盖范围有意义,必须同时考虑无效输入和无效输入。
  • 它能在产品正式发布前增强客户的信心。
  • 它能发现正面测试在结构上无法发现的缺陷,例如未处理的异常和薄弱的输入验证。

负面测试的缺点

  • 在某些情况下,这样做会浪费时间和精力。如果一个应用程序是为单个用户开发的,那么测试 100 个并发用户的情况就毫无意义,因此选择合适的测试条件至关重要,有些系统甚至几乎不需要负面测试。
  • 设计这些案例需要技术娴熟、经验丰富的人员。
  • 从客户的角度来看,这会增加成本并可能延迟发布。
  • 这会造成资源竞争。一个在阴性检测上投入巨资的团队,最终可能会在阳性检测上投入不足。

常见问题

正向测试输入有效数据并确认预期结果。反向测试输入无效数据、错误格式和断裂序列,并确认应用程序会以受控消息拒绝这些数据,而不是直接报错。

空白凭据、有效用户但密码错误、用户名中包含 SQL 片段、字符串过长、开头或结尾有空格、帐户已禁用,以及多次尝试确认锁定行为无效。

不。它们在涉及无效或恶意输入时会有重叠,但安全测试还涵盖身份验证、授权、加密和会话处理。负面测试是一种更广泛的输入和条件测试技术。

测试人员和质量保证工程师通常会编写这些代码,开发人员会审查错误路径,业务分析师会确认需求实际上禁止哪些无效条件。

足以涵盖所有被拒绝的输入类别、所有边界以及所有高影响的故障路径。除此之外,增加案例意义不大,因此风险和影响决定了最终的结论。ping 点。

是的。无效输入的情况具有高度可重复性,因此适合用于此目的。 自动化测试 以及回归测试套件。模糊测试工具可自动生成随机输入,而断言则检查验证消息是否出现。

模型读取需求或表单模式,并提出测试人员可能未手动列出的无效值、边界条件和恶意字符串。审核人员仍需确认每个预期结果是否符合规范。

是的,它可以从现有的测试文件中生成断言代码、无效数据测试用例和参数化用例。生成的预期结果需要审查,因为看似合理的断言也可能编码错误的行为。

总结一下这篇文章: