无损软件测试 (NDT):定义及测试策略

⚡ 智能摘要

无损测试验证应用程序在接收到有效输入时是否运行正常,因此测试人员也称之为正向测试或正常路径测试。它根据已记录的需求确认预期结果。

  • 🔘 积极向上: 每项无损检测都使用有效数据和已知要求,因此通过检测证明该功能按规定运行。
  • ☑️ 最早运行的测试: 首先检查正常流程,因为如果主流程出现故障,几乎会阻塞后续的所有其他测试。
  • 需求 trac能力: 每个测试用例都对应一个验收标准,这使得在评审中很容易对结果进行辩护。
  • 🧪 与破坏性测试相反: 破坏性测试旨在寻找设备的极限,而非破坏性测试则用于验证预期行为是否成立。
  • 🛠️ 低设置成本: 该技术无需特殊环境、损坏的数据或故障注入,因此适合工期短、预算紧张的项目。
  • 📈 已知限制: 通过所有正常路径测试并不能证明错误处理机制的有效性,因此仍然需要同时进行负面和破坏性测试。

无损软件测试 (NDT) 及其测试策略详解

什么是非破坏性软件测试?

非破坏性测试 是一种软件测试类型,涉及测试和与软件应用程序正确交互。换句话说,非破坏性软件测试 (NDT) 也可以称为积极测试或快乐路径测试。它给出预期的结果并证明软件应用程序的行为符合预期。

这个名称源自工程学,在工程学中,无损检测是指在不损坏物理部件的情况下对其进行检查。在软件领域,其理念相同:应用程序按照其设计用途进行测试,并确保其完好无损地通过测试。

计费示例: 在登录模块中输入正确的数据,并检查它是否接受凭据,以及是否导航到下一页。

下面的屏幕截图显示了登录表单,在执行测试之前,用户名字段中已输入有效值。

登录表单用作无损软件测试示例,包含有效输入

要对上述示例进行无损测试,请在登录表单中输入有效的用户名和密码。由于输入内容符合要求,因此测试结果为阳性,测试人员只需确认应用程序跳转到下一页即可。

为什么要做无损软件测试(NDT)?

无损测试回答了每个利益相关者对产品版本提出的第一个问题:该功能是否真正实现了预期目标?这就是团队运行无损测试的原因。

  • NDT 方法的主要优点是能够提高软件质量,因为在主流程中发现的缺陷能够及早得到修复。
  • 证明软件功能按照规范运行。
  • 验证性能要求是否已达到。
  • 验证最终用户的需求是否得到满足。
  • 检查一小段代码或功能是否按预期工作,并且不会破坏相关功能。
  • 为了提供可以在法庭上展示的证据 用户验收测试 验收阶段,客户希望看到的是预期行为,而不是故障模式。

何时进行无损检测(NDT)?

时机在这里比大多数技术都更加重要,因为成功路径决定了后续的一切。

  • 这是测试人员对应用程序执行的第一种测试形式,即在初始阶段进行的测试。 软件开发生命周期.
  • 当没有足够的时间进行完整的测试周期时,通常会进行无损检测,因为它仍然可以证明验收标准得到满足。
  • 它会在负面和破坏性场景出现之前运行。如果主流程中断,错误处理测试会报告噪声,而不是真正的缺陷。
  • 每次缺陷修复后都会重复此过程,这正是它与以下情况重叠的地方: 回归测试.

无损检测的测试策略

无损检测策略刻意追求简单,其精髓在于保持积极的态度,而不是依赖工具。

  • 对无损检测的态度应该是积极的。
  • 无损检测技术的目的是证明应用程序在输入有效数据时能够正常工作。
  • 进行无损检测不需要任何特殊要求或环境。
  • 无损检测的最佳实践是检查系统是否能按预期运行。

下图总结了该策略在一个测试周期中的通常组织方式。

测试周期内无损软件测试的测试策略流程

如何编写非破坏性(正面)测试用例

只有当非破坏性测试用例的输入可证明有效,且其预期结果源于需求而非测试人员的假设时,该用例才有用。以下步骤可生成此类测试用例。 测试用例.

步骤 1)选择一个验收标准。 阅读要求并将其重新表述为一个可验证的语句,例如“用户名字段接受 6 到 20 个字母数字字符”。

步骤 2)选择有效的输入数据。 选择落在允许范围内的值。 等价划分 这里有个好处——每个有效分区一个代表值通常就足够了。

步骤 3)在执行之前写出预期结果。 预期结果必须根据规范编写。如果在运行后才编写,测试结果就变成了对构建过程中发生的情况的描述。

步骤 4)保持步骤按用户顺序执行。 该顺序应与真实用户完成任务的方式相符,因为该技术的目的是确认预期的操作流程。

步骤 5)记录需求标识符。 Trac将案件追溯到其标准,可以让团队在审查期间证明其覆盖范围。

登录模块的一个示例代码如下所示。

领域 无损检测案例
需求 用户名接受 6 到 20 个字母数字字符。
测试数据 用户名 guru99tester有效的匹配密码
步骤 打开登录页面,输入凭据,然后选择“登录”。
预期结果 凭证已被接受,首页显示。
类型 积极/快乐的路径

请注意,此案例中没有任何内容试图破坏字段。输入五个字符以查看错误消息的案例是 检测结果为阴性并非非破坏性方法。

无损检测示例

下面的示例展示了在修复缺陷后,多模块应用程序中无损检测是如何进行的。

  • 一个应用程序有五个模块:登录页面、首页、用户详情页面、创建新用户和创建任务。
  • 假设登录页面存在一个漏洞:用户名字段接受的字母数字字符少于六个。这违反了设置要求,设置要求规定用户名不能少于六个字符,因此这种行为属于缺陷。
  • 该漏洞已通过常规方式报告给开发团队。 缺陷管理流程问题已修复,构建版本已发送回测试团队。
  • 测试团队不仅检查了已修复缺陷的登录页面,还测试了其他模块。在用有效数据测试所有模块的同时,他们还执行非破坏性测试,以确认整个应用程序仍然运行正常。

无损检测与破坏性检测

这两种技术经常一起教授,因为它们回答了关于同一建筑结构的相反问题。 破坏性测试 寻找软件失效的点,而无损检测则确认预期行为是否成立。

方面 非破坏性测试 破坏性测试
意图 正确使用应用程序并验证结果是否积极 提供异常或无效的输入以查找故障点
输入数据 从要求中提取的有效数据 无效、损坏或顺序错误的数据
需要的要求 是的——案例是根据验收标准编写的。 不一定;测试人员的工作不受用户故事偏见的影响。
它揭露了什么 功能方面与规范不符的缺陷 设计、稳健性和可恢复性方面的缺陷
相关技术 烟雾测试, 功能测试 猴子测试, 探索性测试

两者是互补而非替代。单独进行无损检测无法验证故障处理机制,而单独进行破坏性检测也无法证明产品能够正常工作。

无损软件测试的优势与局限性

了解一项技术在哪些情况下不再适用,与了解它的适用范围同样重要。

优势

  • 设计和执行速度快,因为测试数据直接来自规范。
  • 无需特殊环境、故障注入或损坏的数据集。
  • 生成的证据与要求一一对应,适合审计和签字确认。
  • 效果同样出色 手动测试 并按剧本进行 自动化测试这样,相同的案例就可以在回归测试套件中重复使用。
  • 能够及早、诚实地发出有关任何层级(从单元到)建筑健康状况的信号。 集成测试系统测试.

限制

  • 完整的测试结果并不能说明应用程序在处理无效输入时的行为,因此严重的错误处理缺陷可能会被忽略。
  • 测试范围取决于需求的质量。任何未明确规定的内容都不会被测试。
  • 如果在发布前只测试了“顺利”方案,可能会造成虚假的自信。
  • 它无法衡量身体的稳健性、恢复能力或压力下的表现,这些都需要更广泛的独立技术来衡量。 软件测试类型.

将无损检测视为其他所有技术赖以建立的基础,并将其纳入更广泛的流程中进行规划。 软件测试生命周期 而不是一次性活动。

常见问题

两者仅原理相同。工程无损检测是指在不损坏被检测部件的情况下对其进行检测,例如使用超声波或射线照相等方法。软件无损检测借鉴了保持被检测部件完好无损的理念,但其技术本身却是执行常规的阳性检测。

无损检测能够提供有效数据并有望取得成功。 负面测试 输入无效数据时,系统会返回可控的、信息丰富的错误信息,例如验证消息。两者都必不可少,因为一个干净的正常流程永远无法证明错误处理机制有效。

与其他任何类别相比,它们更容易实现自动化。数据稳定,预期结果由需求决定,流程也很少改变,这使得正常流程案例自然而然地成为回归测试套件的首选。

通常情况下,每个有效的等价类划分对应一个案例,此外,需求描述的每个不同的成功结果也对应一个案例。在同一个划分内添加更多有效值很少能发现新的结果,反而会降低测试套件的运行速度。

人工智能辅助工具能够读取用户故事和验收标准,并生成相应的成功路径案例和有效的测试数据。虽然节省的时间确实不少,但在案例最终被采纳之前,仍然需要人工核对每个预期结果是否符合规范。

GitHub 副驾驶 根据现有的测试文件或描述的流程,快速搭建正常流程脚本。 Rev仔细查看断言——生成的测试往往断言代码执行了什么,而不是需求要求了什么。

它们有重叠之处,但并不完全相同。 烟雾测试 这是一种对关键流程进行浅层测试,以确定构建版本是否值得测试的方法。无损测试是一种积极主动的测试方法,可以应用于任何深度,包括完整的功能覆盖。

需求覆盖率才是最诚实的指标:它指的是至少有一个正例通过的验收标准所占的比例。将其与通过率和正例/负例比率结合起来,可以揭示出那些只测试正常路径的测试套件。

总结一下这篇文章: