软件中的破坏性测试是什么?

⚡ 智能摘要

破坏性测试会故意将软件应用程序推向崩溃的边缘,从而暴露出在不当使用、无效输入和不可预测的行为下,软件健壮性失效的确切位置,而这些是普通功能检查永远无法触及的。

  • ???? 核心思想: 该应用程序故意设计成会失败,以便使其故障点变得可见且可衡量。
  • 🔎 无需任何条件: 虽然事先了解规范是可选的,但它可以使测试策略更加完善。
  • 反面: 无损检测走的是一条美好的道路;而破坏性检测却从各个错误的角度攻击它。
  • 🧰 方法: 故障点分析、测试人员同行评审、业务评审和探索性运行(含运行表)。
  • 🧪 重用方法: 回归测试、接口测试、等价类划分测试、循环测试和验收测试都服务于破坏性目的。
  • 📉 诚实的界限: 覆盖范围难以保证,需要投入大量精力,而且研究结果可能难以复现。

什么是软件破坏性测试?它包含哪些方法和技术?

什么是破坏性测试?

破坏性测试 破坏性测试是一种用于查找软件程序故障点的软件测试方法。该方法故意使应用程序出现故障,以便检查其健壮性并识别故障点。与验证应用程序预期功能的测试方法不同,破坏性测试会检查应用程序内部不可预测的用户行为。

破坏性测试并不需要了解原始要求。但是,了解一些原始要求确实有助于开发。ping 良好的测试策略。

下图生动地展现了这一理念——测试人员是在与产品对抗,而不是与产品合作。

破坏性测试概念:故意将应用程序推至故障点

为什么要进行破坏性试验?

  • 了解软件在不当使用情况下可预测的行为很有帮助。
  • 它有助于检查软件产品的稳健性。
  • 它能发现普通用户永远不会触发,但在生产过程中后期才会出现的罕见缺陷。

破坏性测试与非破坏性测试

这两种方法是互补的,而不是竞争的。 非破坏性测试 ——也称为正向测试或正常路径测试——会正确地与软件交互,并且不会破坏构建版本。破坏性测试则恰恰相反:它会输入无效数据和错误的序列,直到出现问题为止。

方面 破坏性测试 非破坏性测试
意图 强制应用程序失败 确认应用程序按预期运行。
输入已使用 无效的、格式错误的、超出范围的、顺序错误的 有效数据在预期范围内
问题已解答 它在哪里以及如何断裂? 它能达到预期效果吗?
需求知识 可选 Essential
典型成本 更高层次——探索性和开放式 较低——脚本化且可重复
成果 故障点、范围限制、恢复行为 是否符合规范

破坏性试验中要检查哪些内容?

破坏性测试会考察行为边界的两端:

  • 正确的软件行为
  • 软件行为不当
  • 使用不当
  • 输入数据不正确
  • 正确的输出数据

整个过程中必须满足两个条件:

  • 该软件绝不会处理或接受无效的输入数据。
  • 无论输入数据的有效性或正确性如何,软件都应该始终产生正确的输出数据。

如何进行破坏性测试?

破坏性测试涉及许多活动,例如设计一组测试脚本、执行这些脚本、提出错误、修复错误以及在迭代结束时向利益相关者提供通过或失败的指标。

运行它的方法有很多种。以下是一些示例。

  • 故障点分析方法: 对系统进行全面演练,评估各个环节可能出现的问题。来自……的帮助 业务分析师 可以采用这种策略。
  • 测试人员同行评审: 拿你的 测试用例 由对系统或功能不太熟悉的另一位测试人员进行分析或审核。
  • 测试用例的业务审查: 最终用户或专家经常会想到测试人员忽略的有效场景,因为测试人员的注意力集中在已说明的需求上。
  • 使用运行表进行探索性测试: 探索性测试 使用运行表记录测试内容,可以重复测试,并控制测试覆盖率。
  • 使用其他信息来源: 请其他人对软件产品进行故障排查,并分析他们发现的问题。

破坏性测试示例

以银行应用程序的登录和个人资料页面为例。破坏性通行证可以通过以下情况实现:

  • 将一个 5,000 个字符的字符串粘贴到限制为 50 个字符的字段中,并确认该字段拒绝该字符串而不是默默地截断它。
  • 请将字母、符号和负值输入到数值金额字段中。
  • 打破预期顺序——不完成上一步,直接打开付款确认页面。
  • 快速连续多次按下提交键,查看是否创建了重复记录。
  • 在事务处理过程中断开网络连接,并检查应用程序是否能完全恢复,还是会留下部分记录。

每个案例都有明确的预期结果:清晰的验证信息、无数据损坏、无未处理的异常。任何其他情况都属于故障点,应作为缺陷提交。

破坏性测试方法

在软件工程中,以下方法用于实现破坏性测试目标:

破坏性检测技术

以下技术可以稍作修改后使用:

当目标是提高鲁棒性时,值得添加的邻近技术包括: 负面测试, 压力测试, 恢复测试模糊测试.

破坏性试验的优点和缺点

在将该技术纳入版本发布计划之前,有必要明确说明其中的权衡取舍。

优势

  • Rev修复了规范驱动测试永远无法触及的故障点。
  • 设定实际范围限制,因此可以在这些限制范围内放心地操作产品。
  • 揭露产品发布很久之后才在生产过程中出现的罕见缺陷。
  • 检查在滥用情况下的耐用性、可恢复性和错误处理能力。

缺点

  • 由于其性质开放,因此无法保证或轻易衡量覆盖范围。
  • 耗时,且依赖于测试人员的经验和创造力。
  • 如果没有仔细记录所用步骤,研究结果可能难以复现。
  • 控制不当的运行可能会破坏共享的测试数据,因此需要一个隔离的环境。

常见问题

它们之间有重叠之处,但范围有所不同。 负面测试 它会检查已定义的无效输入是否符合预期的错误处理规则。破坏性测试范围更广、更具开放性,旨在查找任何导致应用程序失败的情况。

通常由经验丰富的质量保证工程师、不熟悉该模块的同事以及业务用户共同进行测试。外部视角至关重要,因为开发该功能的人员往往会按照设计的方式进行测试。

功能套件稳定后,故障会指向系统的健壮性,而不是未完成的功能。许多团队会在系统测试期间安排此步骤,并在主要版本发布前重复执行。 测试生命周期.

模型能够生成大量畸形有效载荷、边界值和异常操作序列,其数量之大,任何测试人员都无法匹敌,然后对产生的异常进行排序。基于以往缺陷数据的机器学习还能预测哪些模块需要最严格的处理。

GitHub 副驾驶 它可以快速编写输入生成器、边界情况和拆卸例程。测试人员仍然需要决定哪些故障模式至关重要,以及观察到的行为是否属于可接受的结果。

所使用的确切输入或序列、观察到的故障、日志和屏幕截图、环境以及影响的严重程度。迭代的通过或失败指标将与以下内容一起提供给利益相关者: 缺陷记录.

它绝对不能进入生产环境。必须在隔离环境中运行,并确保数据可恢复,因为故意输入无效数据或人为崩溃会导致记录不完整,清理起来成本很高。

在会话期间,使用运行表记录每个操作和输入。从干净的状态重新运行该运行表,然后将其简化为仍然会触发故障的最短序列。

总结一下这篇文章: