一、什么是探索性测试?
什么是探索性测试?
随着互联网的不断发展,越来越多的人都在学习软件测试等互联网技术,而本文我们就通过案例分析来简单了解一下,探索性软件测试技术应用分享。
探索性测试可以说是一种测试思维技术,它没有很多实际的测试方法、技术和工具,但是却是所有测试人员都应该掌握的一种测试思维方式。探索性强调测试人员的主观能动性,抛弃繁杂的测试计划和测试用例设计过程,强调在碰到问题时及时改变测试策略。
对探索性测试直白的定义是:同时设计测试和执行测试,探索性测试有时候会与即兴测试(adhoctesting)混淆,即兴测试通常是指临时准备的、即席的Bug搜索测试过程,从定义可以看出,谁都可以做即兴测试。
探索性测试强调测试设计和测试执行的同时性,这是相对于传统软件测试过程中严格的“先设计,后执行”来说的。测试人员通过测试来不断学习被测系统,同时把学习到的关于软件系统的更多信息通过综合的整理和分析,创造出更多的关于测试的主意。
二、探索性测试的基本过程
探索性测试的基本过程
探索性测试的基本过程包括如下:
1、识别软件系统的目的。
2、识别软件系统提供的功能。
3、识别软件系统潜在的不稳定的区域。
4、在探索软件系统的过程中记录关于软件的信息和问题。
5、创建一个测试纲要,使用它来执行测试。
注意:上面的过程是一个循环的过程,并且没有很严格的执行顺序,完全可以先创建测试纲要,执行测试,然后在测试中学习软件系统,也可以先探索软件系统的各个区域,然后再列出需要测试的要点。
探索性测试强调测试过程中要有更多的发散思维,这也是与传统测试方式的大区别,传统测试方式强调设计完善的测试用例,测试人员严格按测试用例执行测试,这多少限制了测试人员的测试思维,测试人员往往缺乏主观能动性。
三、探索性测试的管理
探索性测试的管理
探索性测试是一种不是很严谨的测试方法,缺乏可管理性和度量性,因此,JamesBach提出了基于任务的测试管理(Session-BasedTestManagement),Session-Based测试管理是用于度量和管理探索性测试的一种方法。
测试人员在采用探索性测试方法的测试过程中,应该及时记录下所谓的“测试故事”,把所有测试中学习到的关于软件系统的知识要点、问题和疑问、测试的主意、进行了怎样的测试等相关信息记录下来,然后周期性地与测试组长或其他测试人员基于记录的“测试故事”展开简短的讨论。
测试组长基于这些记录的结果来判断测试的充分性,测试人员通过讨论可以共享学习到的软件系统相关的信息,交流测试的主意,总结测试的经验,激发测试人员拿出更多的测试主意,从而指导下一次测试任务的执行。
在这种方式的测试管理中,测试组长就像一名教练,但是需要参与到测试的实际任务中,指导测试人员测试的方向和重点,提供更多的关于软件系统相关的信息给测试人员,授予测试人员更多的测试技术。
说明:未必需要完全采用探索性测试的方法,但是可把探索性测试方式作为传统测试方式的补充,在每一项测试后留下一定的时间给测试人员做探索性的测试,以弥补相对刻板的传统测试方式的不足。应该更多地采用探索性测试的思维方式,应用在日常测试工作中。
四、为什么要进行探索性测试?
探索性测试的含义和它为什么重要?
探索性测试是一种开发测试、审查结果、迅速实施并将其用于其他测试的方法。主要来说,该测试旨在探索系统、注重测试人员的思维,并促进测试人员的实时和实用思考。此外,探索性测试同时涉及测试学习、设计和执行过程,基于这一点,它在敏捷模型中被广泛采用。
为什么要进行探索性测试?
您是否曾经思考过为什么应该进行探索性测试?事实上,采用这种类型的测试是值得的,因为花费几分钟进行有效的测试可以发现更多的缺陷。
以下是进行探索性测试的一些原因:
1、与脚本化测试相比,您可以同时进行从测试设计到测试执行的测试,作为一个连续的过程。
2、这种方法在脚本化测试中是不可用的,当软件测试人员进行探索性测试时,可以发现更多的缺陷。
3、根据统计数据,探索性测试至少能发现比脚本化测试多29%的缺陷和错误。
4、探索性测试在检测复杂的错误时表现出色,而这些错误可能对脚本化测试来说难以定位。
五、探索性测试的好处
探索性测试的好处
探索性测试有许多优势,可以为用户提供多种好处,当软件测试人员进行探索性测试时,它具有显著的优势。首先,它可以检查和发现额外的错误,当进行常规或重复性测试时,您可能无法检测到任何错误,但是探索性测试可以发现隐藏的错误和缺陷。
此外,其他测试方法可能会忽略一些错误,这使企业相信没有问题存在,由于探索性测试方法迅速,它会检查结果、执行测试,并将其用于下一个测试。所有的错误都会在使用这种测试方法是被发现,这种可靠性使其与其他测试方法相比具有优势,同时,在执行测试时还可以产生新的想法。
此外,它允许最小化文档编写,避免重复工作,并提供最大化的测试,这些好处对于使用探索性测试非常重要,使其成为一种合适的测试选择。
六、探索性测试的挑战
探索性测试的挑战
人们普遍认为,即使对于一件好事物,也存在一些缺点或不足之处,这在一定程度上是可以理解的,没有什么是完美的。在这方面,探索性测试技术并非没有任何挑战。
首先,理解应用程序需要一定的时间。当测试人员熟悉应用程序时,这将不再是一个挑战,用户或测试人员不会立即熟悉它,并且倾向于在第一次尝试时忽略其效果。
此外,测试人员的经验、知识和技能将决定测试的成功和有效性。简而言之,测试人员必须具备丰富的经验、信息和高度敏捷的能力,才能发挥出最佳的测试效果,此外,在测试执行期间记录所有事件的文档编写要求严格,因此,一些内容可能会在过程中丢失。
此外,探索性测试受限于测试软件的人对领域的理解。测试完全依赖于测试人员的技能,需要提高技能才能执行长时间的测试。当同时进行探索性测试和脚本化测试时,可以解决这个挑战。
这些挑战并不意味着软件测试效果不佳,其好处使其成为顶级选择,并且仍然是软件工程中最常用的测试方法之一。
探索性测试示例
上面已经解释了探索性测试的好处和坏处,现在,下面将讨论探索性测试的示例:
示例1:
某个理发店服务提供商的网站,具有登录、服务类型、发型样本、预约会话、支付、理发记录、发型师分配等组件。为了测试登录功能是否正常工作,无论是对于新用户还是现有用户,您都会导航到登录页面,并测试用户名和密码的格式、允许的最大字符数等情况。
您会探索该网站,了解允许的字符类型,它们是字母数字组合还是包含符号、字母和数字的混合物。此外,在了解格式后,您还应注意当违反用户名和密码格式规则时,向用户提供的提示消息,无论是说“用户名错误”、“密码错误”还是“账户被封”。
另外,您还可以检查“忘记密码”或“记住登录详细信息”功能是否正常工作,这些仅涉及登录功能。您还可以继续测试理发店网站的其他组件。
示例2:
另一个示例可能是测试贷款申请,以确保用户在完成一些验证步骤或KYC(了解您的客户)后能够获得贷款。为了确保应用程序不会向无身份证明的用户提供贷款,您可以以用户的身份完成每个验证步骤,并记录任何错误消息。
此外,哪些验证步骤是可选的或必需的,应用程序是否批准未通过必需验证步骤的用户?其中一个验证步骤可能是提供您的九位数社保号码(SocialSecurityNumber),该号码已与美国政府的数据库集成。如果用户提供了八位数或错误的社保号码,应用程序会给出“社保号码错误”或“社保号码不完整”的提示。
您还可以注意此步骤是必需的还是可选的,如果应用程序允许用户在未验证其社保号码的情况下继续获得贷款,则这是一个需要报告的错误。
七、如何执行探索性测试
如何执行探索性测试
执行探索性测试是有特定的步骤需要遵循,才能以取得最佳结果,执行测试的方法也可以称为SBTM循环(基于会话的测试管理)。以下是执行测试的逐步指南:
第一步:引入错误类别通过对过去项目中遇到的常见故障或问题进行分类,创建错误分类。例如,如果某个页面一直崩溃,应将此问题进行分类。通过对故障进行深入的根本原因分析,检查和审查问题的根源。找到风险,并制定设计和测试的想法。
第二步:测试计划包括应重点关注的内容,要测试的内容以及如何进行测试。测试想法标志着整个测试的开始,并且说明了什么是探索性测试以及如何使用它。
第三步:时间控制,这种测试方法可以让多个测试人员同时进行工作,且时间不少于90分钟。在此期间,不得因任何原因中断。时间控制可以超过45分钟或少于45分钟,这种方法使测试人员能够注意到系统的反应并为准确的结果做好准备。
第四步:结果评估,对结果适当评估和检查缺陷。全面分析和扫描覆盖范围。测试人员从测试中学习。
第五步:测试报告和总结在此评估结束后,报告和整理测试结果。检查是否需要进行另一次测试,检查是否已经发现了所有的缺陷,将结果与任务书进行比较。
八、探索性测试的类型
探索性测试的类型
以下是确定的探索性测试类型:
1、基于策略的测试(StrategyBasedTesting)
这种测试类型需要一个熟悉应用程序的测试人员,同时,需要使用特定的技术,如基于风险的技术、等价类技术、错误猜测、边界值分析等。测试人员必须有丰富的经验才能在测试中发挥出最佳效果,这些技术被用于测试并发现更多会导致问题的缺陷,然而,这种测试方法在专家对软件有深入了解时效果最好。
2、自由式测试(FreestyleTesting)
顾名思义,自由式测试不需要任何正式的步骤或规则来指导使用,其目的是测试特定的缺陷或验证不同测试人员的工作。在这种类型下,测试人员可以无需遵循特定的格式或结构使用应用程序。与基于计划的测试相比,自由式测试只需要对应用程序有一定的了解,此外,当需要熟悉需求后就可以采用这种测试方法。所以,对软件需求有一定的熟悉度是必要的。
3、基于场景的测试(ScenarioBasedTesting)
这种测试类型基于真实用户的场景。与自由式测试只限于特定内容不同,基于场景的测试的目的是探索和测试各种场景。这些场景经过测试,并进行探索以匹配其他可能的场景,它涵盖从端到端场景到真实用户场景和测试场景的各种情况。此外,场景从不同的类别收集,以提供最全面和彻底的测试。
九、何时不适用探索性测试
何时不适用探索性测试
探索性测试的优势和好处已经司空见惯,但在某些情况下,它是不必要的,例如,在测试执行过程中,有些领域需要密切监控,最好通过其他方式进行。以下是探索性测试不太重要的领域:
1、需要密切监控和团队合作的领域
在测试执行过程中,有一些需要细心监控的方面,包括回归测试、自动化构建验证测试和性能测试。在这些领域应用探索性测试是多余的,因为它只会增加很少的价值,它不会为工作质量增添额外的信息或有意义的影响,反而会削弱团队的生产力。
因此,在这种情况下,不应使用探索性测试,普通的脚本化测试可能更加高效,并用于主要测试运行和测试结果。如果不使用探索性测试,它将有助于鼓励、建立和执行平衡的测试技术,此外,在进行测试任务时,它促使团队成员更加有生产力,并促进团队成员之间的集体思考。
2、合规性测试
在进行合规性测试时,建议不要进行探索性测试。在这个领域,脚本化测试更加相关和有价值。在合规性测试中,测试人员必须遵守特定的要求,如政府法规、清单、法律认证和其他基于领域的测试。
如果进行探索性测试,可能无法遵守这些要求。此外,合规性测试通常需要遵循脚本化的流程。然而,这只是有时的情况。它可以根据经验丰富的测试人员采用的技术而有所不同。建议采用即席测试、探索性测试和脚本化测试,以获得最佳结果。
3、在没有脚本化测试的情况下使用
探索性测试不应在没有脚本化测试的情况下使用。当同时使用这两种测试时,可以获得最佳结果。尽管探索性测试可能在某些方面优于脚本化测试,但这并不意味着应完全避免脚本化测试,前者被视为对后者的升级,但两者都可以用于基本测试以获得最佳结果。
此外,平衡这两种测试技术比坚持只使用其中一种更为重要。当同时使用这两种技术,并在成本和时间限制内进行,可以获得更加完整的覆盖范围。因此,关键是拒绝广泛使用探索性测试或仅使用探索性测试,将探索性测试与脚本化测试相结合可以在几乎所有领域中使用,并取得最佳结果,没有限制。
十、索性测试方法
索性测试方法
麻烦测试法
故意设置各种障碍来看软件的应付能力,不考虑输出,只要软件能这样做就这样做。
测试思想:
可以提炼一种通俗易懂的思维方式运用到我们的项目上,我们首先想到的是用户的操作方式:点击、不同方向划动、双击、长按、拖动、手机上的各种按键以及其他操作,这些操作组合起来所得到的输出结果,也是开发以及产品无法预料的,针对麻烦测试,我们可以参考以下几个检查点:
检查各个UI页面的控件,例如会员中心各个按钮;
1、检查各个控件的主要操作方式以及附带操作方式:例如分享,更改权限等;
2、尝试主要操作方式以及附带操作方式组合操作:
3、尝试其他操作方式与主要操作方式结合;
极限测试法
制作一些极值场景,输入一些极大或极小值,制作一些极复杂的场景等。
测试思想:
只要有输入就有一些极值的输入。那我们经常遇到的一般是哪些极值类型呢?
思维模式:
梳理测试对象的极值类型
创造测试对象的极大值和极小值
例如:文档输入框的最大可输入字符,二次密码的最大可输入位数等等。
测一送一法
测试同一个应用程序多个拷贝的情况,同时对一个被测对象进行操作
测试思想:
多个终端操作后对被测试对象的影响,如一个账号同时登录多处,测试一端的一些操作,检查另一端的影响;或先登录一端操作后对另一端的影响。
测试参考:
同时登录关注以下操作,一方先登录操作后关注另一方后登录的情况
例如:在PC端操作检查桌面端以及移动端、APP端的功能以及显示问题;
消息类操作
设置类操作
4、卖点测试法
对那些能吸引用户的特性进行测试,比如多人同时在线编辑等
5、 恶邻测试法
针对问题频发的功能进行周围功能验证
6、 专家测试法
根据用户反馈来进行测试;
测试思想:
在用户反馈的问题基础上进行周边问题验证,以及同类型问题验证或者为达到相同目的进行的不同操作,观察结果是否符合预期
7、取消测试法
停止或取消正在进行的程序或操作
测试思想 :
取消或中断程序正在进行的操作;
测试过程中杀进程,再启动检查是否有异常,或者进行断网操作。
十一、探索性测试示例
探索性测试示例
假设有人在没有映射的情况下驾驶车辆前往新区域的某个位置,驾驶汽车的人将采用各种标准策略到达那里,包括:
1、获取周边地区的映射
2、沿随机方向行驶以找到位置
3、联系好友并询问方向
4、前往邻近的加油站问路
类似的概念可以应用于探索性测试。
想象一下,您的任务是对医院管理系统进行探索性测试。
探索性测试有多种方法。
猜测
猜测用于识别软件中更可能包含错误的区域。之前在类似产品/软件/技术方面的工作经验有助于猜测。
在医院管理系统的例子中,你可以预期支付组件有更多的故障,因为它必须连接支付网关;如果管理不当,事务可能会超时并导致问题。
架构图和用例
架构图描绘了各种组件和模块之间存在的连接和链接。用例从消费者的角度提供有关产品功能的知识。
这些图纸和用例可用于探索方法来测试产品。
医院管理系统 - 您回忆一个用例,其中许多人可能使用相同的号码,并且应用程序必须允许它;您决定测试该场景。
您还可以从架构图中回忆起报告功能是从主应用程序单独部署的,生成并通过电子邮件发送给用户需要几分钟的时间,因此您决定对其进行测试以确保生成报告并电子邮件功能配置正确。
过去的缺陷
检查过去版本中遇到的问题有助于确定程序的哪些方面可能有最多的错误。
以前医院管理系统的上报模块,吃过很多RAM,出现各种错误,所以你也决定测试一下。
错误处理
错误处理是在系统发生故障时启动必要措施的代码部分。为了验证友好的错误处理,可以利用各种场景执行探索性测试。
医院管理系统中的报表模块会占用大量内存,偶尔会崩溃。您决定对其进行测试,以确保尽快创建已保留用于生产的结果,即使在此期间出现问题。
讨论
探索性测试也可以根据软件在项目会谈和简报期间的理解来制定。
问题和清单
诸如“什么、何时、如何、谁和为什么”之类的问题可能会为探索性软件测试提供提示。
十二、探索性测试面试问题
探索性测试面试问题
1、究竟什么是探索性测试,什么时候应该进行?
2、你如何进行探索性测试?
3、探索性测试的主要优点和缺点是什么?
4、探索性测试有哪几种?
5、探索性测试和自动化/脚本化测试之间的主要区别是什么?
6、提供一个探索性测试的例子。
十三、探索性测试总结
探索性测试总结
探索性测试不是传统的测试方法,但却是一种非常有效的应用程序测试方法。
它鼓励有能力的测试人员走出界限,为问题检测创建实时测试场景。探索性测试,因为它是非结构化的,可以在任何需要最少文档的过程中进行,无论它是利用敏捷方法、瀑布模型还是任何其他软件开发生命周期原型。