探索性测试是一种软件测试风格,而不是一种具体的软件测试技术。探索性测试强调依据当前待测项目实际情况,选择合适的测试技术,而不局限于特定的测试技术。
测试人员探索软件、并尝试不同的场景、输入和交互,而不使用预先编写的测试用例以识别缺陷和问题。在探索性测试中,目标是发现尽可能多的缺陷,并向开发团队提供有价值的反馈。
不管花费多少时间使用严格的手动和自动化测试脚本进行测试,缺陷仍然会存在每个版本(测试是不可能被穷尽的)。
探索性测试没有测试人员必须遵循的一组严格的实践,而是为测试人员提供了完全的灵活性来探索产品或服务,并随着时间的推移对其进行改进。
什么是探索性测试?
探索性测试是一种动态测试方法,它在时间限制的测试阶段利用测试人员的专业知识和结构化方法。它涉及到并发的测试用例设计和执行,允许测试人员积极地探索在测试中的应用程序或系统,以寻找潜在的缺陷和漏洞。
在这里,测试人员的工作不是基于先前编写的测试用例。他们盲目地测试系统,寻找消费者在没有明确目标或方向的情况下访问网站或应用程序时可能遇到的缺陷。
从本质上讲,探索性测试试图复制最终用户的个人自由和偏好。这一切都是关于学习、研究和好奇。在现代的方法中,测试人员主动利用程序来衡量它提供的用户体验水平。
探索性测试需要最少的计划。测试人员不断地选择他们的下一个行动方案。这完全取决于测试人员的思维方式。
当涉及到识别正式测试可能遗漏的更细微的缺陷时,这种测试方法有时会更有帮助。
什么时候需要探索性测试?
在软件开发中,探索性测试通常发生在单元或集成级别。在这些活动中,测试人员确定在开发过程的每个步骤中可用的设施。它通过输入各种数据或命令并观察或检查输出或缺陷来测试它们。由此得出的观察结果可能建议进行额外的测试。因为测试人员可以控制选择测试的内容以及何时停止测试(称为“验收标准”),探索性测试技术往往比脚本化技术更省力。
探索性测试也可以在系统或验收测试期间执行,如果还有时间,或者如果发现了以前脚本化测试用例没有解决的问题。
然而,探索性测试对于以下情况是必要的:
- 它理解应用程序是如何工作的,它执行什么任务,以及接口是什么样子的。
- 查找有问题且未经过良好测试的应用程序功能。
- 强制应用程序证明其有能力执行其所设计的功能。
- 减少创建测试脚本。
- 发现新问题和新知识。
- 当早期迭代是必要的时候。
- 当新的测试人员被添加到项目中时。
- 测试团队由熟练的测试人员组成。
- 当用例足够重要时。
探索性测试的优点
与传统的测试策略相比,执行探索性测试有许多优点。尽管如此,它们主要是指这种类型的测试可以让你更全面地了解人们在你的产品/网站/应用程序等方面的体验。
- 它在开发的初始阶段提供及时的投入。
- 它有助于发现各种各样的bug。
- 探索性测试不需要脚本;因此,它可以由开发人员、测试人员、设计人员或其他项目涉众完成。
- 当所需的文档不可用或只有部分可用时,这种测试很有帮助。
- 在调查过程中发现的缺陷比通过标准测试发现的要多。
- 遇到传统测试方法通常遗漏的故障。
- 真正的用户智能和经验被用在这种人类测试方法中,这是不能自动化的。它不是在通过或失败的基础上工作,而是真正考虑应用程序的用户友好性、可用性和易用性方面。
探索性测试的阶段
Bug分类法的分类
-
- 将以前项目中的典型缺陷分类。
- 调查问题或缺陷的根本原因。
- 找到风险并为应用程序测试创建概念。
创建测试章程
测试章程应包括:
-
- 探索性测试的第一步是开发测试思路。
- 应该测试什么,以及如何在测试章程中规定。
- 应该检查什么。
- 最终用户如何使用系统是由测试章程决定的。
审查测试结果
-
- 缺陷分析。
- 研究测试结果。
- 覆盖区域分析。
汇报
-
- 汇总结果。
- 将测试章程的预期结果与实际结果进行比较。
- 确定是否需要更多的测试。
脚本测试和探索性测试的区别
脚本测试和探索性测试是软件测试中的一个小问题,特别是在敏捷开发和测试驱动开发方面。许多人坚信这两种方法之间的区别,以及哪种方法更适合寻找bug。尽管如此,脚本测试和探索性测试之间仍然存在一些关键的区别。
脚本测试 | 探索性测试 |
为了确定测试覆盖率,测试脚本可以追溯到最初的需求。 | 在这种类型的测试中,测试覆盖没有这样的可追溯性。 |
测试人员坚持测试用例的预定义顺序和步骤。 | 没有预先确定的过程或测试用例顺序。测试人员不断地测试软件。 |
根据需求,测试人员评估应用程序。 | 测试人员根据他们的知识、想象力和期望来评估应用程序。 |
反馈比较慢。 | 支持快速反馈。 |
可以在此测试类型中再现测试。 | 不能在此测试类型中复制测试。 |
设计测试用例需要大量的准备工作。 | 开发测试用例需要较少的准备工作。 |
因为测试人员只需要遵循指导方针,所以参与程度较低。 | 对于测试人员来说,这是一种难以置信的刺激,他们通常会觉得自己更多地参与到这个过程中。 |
可以获得有关已运行测试的详细信息。 | 这使得识别已运行的测试变得具有挑战性。 |
测试人员可以在测试周期后确认是否满足了所有需求。 | 没有办法验证和证明所有的条件都得到了满足,因为没有清晰和良好记录的测试用例。 |
这一战略非常强调远见和判断力。 | 这个策略的重点是灵活性和学习。 |
探索性测试的类型
探索性测试通常用于对软件究竟要做什么或在实际情况下应该如何使用存在许多未知的情况。在这些情况下,目标是探索软件,而不是遵循一个严格的计划或测试一组特定的特性。测试人员可以选择在没有任何计划的情况下执行探索性测试,或者可以根据他们在探索过程中所学到的内容调整他们的方法。
- 自由风格的探索性测试:在这种类型的探索性测试中,没有指导方针,没有覆盖帐户等。然而,当你需要快速熟悉应用程序时,当你想要检查其他测试人员的工作时,当你想要查看缺陷时,或者当你只想执行简短的冒烟测试时,这种测试是有用的。
- 基于场景的探索性测试:顾名思义,这种类型的测试基于真实世界的用户场景。测试人员在用所有相关的方法测试程序之前彻底检查每个场景。这种形式的测试的主要目标是调查潜在场景的软件,并确保增加测试覆盖率。
- 基于策略的探索性测试:探索性测试与众所周知的测试方法相结合,包括边界值分析、等价测试和基于风险的测试。对于这种类型的测试,选择有经验的或熟悉应用程序的测试人员。
敏捷探索性测试
在敏捷测试环境中,探索性测试是一项至关重要的活动,因为它使软件测试人员能够跟上敏捷软件项目的快速开发。探索性测试允许测试人员熟悉应用程序和领域。随着每一次迭代,这些知识都在增长,使测试人员更加有效。
敏捷项目受益于使用有效的探索性测试人员,他们使用这些技术来提醒项目团队注意潜在的产品缺陷。他们可以选择管理他们的临时测试,自由形式的方式或章程和测试会议。探索性测试可能会集中在高风险区域,以发现可能的问题,因为由于开发间隔短,测试本质上是风险驱动的。
探索性测试和敏捷方法是互补的技术,当它们一起使用时,可以显著增强测试过程。
探索性测试在敏捷开发中的优势
- 探索性测试中的侦察有助于发现新的领域和识别严重的问题。
- 当一个应用程序被迭代地开发时,测试人员可能会专注于测试新特性,而自动化处理回归和向后兼容性测试。
- 当需求不稳定时,探索性测试可以帮助快速测试新需求。
- 尽可能快地向开发人员提供输入。
- 更大范围的缺陷被发现。
- 由于没有预定义的测试用例,并且每个资源都提供了一个独特的视角,因此一组广泛的资源,例如开发人员、测试人员、业务分析人员和设计人员,可以执行探索性测试。
执行探索性测试所需的技能
要执行探索性测试,测试人员必须熟悉以下一些技能:
有效的时间管理技巧:
测试人员应该能够快速地完成任务并遵守最后期限。他应该了解应用程序的关键领域,并在这些领域投入更多时间。
横向思维:
当你使用创造性的、间接的方法来解决问题时,你使用的是横向思维,这通常需要更聪明地看待情况。横向思维的本质是从创造性的角度来处理一个问题。探索性测试的成功取决于这种创新和横向思维。
讲故事的技巧:
探索性测试专家必须具备的一个关键才能是传达故事的能力。找到bug后的下一步是向开发人员解释为什么修复它对项目的成功至关重要。你有责任创造一个虚构的用户,并向观众传达如果用户无法使用特定功能时的感受。
批判性思维:
推理和分析思维的能力被称为批判性思维。通过这样的思考,你可以发现各种变量之间隐藏的关系。正因为如此,批判性思维也提高了发现高风险缺陷的可能性,否则这些缺陷将无法被发现。具有批判性思维能力的人可以考虑任何决策的风险和影响,包括寻找漏洞,并随时准备提供可行的解决方案。
沟通技巧:
在开始进行探索性测试之前,你必须具备有效的沟通能力。良好的沟通技巧对于告知其他测试人员你发现的缺陷,它们对公司的重要性,以及如何给予它们适当的优先级是必要的。你将能够深入和有针对性地描述你的发现,以及良好的沟通。对于探索性测试人员来说,沟通技巧是游戏规则的改变者。
技术栈:
它不需要测试者掌握太多的技术。另一方面,探索性测试则是完全不同的事情。虽然你不需要编写代码,但你应该具备全栈开发人员的技能。你必须能够理解代码的含义,以及不同的接口级别通常是如何编码的,从用户界面开始,到数据库体系结构结束。如果缺乏适当的技术理解,就有可能错过一些严重的bug。
探索性测试的有用建议
探索性测试有很多好处,但它不是一种放之四海而皆准的方法。它可以用于许多情况和不同的目标,并且你希望根据你的需求定制探索性测试会话。
我们将着眼于一些探索性测试的通用方法,但请记住,这并不是一个全面的列表!如果你正在寻找更多的想法,看看我们的博客开始探索性测试。
- 应用程序应该划分为模块,然后划分为页面。开始阅读探索性测试的页面。这将提供适当的覆盖。
- 列出每个特征,并在完成后标记每一项。
- 从一个简单的场景开始,然后逐渐添加更多的功能来测试它。
- 检查每个输入字段。
- 检查消息是否有缺陷。
- 记录测试过程中出现的任何困难。
- 为了进行有效的测试,将测试人员配对在一起。
- 尽可能多地创建文档。
- 为了获得最大的测试覆盖率,请运行尽可能多的测试。
探索性测试的工具
下面是一些顶级的探索性测试工具,以及它们最受欢迎的特性。
Testpad
Testpad提供的灵活的测试计划格式是跟踪探索性测试的极好方法。允许员工在功能检查表的指导下辛苦地搜索bug,从而最大限度地发挥他们的作用。通过键盘驱动的编辑,Testpad提供了一个时尚的、现代的用户界面。报告过程很简单,但效率惊人,JIRA和其他问题跟踪器可以很容易地集成。
PractiTest
practictest是一个测试管理工具,具有完整的探索性测试功能。它描述了章程,列出了几种类型的注释,并允许你轻松地报告运行过程中的缺陷。为了获得完整的QA覆盖,可以毫不费力地将基于会话的测试添加到测试工作中。
探索性测试Chrome插件
Chrome扩展的功能便于web探索性测试。在整个过程中,会拍摄屏幕截图。你会发现报告缺陷、想法、评论和查询很简单。URL将被自动跟踪。你可以导入和保存会话。会话可以导出为JSON、CSV和HTML三种格式。这个附加组件报告缺陷、建议、注释等。
Bug Magnet
Bug Magnet是Chrome和Firefox的会话测试工具。你可以在工具的帮助下合并频繁的问题值和边缘情况。它是探索性测试期间最容易使用的工具之一。Bug-magnet的每页开销非常低。它独立于任何外部库。通过Bug Magnet,用户可以快速扩展他们的配置文件。Bug-Magnet支持相同域的输入字段、文本区域和多帧。
Session Tester
会话测试器是一种直接且免费的探索性测试工具。它控制并跟踪基于会话的测试。会话测试器的一个方面是计时器,它使你能够自定义测试会话长度以满足你的需要。使用Session测试器,你可以快速、轻松地捕获XML格式的会话记录。这种XML格式可以更改。
Zephyr
另一个有用的探索性测试工具是SmartBear Zephyr。它为各种规模的敏捷团队提供了完整的解决方案。此外,它还提供与JIRA、Jenkins、Bamboo和其他系统的一键交互。Zephyr为测试管理提供了工具。这些工具将提高软件测试的效率和速度。Zephyr提供了从敏捷到自动化,从DevOps到分析的持续测试敏捷性。使用Atlassian工具,它可以在JIRA内部本地运行。
Test Studio
Telerik Test Studio是针对所有Windows版本的web和桌面应用程序的探索性测试解决方案。它是探索性测试的最佳工具之一,它使你能够评估在线和移动应用程序的性能、负载和功能。它还提供了一个插件来检查跨浏览器兼容性问题。
qTest Explorer
测试人员可以在qTest(一个直观的、可扩展的测试管理系统)的帮助下巩固和加速测试管理。使用qTest探索性测试工具,QA过程的每一步都变得更加容易和高效。企业的敏捷测试管理平台叫做Tricentis qTest。它是一系列有效的敏捷测试工具。在这个平台的帮助下,你可以增加测试自动化,改进协作,并加快上市时间。
TestRail
作为一种基于web的探索性测试和测试用例管理工具,TestRail非常广泛。该工具有效地管理、跟踪和组织你的软件测试工作。
Azure Test Plans
Azure Test Plans是一个探索性测试工具,可以帮助你提高应用程序代码的质量。利用探索性测试会话使你能够同时创建和运行测试,从而在当代软件开发过程中最大限度地提高质量。当你运行探索性测试时,它会记录详细的场景数据。你可以通过在桌面和web应用程序上运行测试来测试应用程序。
探索性测试的挑战
尽管探索性测试有一些优势,但也存在一些挑战。
- 由于非结构化测试,实际步骤偶尔会被忽略,并且无法记录在bug再现过程中,这使得复制问题变得具有挑战性。
- 新手或对该领域没有任何先验知识的人不应该处理它,因为他们无法从用户的角度思考,并且会不断报告不合理的问题,这会浪费团队的时间。
- 自动化测试是不可行的,因为很少有事情完全依赖于最终用户的观点、智力或思维。
- 不确定何时准出,因为探索性测试需要执行特定的测试用例。
如何克服探索性测试中测试人员所面临的挑战?
让我们着眼于探索性测试中的一些常见挑战以及如何克服它们。
完整的产品知识:
不了解产品的人可以进行探索性测试。然而,这偶尔也会带来挑战。如果对产品没有透彻的了解,就有可能忽略一些关键的实例。因此,建议在测试团队中加入有经验的测试人员来进行该测试,以克服这一挑战。当一个或两个测试人员都熟练时,结对测试效果最好,但理想情况下,两个测试人员都应该熟练。
文档:
事实上,采用这种方法的测试人员经常利用证据的缺失作为不记录测试过程的理由!这是绝对不应该做的。
你必须考虑这将如何影响测试过程。任何测试项目的生产力都是一个关键问题,如果没有足够的文档和明确的时间框架,评估生产力是不可能的。
此外,为指定的测试系统生成的问题报告的数量可能会更少。在这种情况下,对于特定的测试人员来说,解释他的工作在指定的时间框架内是如何进行的可能是具有挑战性的。既然我们知道这是探索性测试的另一个问题,那么让我们检查一下如何减少它对生产力的影响。因此,适当的文档非常重要。
可追溯性:
按照这种测试方法,测试人员不遵循任何预先确定的测试策略、计划或脚本。此外,它的文档也在不断发展。因此,它缺乏可追溯性,这就产生了一个问题。测试人员应该在运行测试时报告测试,以解决这个问题。另外,让涉众和其他测试人员了解情况。
适当的执行时间:
在确保最佳标准的同时,不知道何时调整探索性测试是另一个典型问题。事实上,知道何时进行探索性测试比知道如何进行探索性测试更为重要。由于测试用例的短缺,这也是很重要的。因此,如果在不适当的时候实施,可能会产生负面影响。当时间紧迫时,企业应该使用这种测试方法来识别软件问题。
这种测试方法可用于确认已立即修复的任何缺陷。它不应该应用于需要更多的任务。这种独特的测试过程在很大程度上依赖于人类的智力。尽管企业继续使用测试自动化,探索性测试是否可以自动化的话题仍然存在。
探索性测试的最佳实践
探索性测试是提高软件产品质量的宝贵方法。它允许更好的缺陷检测,帮助确定改进的领域,并且可以用作在解决问题期间评估不同方法的方法。如果使用得当,探索性测试可以提供超过任何其他测试方法的价值。
然而,理解与探索性测试相关的最佳实践是很重要的,以确保它能带来最大的好处。本教程解释了其中一些最佳实践,包括如何使用探索性测试来识别缺陷,以及它与其他测试方法的区别。
获取足够的资源:
探索性测试强调测试人员的自主性、参与性和责任感,因为他们自己选择在哪里以及如何进行测试。他们可以自由地专注于他们最看重的功能和路径。
因此,拥有必要的资源对于开始探索性测试阶段至关重要。测试人员需要广泛的bug搜索经验,因为这将帮助他们理解和分析被测试的数字产品,并检测和推断潜在的危险。确保测试员具备多种技能、想象力、好奇心和独立性是必不可少的。此外,他们应该能够即兴发挥和良好的观察。随着研究的深入,他们将需要根据他们所学到的知识来选择哪些额外的实验。
选择最能达到你目标的测试方法:
选择一种测试方法,使测试人员能够简单地执行测试,并使涉众能够分析结果。在你的计算中包括测试周期的时间、资源和测试设备的可用性。
保持清晰和简洁的记录:
如果没有价值,你不需要记录,但是你应该对所做的每件事、如何做以及发现的内容保持清晰而简洁的记录。这将向你展示会话的可靠性,并使你能够进一步改进测试过程。