什么是动态测试?类型、技术和示例

⚡ 智能摘要

动态测试执行应用程序并观察运行代码在真实输入下的行为,以便测试人员能够验证功能、性能和稳定性,而这些是任何文档审查都无法揭示的。

  • 🎯 目的: 验证实际运行时行为,而不是描述该行为的文档。
  • 🔀 两个分支: 白盒检查代码,黑盒检查行为。
  • 🧱 四个级别: 单元测试、集成测试、系统测试和验收测试都会执行代码。
  • ⚙️ 无法使用: 性能、恢复、兼容性、安全性和可用性检查均在此运行。
  • 🔄 过程: 策略制定、测试设计、环境搭建、执行和缺陷报告。
  • ???? 权衡: 更深入的缺陷检测,但需要付出时间、环境和成本方面的代价。

动态测试类型、技术和示例

什么是动态测试?

动态测试 动态测试是一种用于测试软件代码动态行为的软件测试方法。动态测试的主要目的是检验软件在动态变量(即非恒定变量)存在时的行为,并找出软件运行时环境中的薄弱环节。为了测试动态行为,必须执行代码。

测试是 验证和确认验证和确认都需要进行才能完成测试。验证是通过静态测试完成的,静态测试会审查需求、设计文档和代码,但不运行它们。确认是通过动态测试完成的,动态测试会运行构建版本,并将应用程序的实际运行结果与预期运行结果进行比较。

下表使两者区别一目了然。

方面 静态测试(验证) 动态测试(验证)
Code 执行 没有
典型活动 Rev视图、巡视、检查、静态分析 在所有测试级别执行测试用例
问题已解答 我们制造的产品正确吗? 我们制造的产品是否正确?
发现缺陷 模糊的需求、违反编码规范、无用代码 输出错误、内存泄漏、时序错误、积分失败
开始 一旦文物存在 一旦存在可执行构建版本
修复的相对成本 较低,因为缺陷能更早被发现。 较高,因为缺陷出现得较晚。

动态测试示例

以下简短的示例展示了动态测试在实践中的运行方式。

假设正在测试一个登录页面。它有两个字段:用户名和密码,用户名仅限字母数字字符。

当用户输入用户名时,“Guru99”,系统会接受。当用户输入“Guru当输入“99@123”时,应用程序会抛出错误信息。这表明代码会根据用户输入动态运行。

因此,动态测试意味着使用实际系统,提供输入,并将应用程序的实际行为与预期行为进行比较——换句话说,就是使用系统来查找错误。

因此,动态测试是指在不同的环境下,像最终用户一样验证软件应用程序,以构建正确的软件的过程。

动态测试起什么作用?

动态测试的主要目的是确保软件在安装期间和安装后都能正常运行,从而交付稳定且无重大缺陷的应用程序。任何软件都不可能完全没有错误,测试可以发现缺陷,但永远无法完全消除缺陷。

动态测试还可以确保软件的一致性,正如本例所示。

银行应用程序包含多个屏幕,例如“我的账户”、“资金转账”和“银行转账”。 Bill 付款。它们都包含金额字段。

假设“我的账户”字段显示金额为 25,000 美元,“资金转账”也显示 25,000 美元,并且 Bill 支付界面显示金额为 25000 美元。金额相同,但显示方式不同,这导致软件显示不一致。

一致性不仅限于功能性,它还涵盖性能、可用​​性和兼容性等标准,这就是为什么动态测试如此重要的原因。

动态测试的类型

动态测试分为两类。

  • 白色 Box 测试与验证
  • 黑色 Box 测试与验证

下图将这两个类别与其下属的测试级别对应起来。

动态测试分为白盒测试和黑盒测试,黑盒测试又分为功能测试和非功能测试。

下面将对每种类型及其预期用途进行描述。

白色 Box 测试与验证 白盒测试是一种软件测试方法,测试人员了解系统的内部结构和设计。其主要目的是根据代码检查系统的性能。白盒测试主要由开发人员或具备编程知识的白盒测试人员执行。

黑色 Box 测试与验证 ——一种测试方法,测试人员对系统的内部结构、代码和设计一无所知。其主要目的是验证被测系统的功能。这种测试需要执行完整的测试套件,主要由测试人员执行,并且不需要任何编程知识。

黑盒测试又可分为两种类型。

  • 功能测试
  • 非功能测试

功能测试

功能测试 执行此操作是为了验证所有已开发的功能是否符合功能规范。它通过执行功能测试来完成。 测试用例 由质量保证团队编写。在此阶段,系统测试通过提供输入、验证输出以及将实际结果与预期结果进行比较来进行。

功能测试有不同的级别,其中最重要的有以下四个级别。

  • 单元测试 单元是指一小段可测试的代码。单元测试是对软件的单个单元进行的,由开发人员执行。
  • 整合测试 — 在单元测试之后执行,将各个可测试单元组合起来。它可以由开发人员或测试人员执行。
  • 系统测试 — 执行此操作以确保系统运行符合要求。通常情况下,当整个系统准备就绪,并将构建版本发布给质量保证团队后,由测试人员执行此操作。
  • 验收测试 — 用于验证系统是否满足业务需求并已准备好使用或部署。通常由最终用户执行。

非功能测试

非功能测试 非功能性测试是一种不关注功能方面,而是侧重于系统非功能属性(例如内存泄漏、性能或鲁棒性)的测试技术。非功能性测试贯穿所有测试级别。

非功能性测试技术有很多,其中最重要的有以下五种。

  • 性能测试 — 检查系统在所需网络负载下,响应时间是否符合要求。
  • 恢复测试 — 验证系统从崩溃和硬件故障中恢复的能力。
  • 兼容性测试 — 验证系统在不同环境下的运行情况。
  • 安全测试 — 验证应用程序的稳健性,确保只有授权用户和角色才能访问系统。
  • 可用性测试 — 验证最终用户对系统的可用性,以及这些用户对系统的舒适度。

动态测试技术

类型确定之后,下一个问题是如何实际运行动态测试周期。

动态测试技术 STLC 动态测试包括测试需求分析、测试计划、测试用例设计与实现、测试环境搭建、测试用例执行、缺陷报告以及最终的测试收尾等任务。动态测试中的每个任务都依赖于前一个任务的完成。

在软件测试生命周期(STLC)中,实际的动态测试过程始于测试用例设计。下图展示了各项活动的顺序,每项活动后都将进行详细描述。

从测试设计到执行再到缺陷报告的动态测试流程

在进入动态测试流程之前,必须先确定要遵循的动态测试策略。

测试策略应主要关注可用资源和时间安排。基于这两个因素,测试目标、测试范围、测试阶段或周期、测试环境类型、可能面临的假设或挑战以及风险等都需要记录在案。

一旦策略确定并获得管理层的认可,实际的测试用例设计过程就开始了。

测试设计与实现

在此阶段,团队需要确定以下内容。

  • 要测试的功能
  • 测试条件由此衍生而来。
  • 从测试条件中得出的覆盖项目
  • 从覆盖范围项中导出的测试用例

黑盒子 测试设计技术 例如等价类划分、边界值分析、 决策表测试状态转换测试 它们是将测试条件转化为一组具体的可执行用例的过程。

测试环境设置

测试环境 测试环境应始终与生产环境保持一致。在此阶段,构建过程将完成,测试机器也将进行管理和配置。

测试执行

在此阶段,测试用例将实际执行,无论是手动执行还是通过其他方式执行。 自动化并将实际结果与预期结果进行比较记录。

已捕获错误报告

根据执行结果,如果预期结果与实际结果不一致,则必须将测试用例标记为失败,并在系统中记录错误。 缺陷管理 的过程。

动态测试的优点

  • 动态测试可以发现那些被认为太难或太复杂而无法发现的缺陷,而静态分析则完全无法涵盖这些缺陷。
  • 该软件实现了端到端的执行,从而提高了产品和项目的质量。
  • 动态测试是检测运行系统中安全威胁的重要手段。
  • 运行时才会出现的故障,例如内存泄漏、计时问题和集成失败,只会在这里出现,不会在其他任何地方出现。

动态测试的缺点

  • 动态测试很耗时,因为执行应用程序或代码需要大量资源。
  • 因为它没有在软件生命周期的早期阶段启动,所以会增加项目的成本,而且在后期阶段修复的问题成本更高。
  • 类似生产环境和真实的测试数据是先决条件,而这两者都需要付出努力来构建和维护。

常见问题

开发人员负责白盒测试部分,包括单元测试和组件测试。QA 测试人员负责黑盒测试部分,从系统测试开始。最终用户通过验收测试完成整个测试流程。

模型读取需求和现有案例,然后提出边界值、无效输入和状态序列,而这些通常是人工待办事项列表会忽略的。测试人员仍然会在执行前确认每个预期结果。

是的。断言框架、页面对象和测试夹具的设置都是重复性代码,助手可以很好地处理这些工作。至于什么才算正确的行为,仍然需要根据需求进行人为判断。

单元框架,例如 JUnit, TestNG 以及 pytest,还有 UI 和 API 运行器,例如: Selenium, Cypress 和 Postman加载诸如以下工具: JMeter 涵盖非功能性方面 自动化.

白盒测试报告涵盖了测试用例的语句覆盖率、分支覆盖率和路径覆盖率。黑盒测试报告涵盖了需求和测试条件覆盖率。但仅凭这两项数据都无法证明该版本经过了充分的测试。

不。动态测试指的是执行代码,无论由谁或什么驱动。脚本化的测试则是一种脚本化的测试方式。 手册 运行测试和自动化回归测试套件都是动态测试。

是的。动态应用程序安全测试会从外部探测正在运行的应用程序,就像黑盒测试一样。 安全性测试 确实如此,并且会报告仅在运行时出现的漏洞。

它是其中的一个支柱。单元测试和 API 测试套件会审查每一次提交,而更长的 回归 性能测试每晚针对已部署的版本执行。

总结一下这篇文章: