探索性测试 | Exploratory Testing
探索性测试是一个动态过程,其中测试设计和测试执行同时发生。它利用了测试人员的经验,在时间紧迫的情况下特别有用。
相关术语
关于探索性测试的问题?
基础知识和重要性
什么是探索性测试?
探索性测试 是 软件测试 的一种方法,强调个人测试人员的个人自由和责任,通过将测试相关的学习、测试设计、测试执行 和测试结果解释视为在整个项目中并行运行的相互支持的活动,不断优化其工作质量。 在探索性测试 中,测试人员不局限于预定义的测试用例 或脚本。相反,他们积极参与软件,根据他们对系统的见解、知识和直觉来设计和执行测试。这允许测试设计和测试执行之间更加动态和即时的反馈循环,通常会导致脚本测试可能遗漏的缺陷的发现。 测试人员利用他们的创造力、经验和批判性思维技能来探索应用程序,通常关注难以自动化或需要人工判断的领域。 探索性测试 在复杂、不确定或快速变化的环境中特别有效,在这些环境中,无法提前预测潜在问题的全部范围。 探索性测试期间的文档通常涉及笔记、屏幕截图或轻量级工具,以便在不中断测试流程的情况下快速记录结果。测试人员还可以使用基于章程的方法,例如基于会话的测试,为他们的探索提供结构和重点。 虽然探索性测试 是一个手动过程,但它可以通过处理重复任务的自动化工具进行补充,从而使测试人员能够专注于更复杂和高价值的探索。
为什么探索性测试很重要?
探索性测试 至关重要,因为它在测试过程中包含适应性和创造力,允许测试人员在测试时调查和了解有关软件的信息。与脚本化测试不同,它不会将测试人员限制在预定义的步骤中,使他们能够发现在正式测试用例 中可能不明显的问题。这种方法对于识别现实世界的使用场景和可能导致bugs 的意外用户行为特别有价值。 它还在风险评估中发挥着重要作用,因为测试人员可以根据他们的理解和经验专注于他们认为最脆弱的领域。 探索性测试 通常用于补充自动化测试,探索难以自动化或最近已更改且可能尚未被自动化覆盖的领域。 此外,它还有助于通过模拟实际用户交互来增强测试覆盖率和验证用户体验。测试人员可以快速适应新的见解并迭代地完善他们的方法,这在快速发生变化的敏捷和 DevOps 环境中特别有益。 总之,探索性测试 因其灵活性、洞察深度以及找到其他方法可能错过的bugs的能力而非常重要。它支持对产品的全面理解,并有助于确保软件不仅满足技术要求,而且还提供高质量的用户体验。
探索性测试与脚本测试有何不同?
探索性测试 和脚本化测试与软件测试 是根本不同的方法。 脚本化测试涉及预定义的测试用例以及特定步骤和预期结果。这些测试是提前计划的,并通常在 测试管理 工具中精确地按照编写的内容执行。 相比之下,探索性测试 是一种非正式的、无脚本的方法,测试人员可以动态探索软件,即时设计和执行测试。它依靠测试人员的创造力、经验和直觉来指导测试过程。使用这种方法的测试人员并不局限于预先编写的测试脚本,而是积极地与软件互动以发现脚本测试可能遗漏的问题。 虽然脚本化测试提供了一组结构化且可重复的测试,但 探索性测试 的适应性更强,可用于调查难以编写脚本或行为未知或复杂的区域。它允许测试人员实时响应软件,探索测试计划阶段可能未考虑的不同场景和用户路径。 探索性测试 通常与脚本测试结合使用,在结构化验证 和创造性发现之间提供平衡。当需求发生变化或对系统行为的了解有限时,它在早期开发阶段特别有价值。另一方面,脚本测试通常用于 回归测试 并验证稳定产品中已知的预期行为。
探索性测试的主要好处是什么?
探索性测试 提供了几个主要优点:
- 无脚本灵活性:它允许测试人员实时调整他们的方法,在没有预定义脚本的情况下探索应用程序,这可以发现脚本测试可能遗漏的问题。
- 增强学习:测试人员在探索时可以更深入地了解产品的行为和潜在的弱点。
- 快速反馈:它可以立即洞察应用程序的功能和用户体验,这对于快速开发周期至关重要。
- 创造力和直觉:测试人员利用他们的创造力和直觉来研究软件,通常会发现微妙、复杂的错误。
- 全面覆盖:通过不限于预定义的测试用例,探索性测试可以覆盖更多场景,包括边缘情况。
- 效率:在某些情况下它可以更有效,因为它不需要大量的准备或详细的测试脚本。
- 以用户为中心:测试人员可以模拟现实世界的用户行为和场景,这有助于识别可用性问题。
- 协作:鼓励测试人员、开发人员和其他利益相关者之间的协作,因为可以即时共享和讨论结果。 探索性测试 通过填补结构化测试可能无法解决的空白来补充自动化和其他形式的测试,为质量保证 提供动态且富有洞察力的方法。
探索性测试有哪些局限性?
探索性测试 虽然灵活且适应性强,但也有一些限制:
- 缺乏结构:如果没有预定义的测试用例,就很难确保覆盖所有功能和场景。
- 再现性问题:由于探索性测试没有编写脚本,如果不保留详细的注释,再现错误可能会很困难。
- 依赖技能:探索性测试的有效性在很大程度上依赖于测试人员的经验、直觉和知识。
- 时间限制:这可能非常耗时,并且可能不太适合预计很快会得到特定结果的紧张时间表。
- 测量困难:与脚本测试相比,量化进度和覆盖范围更困难,因此很难衡量有效性。
- 主观性:测试人员的偏见和观点可能会影响测试过程,可能会忽略某些缺陷。
- 不适用于所有测试类型:探索性测试不太适合需要严格遵守或验证正式规范的情况。
- 有限的文档:虽然可以创建文档,但它通常不如脚本测试详细,这可能会影响知识转移和未来的测试周期。 尽管存在这些限制,探索性测试 仍然是测试人员工具包中的一种有价值的方法,特别是在与其他测试方法结合使用以平衡其弱点时。
技术和策略
探索性测试中使用了哪些常见技术?
探索性测试 经常采用各种技术来发现脚本测试可能遗漏的问题。以下是一些常用技术:
- 章程创建:定义测试会话的范围和目标以保持焦点。
- 笔记:记录测试过程中的观察结果、问题、想法和错误。
- 思维导图:使用可视化图表来表示测试区域、场景和依赖关系。
- 配对测试 :与其他测试人员或团队成员合作以获得不同的观点。
- 时间盒:分配固定的探索时间段以管理工作量并保持强度。
- 错误猜测 :利用经验来预测可能出现错误的位置并测试这些区域。
- 游览测试:按照应用程序的隐喻游览来探索不同的方面或功能。
- 基于清单的测试:使用要检查的项目列表或在探索期间要执行的任务。
- 场景测试:创建典型用例可能无法涵盖的复杂用户场景。
- 变异性测试:更改输入、环境和配置以测试不同条件下的应用程序行为。 这些技术并不详尽,但为测试人员系统地探索和发现问题提供了一个框架。它们可以根据测试会话和被测应用程序的上下文进行调整或组合。
您如何计划和设计探索性测试会话?
要有效地规划和设计 探索性测试 会话,请按照以下步骤操作:
- 定义目标:清楚地概述您想要实现的目标。这可以是了解新功能、查找关键bugs 或探索具有高风险变化的领域。
- 创建章程:起草指导探索的会议章程。它应包括会议的范围、目标和需要关注的任何具体领域。
- 选择工具:选择有助于记笔记、屏幕捕获或记录的工具,以帮助记录结果。
- 分配时间:决定会话的持续时间。简短、有时间限制的会议有助于保持注意力和管理工作量。
- 选择技术:根据目标,选择适当的 探索性测试 技术,例如游览、角色或场景测试。
- 识别资源:确定需要哪些资源,例如对特定环境、数据集或系统配置的访问权限。
- 设置环境:确保测试环境已准备就绪并尽可能反映生产环境。
- 决定指标:确定将使用哪些指标来评估会话的成功,例如找到的 bugs 数量或覆盖的区域。
- 审查风险:评估可能影响会议的任何潜在风险或限制,并计划如何缓解这些风险或限制。
- 进行试运行:如果可能,进行快速测试运行以确保一切设置正确并根据需要进行调整。
- 向团队介绍:如果涉及多名测试人员,请向他们介绍章程、目标和方法,以确保齐心协力。 通过执行这些步骤,您可以确保您的 探索性测试 会议结构良好且重点突出,从而得出更有洞察力和更有价值的发现。
什么是基于会话的测试?
基于会话的测试 是 探索性测试 的结构化方法,其中测试活动被组织成不间断的、有时间限制的会话。每个会议都集中于被测软件的特定领域或方面,具有明确的目标和特许任务来指导测试人员的探索。 测试人员使用会话表或日志来记录他们的活动,包括测试设计和执行、bugs 发现的以及遇到的问题。该文档对于问责制以及衡量测试工作的进度和有效性至关重要。 会话的持续时间通常为 60 到 120 分钟,使测试人员能够保持注意力集中,同时还提供用于审查和分析结果的可管理框架。每次会议结束后,测试人员通常会与同事或利益相关者进行汇报,以讨论结果、收集见解并调整后续会议的策略。 虽然基于会话的测试本质上是手动的,但它可以通过自动化工具来补充,以处理重复性任务,环境搭建测试环境,或验证特定场景,从而使测试人员能够专注于更复杂和创造性的探索。 从本质上讲,基于会话的测试 将探索性测试 的灵活性与脚本化测试的责任结合起来,使其成为敏捷和快速开发环境中的一种强大方法,在这种环境中,快速反馈和适应性至关重要。它使测试人员能够系统地发现通过传统测试方法可能不易检测到的问题,同时仍然提供结构和可追溯性。
您如何记录探索性测试中的发现?
在 探索性测试 中记录结果对于分享见解和为未来的测试工作提供信息至关重要。使用以下方法:
-
记笔记:记录观察结果、问题、想法和错误。记事本应用程序或协作文档等工具可能很有效。
-
屏幕截图和屏幕录制:视觉证据对于说明问题并与团队讨论非常有用。
-
汇报会议:与团队成员讨论调查结果,收集不同的观点并记录集体见解。
-
测试章程:用调查结果更新章程,以跟踪探索和发现的内容。
-
Bug 报告:针对发现的任何缺陷编写清晰、简洁的错误报告,包括重现步骤、预期结果与实际结果以及环境详细信息。
-
思维导图:可视化测试的领域和结果,以快速概览并确定覆盖范围差距。
-
测试日志 :随着测试的进行,维护操作、观察和想法的日志。这可以像带时间戳的文本日志或更结构化的文档一样简单。 请记住优先记录关键bugs 和可能影响产品质量的有趣见解的文档。保持文档的简洁和重点,避免无助于理解测试结果的不必要的细节。
-
记笔记:记录观察结果、问题、想法和错误。记事本应用程序或协作文档等工具可能很有效。
-
屏幕截图和屏幕录制:视觉证据对于说明问题并与团队讨论非常有用。
-
汇报会议:与团队成员讨论调查结果,收集不同的观点并记录集体见解。
-
测试章程:用调查结果更新章程,以跟踪探索和发现的内容。
-
Bug 报告:针对发现的任何缺陷编写清晰、简洁的错误报告,包括重现步骤、预期结果与实际结果以及环境详细信息。
-
思维导图:可视化测试的领域和结果,以快速概览并确定覆盖范围差距。
-
测试日志 :随着测试的进展,维护操作、观察和想法的日志。这可以像带时间戳的文本日志或更结构化的文档一样简单。
启发式方法在探索性测试中的作用是什么?
启发式方法通过实时指导测试人员完成发现、学习和测试设计过程,在 探索性测试 中发挥着至关重要的作用。它们是经验法则,可帮助测试人员在测试过程中快速做出决策和判断。启发式可以告知探索性测试的各个方面,例如:
-
识别感兴趣的领域:测试人员使用启发式方法根据风险、复杂性或最近的变化来决定关注哪些特性或功能。
-
创建测试场景:启发式有助于生成可能发现缺陷的相关且多样化的测试场景。
-
确定测试的优先级:它们帮助确定测试的执行顺序,通常首先关注最关键或最脆弱的部分。
-
识别问题:测试人员应用启发式方法来识别某些内容何时未按预期工作,即使没有明确的要求或脚本进行比较。 探索性测试 中的常见启发法包括:
-
错误猜测 :利用经验来猜测错误可能出现在哪里。
-
边界分析:测试输入范围的边缘。
-
一致性启发式:检查应用程序在类似情况下的行为是否一致。 启发式方法不是固定的规则,而是适应性强的指南,随着测试人员对被测应用程序的深入了解,可以扩展或修改这些指南。它们使测试人员能够更加有效和高效地开展 探索性测试 工作。
-
识别感兴趣的领域:测试人员使用启发式方法根据风险、复杂性或最近的变化来决定关注哪些特性或功能。
-
创建测试场景:启发式有助于生成可能发现缺陷的相关且多样化的测试场景。
-
确定测试的优先级:它们帮助确定测试的执行顺序,通常首先关注最关键或最脆弱的部分。
-
识别问题:测试人员应用启发式方法来识别某些内容何时未按预期工作,即使没有明确的要求或脚本进行比较。
-
错误猜测 :利用经验来猜测错误可能出现在哪里。
-
边界分析:测试输入范围的边缘。
-
一致性启发式:检查应用程序在类似情况下的行为是否一致。
工具和自动化
探索性测试可以自动化吗?
探索性测试 本质上是一个手动过程,涉及测试人员的创造力、经验和直觉。然而,自动化可以发挥支持作用。虽然您无法完全自动化探索方法,但您可以使用自动化来处理重复性任务,从而使测试人员能够专注于更复杂的探索。例如,自动化脚本可以设置**测试环境或创建数据集**。 机器学习和人工智能正在提升探索性测试 中自动化支持的潜力。人工智能可以分析应用程序数据,以建议可能需要更多探索的领域,或识别人类测试人员可能无法立即看到的模式。由自动化测试生成的**测试执行 日志和热图** 等工具可以引导测试人员了解应用程序中可能容易出现缺陷的区域。 自动化工具还可以帮助跟踪和记录 探索性测试 流程。例如,屏幕录制和日志记录工具可以捕获测试人员的操作,这对于重现 bugs 或供将来参考非常有用。 总之,虽然探索性测试 的核心仍然是人类驱动的流程,但自动化可以通过处理日常任务并通过数据分析提供见解来增强它,从而提高探索性测试 会话的效率和有效性。
有哪些工具可以帮助探索性测试?
探索性测试 工具增强了测试人员发现、记录和分析其结果的能力。以下是一些可以帮助完成此过程的工具:
- 会话录制工具:Camtasia 或 Loom 等工具允许测试人员录制他们的测试会话,捕获屏幕活动和音频评论以供以后查看和分析。
- 笔记应用程序:Evernote、OneNote 或 Simplenote 等应用程序可帮助测试人员在测试过程中快速记下观察结果和想法。
- 思维导图软件:XMind 或 MindMeister 等工具使测试人员能够直观地组织他们的想法并测试想法,从而促进探索性测试 的结构化方法。
- Bug 跟踪系统:jira、Bugzilla 或 Trello 等系统可用于记录 探索性测试 期间发现的问题,确保有效跟踪和管理它们。
- 测试管理 工具:TestRail 或 qTest 等工具提供用于管理 探索性测试 会话的功能,包括时间跟踪、会话章程和报告。
- 协作平台:Slack 或 Microsoft Teams 等平台允许团队成员之间进行实时沟通和共享发现。
- 屏幕注释工具:Skitch 或 LightShot 等工具提供了捕获和注释屏幕截图的简单方法,可以将其附加到 bug 报告或与团队共享。
- 代理工具:Fiddler 或 Charles Proxy 等工具可帮助测试人员监视和操作 HTTP 流量,这对于测试 Web 应用程序非常有用。
- 启发式备忘单:诸如 Elisabeth Hendrickson 的测试启发式备忘单之类的参考材料可快速提醒您探索的领域或潜在的测试想法。 这些工具支持 探索性测试 的动态和无脚本性质,使测试人员能够有效地捕获他们的见解并传达他们的发现。
自动化如何支持探索性测试?
自动化可以通过处理重复性任务来支持探索性测试,使测试人员能够专注于更复杂、更具创造性的探索。自动化脚本可以设置测试环境并创建数据,从而简化探索性会话的初始步骤。工具可以监视系统行为并记录详细的执行数据,测试人员可以分析这些数据以发现微妙的问题。 自动测试预言机 可用于检测与预期行为的偏差,无需预定义测试用例。这些预言机可以基于在正常应用程序行为上训练的机器学习模型,标记异常以供进一步的人类调查。 人工智能驱动的工具可以实时提供帮助,根据历史 bug 数据或代码更改建议可能需要更多探索的应用程序区域。它们还可以根据探索过程中应用程序的状态动态地帮助生成测试想法或启发式。 此外,自动化可以通过跟踪时间、任务和用户操作来支持**基于会话的测试**,这有助于有效地保持注意力和管理探索性测试工作。 总之,虽然自动化并不能取代 探索性测试 的人为因素,但它通过接管日常任务并提供智能见解来增强它,使测试人员能够以更具战略性和更明智的方法更深入地研究应用程序。
人工智能在探索性测试中的作用是什么?
人工智能通过实现更加智能和适应性更强的测试场景,在增强 探索性测试 方面发挥着关键作用。它可以实时分析应用程序数据,以识别人类测试人员可能无法立即发现的模式、异常和风险区域。这种分析可以引导测试人员进入需要更深入探索的领域。 人工智能驱动的工具还可以根据用户行为和应用程序使用情况协助生成测试用例,从而创建更加动态和以用户为中心的测试方法。这些工具可以从过去的探索中学习,以改进未来的测试会话,从而使探索过程随着时间的推移变得更加高效。 此外,人工智能可以根据其潜在影响帮助优先考虑bugs,从而简化探索性测试期间的缺陷管理流程。通过预测 严重性 和 bug 的可能性,AI 使测试人员能够首先专注于解决最关键的问题。 在文档方面,人工智能可以自动捕获并记录详细的会话活动,将测试人员从手动记笔记中解放出来,让他们专注于探索本身。这可以包括屏幕截图、日志和用户操作,这些对于重现和解决缺陷至关重要。 最后,人工智能可以通过提供探索性会话的见解来支持持续学习,这些见解可以反馈到测试自动化套件中,从而不断完善自动化和探索性测试策略。 总之,人工智能通过提供数据驱动的见解、自动化重复任务以及提高测试过程的整体效率和有效性来增强探索性测试。
实际应用
您能否提供探索性测试何时特别有用的示例?
探索性测试 在以下场景中特别有用:
- 新功能:当引入新功能时,探索性测试可以帮助揭示它在不同条件下的行为以及可能无法预料的交互。
- 复杂系统:在具有高复杂性和相互依赖性的系统中,探索性测试允许测试人员以非线性方式探测系统,这可以揭示脚本测试可能遗漏的问题。
- 用户体验:为了确保产品符合用户期望和流程,探索性测试可以模拟现实世界的使用情况并发现可用性问题。
- 发布后:产品发布后,可以使用探索性测试在实际环境中验证产品,而实际环境中的条件通常与测试环境不同。
- 缺乏文档:当文档或需求不足时,探索性测试使测试人员能够在没有预定义脚本的情况下调查和理解应用程序的行为。
- 风险区域:对于被视为高风险或有问题历史的应用程序区域,探索性测试可以以脚本测试可能无法覆盖的方式对这些区域进行压力测试。
- 敏捷开发 :在变化频繁且快速的敏捷环境中,探索性测试可以快速适应不断发展的产品,而不需要大量的测试用例维护。
- 学习工具:它作为测试人员的学习工具,帮助他们更加熟悉应用程序及其潜在的弱点,为创建更有效的脚本化测试提供信息。
如何将探索性测试集成到敏捷或 DevOps 环境中?
将 探索性测试 集成到 Agile 或 DevOps 环境中,通过注入创造力和以用户为中心的视角来补充结构化测试。在敏捷中,在每个冲刺期间纳入探索性会议。为测试人员分配时间来探索开发后但冲刺评审之前的功能。这确保了即时反馈和快速迭代。 在 DevOps 中,探索性测试 适合持续测试阶段。它可以与 CI/CD 管道中的自动化测试一起进行,以发现自动化可能遗漏的问题。鼓励开发人员和运营团队参与,培育质量和共同责任的文化。 配对测试 是有效的,将测试人员与开发人员或其他测试人员配对以结合不同的观点。使用限时会议来保持专注和效率。 章程创建有助于定义范围和目标,而不限制探索性。 利用自动化工具来处理重复性任务,使测试人员能够专注于复杂的场景。自动化测试结果可以指导探索性工作,突出需要更深入研究的领域。 使用轻量级文档(例如带注释的屏幕截图或思维导图)跟踪探索性发现,并将其集成到问题跟踪系统中。在站立会议或回顾会上分享见解,为未来测试用例 和自动化策略提供信息。 请记住,敏捷和 DevOps 中的 探索性测试 不是一项独立的活动,而是一种补充方法,通过在快节奏的开发周期中提供人类见解和快速反馈来增强整体测试策略。
实施探索性测试面临哪些现实挑战?
实施探索性测试 的现实挑战包括:
- 技能依赖性:成功在很大程度上依赖于测试人员的技能和经验,而团队成员之间的技能和经验可能存在很大差异。
- 时间管理:如果没有结构化脚本,测试人员可能很难有效地管理时间,可能会忽略重要的领域。
- 文档困难:捕捉探索性会议的细微差别具有挑战性,使得重现问题或分享发现变得困难。
- 衡量有效性:量化探索性测试的影响和覆盖范围很困难,这使得向利益相关者展示价值的工作变得更加复杂。
- 与其他测试集成:在更广泛的测试策略(包括自动和手动脚本测试)中调整探索性测试需要仔细协调。
- 一致性:由于该方法的临时性质,在不同会话和测试人员之间实现一致的测试结果可能会出现问题。
- 资源分配:决定为探索性测试与其他测试方法分配多少时间和资源可能是一个复杂的决定。
- 工具兼容性:并非所有工具都支持探索性测试的动态和无脚本性质,这可能会限制利用某些技术的能力。
- 培训需求:测试人员可能需要额外的培训来培养有效探索性测试所需的批判性思维和快速决策技能。 解决这些挑战通常需要结合熟练的测试人员培训、清晰的探索性测试 章程以及促进文档和报告的集成工具。
如何使用探索性测试来改善用户体验?
探索性测试 可以通过允许测试人员模拟真实的用户行为和交互来增强用户体验 (UX)。与脚本化测试不同,探索性测试 不限于预定义的测试用例,使测试人员能够识别通过标准测试场景 可能不明显的问题。 通过参与探索性测试,测试人员可以发现脚本测试可能会忽略的可用性问题,例如令人困惑的导航或复杂的工作流程。这种方法鼓励以用户为中心的视角,关注用户旅程的直观性和满意度。 测试人员可以利用他们的创造力和直觉来尝试不同的使用模式,包括边缘情况,以确保软件强大且用户友好。这可能会导致发现意外的bugs或可以显着改善用户体验的增强功能。 此外,探索性测试 可用于通过确保软件满足用户的实际需求和期望来验证用户故事。测试人员可以向开发团队提供有价值的反馈,这些反馈可用于在产品发布之前完善 UI/UX 元素。 总之,探索性测试 通过提供灵活的测试方法,强调真实世界的使用和用户满意度,为更好的用户体验做出了贡献。它通过为测试过程带来人性化来补充自动化和脚本化测试,这对于创建无缝的用户体验至关重要。