探索式测试定义
- 格式:pdf
- 大小:640.48 KB
- 文档页数:25
探索性测试在功能测试中的应用功能测试是软件开发过程中不可或缺的一环,旨在验证软件是否满足规格说明书中规定的各项功能要求。
然而,在传统的功能测试中,由于测试人员主要关注于已知的功能点,往往容易忽略一些潜在的问题。
而探索性测试(Exploratory Testing)则是一种适用于功能测试的补充方法,可以帮助发现更多的潜在问题以提升软件的质量。
一、什么是探索性测试探索性测试是一种以自由和灵活的方式进行的测试活动,测试人员在测试过程中不仅关注已知的功能点,还通过探索和试错的方式发现新的测试点。
这种测试方法注重测试人员的直觉和经验,通过不断的实践来逐渐发现潜在的问题。
探索性测试的目标不仅限于找出缺陷,更重要的是以用户的视角去评估软件的可用性、易用性和性能等方面。
二、探索性测试的优势1. 发现潜在问题:通过探索性测试,测试人员可以从不同的角度和场景出发,去发现一些传统功能测试中容易被遗漏的潜在问题。
2. 适应变化:探索性测试可以应对需求变更的情况,当需求发生变化时,测试人员可以根据新的需求进行进一步的探索和测试,确保软件的适应性和可靠性。
3. 优化测试计划:通过探索性测试,测试人员可以根据实际情况根据重要性和风险程度对测试进行调整,优化测试计划和资源分配,提高测试效率。
4. 提高测试人员的技能:探索性测试依赖于测试人员的直觉和经验,通过实践不断提升测试人员的技能水平,使其成为专业的测试从业者。
三、探索性测试的实施步骤1. 确定测试目标:在进行探索性测试之前,首先需要明确测试的目标,这可以是要测试的功能点、用户故事或者重要的业务场景。
2. 制定测试策略:在进行探索性测试时,测试人员需要制定相应的测试策略和测试方案,包括测试的范围、测试的方法和技巧等。
3. 执行测试:测试人员按照测试策略进行测试,通过尝试不同的输入、操作和数据,发现可能存在的问题并记录下来。
4. 总结和评估:测试人员对测试过程进行总结和评估,分析测试的结果和发现的问题,并形成测试报告和改进建议。
软件测试中的创新方法有哪些在当今数字化快速发展的时代,软件质量成为了企业成功的关键因素之一。
而软件测试作为保障软件质量的重要手段,也在不断地演进和创新。
为了更好地发现软件中的缺陷,提高测试效率和质量,各种创新的测试方法应运而生。
一、探索性测试探索性测试是一种强调测试人员的主观能动性和创造性的测试方法。
在这种测试中,测试人员并非按照预先编写好的详细测试用例进行操作,而是在对软件系统有一定了解的基础上,通过不断地探索和尝试来发现潜在的问题。
探索性测试的优势在于能够快速地发现那些在传统测试方法中容易被忽略的缺陷。
测试人员可以根据自己的经验、直觉和对业务的理解,灵活地选择测试路径和操作方式,从而更好地模拟真实用户的使用场景。
例如,在测试一款新的电商应用时,测试人员可以像普通用户一样随意浏览商品、添加购物车、进行结算等操作,在这个过程中观察软件的反应,发现可能存在的界面布局不合理、流程卡顿、数据异常等问题。
二、基于模型的测试基于模型的测试是通过建立软件系统的模型来生成测试用例。
这些模型可以是状态机模型、流程模型或者其他形式的抽象模型。
利用模型生成测试用例的好处在于能够覆盖更多的边界情况和复杂的逻辑组合。
模型可以帮助测试人员更清晰地理解软件系统的行为和结构,从而有针对性地设计测试用例,提高测试的覆盖率和准确性。
比如,对于一个在线银行系统,可以建立一个关于转账流程的模型,包括输入金额、选择账户、确认操作等步骤,然后根据这个模型自动生成大量的测试用例,来验证转账功能的正确性和稳定性。
三、众包测试众包测试是借助广大的互联网用户群体来进行软件测试。
企业将测试任务发布到专门的众包平台上,吸引众多的志愿者参与测试。
这种方法的优点在于能够在短时间内收集到大量的真实用户反馈和测试数据。
不同背景和使用习惯的用户可以发现各种不同类型的问题,从而帮助开发团队更好地了解软件在实际使用中的表现。
例如,一款新的手机游戏可以通过众包测试,让成千上万的玩家在不同的设备和网络环境下进行试玩,快速发现游戏中的兼容性问题、性能瓶颈以及用户体验方面的不足之处。
探索性测试(ExploratoryTesting)概述在敏捷测试(Agile testing)中,探索性测试是作为⼀个重要组成部分⽽出现的,把“对系统的探索”和“对系统进⾏测试”结合在⼀起,敏捷测试可以利⽤探索性测试达成“敏捷”的⽬标。
探索性测试并不是⼀个最近才被提出来的测试技术,也不是⼀种很深奥的技术——事实上,许多测试⼯程师在⾃觉或不⾃觉地使⽤这种技术。
那么,究竟什么是探索性测试呢?对探索性测试的理解本⾝会存在⼀些争议,因此,很难给出探索性测试的准确定义,不过,⼀般来说,探索性测试具有这样的⼀些特点:1、探索性测试强调测试设计和测试执⾏的“同时”性——这个“同时”是相对于传统软件测试过程中严格的“先设计,后执⾏”来说的;2、测试⼯程师通过测试来不断学习被测系统;3、探索性测试的重点是创造;探索性测试的出发点是“测试者如果没有真正使⽤过系统,就不可能真正理解和掌握系统,也就不可能真正有效地测试该系统”,相信所有有过测试实践的测试⼯程师都会承认这⼀点,确实,在我们没有接触到⼀个真正的系统之前,很难完全认识到这个系统,虽然可以在测试计划阶段按照需求或是设计的要求写出测试⽅案和⽤例,但总觉得这些⽤例不可能具有太强的可操作性。
事实上,探索性测试给出的另⼀个测试的思路:“如果我们可以在对系统的测试中逐渐深⼊地学习系统,测试是否会更加有效率?”在我看来,这个问题的答案是显然的,如果测试⼯程师能够在测试中对系统越来越深⼊地了解,那么,利⽤这些逐渐增加的了解,⾃然可以让测试变得更加有效率。
探索性测试只是⼀种⽅法和思路,并不是⼀个确定的过程。
因此,在使⽤探索性测试时,⽆法回避的是When的问题,也就是说,在什么时候进⾏探索性测试更加有效呢?我的答案是“在你认为合适的时候”:)因为,探索性测试可以针对不同的测试层⾯,例如,针对业务场景的探索性测试、针对功能点的探索性测试,甚⾄是头脑风暴式的探索性测试,都能够在测试中发挥积极主动的作⽤。
探索式测试与场景测试探索式测试(Exploratory Testing)和场景测试(Scenario Testing)是软件测试领域中常用的两种测试方法。
它们在测试过程中发挥不同的作用,并能够有效提高软件质量和用户体验。
本文将探讨探索式测试与场景测试的特点、优势以及如何应用于软件测试中。
一、探索式测试的特点与优势探索式测试是一种灵活的测试方法,没有预先制定的测试脚本或测试用例。
测试人员根据自己的经验和直觉,在软件中自由地“探索”各种可能的测试路径和测试场景。
探索式测试的特点如下:1. 灵活性:探索式测试没有严格的测试计划和预定的测试步骤,测试人员可以根据自己的判断进行测试,适应各种不同情况的需求。
2. 自由度:测试人员有更多的自由度来选择测试的重点和方法,可以更好地发现潜在的问题和缺陷。
3. 实时反馈:探索式测试可以实时地反馈测试人员对软件的感受和体验,便于及时调整测试策略和重点。
探索式测试的优势在于能够检测到那些预定的测试用例无法覆盖到的问题,尤其是那些非明显的缺陷和潜在的风险。
它可以更好地模拟用户的实际使用场景,提高软件的用户友好性和可靠性。
二、场景测试的特点与应用场景测试是一种基于特定场景的测试方法。
测试人员通过构建典型的使用场景和使用流程,对软件在不同场景下的功能和性能进行测试。
场景测试的特点如下:1. 重现性:通过特定的场景和流程,可以重现和模拟用户实际的使用情境,发现软件在不同场景下的潜在问题。
2. 可测性:场景测试可以明确测试目标和测试要求,有利于设计和执行测试用例,提高测试效率。
3. 多样性:场景测试可以涵盖多种使用场景和使用方式,能够全面评估软件的功能完整性和性能稳定性。
场景测试在软件测试中应用广泛,尤其适用于对特定功能或特定用户场景的测试。
通过构建符合实际需求的场景,可以准确地评估软件的性能表现和用户体验,发现潜在的问题并及时解决。
三、探索式测试与场景测试的结合应用探索式测试和场景测试具有相互补充的关系,可以相互结合以达到更好的测试效果。
探索性测试在软件测试中的应用软件测试是保障软件质量的重要环节。
随着软件规模和复杂度的增加,传统的测试方法已经无法满足需求,因此,探索性测试作为一种灵活、高效的测试方法被广泛应用。
本文将介绍探索性测试的概念、原则以及在软件测试中的应用。
一、探索性测试的概念探索性测试是一种基于经验、直觉和洞察力的测试方法,它强调测试人员的主观能动性。
与传统的测试方法相比,探索性测试更加灵活,能够更好地适应不确定、复杂的测试环境。
探索性测试注重发现潜在的软件缺陷和问题,通过不断试错、学习和优化来提高测试效果。
二、探索性测试的原则探索性测试遵循以下原则:1. 自由探索原则:测试人员有自主权,能够灵活地选择测试方法和技术,不受约束。
2. 提前测试原则:探索性测试需要尽可能早地进行。
在软件开发的不同阶段,测试人员可以通过探索性测试及时发现问题,有助于提高软件质量。
3. 重点测试原则:测试人员根据软件的特点和风险,有针对性地进行测试,重点关注可能存在问题的地方。
4. 提高测试效率原则:探索性测试注重快速获取反馈和整合学习,不断调整测试方向和策略,以提高测试效率。
三、探索性测试在软件测试中的应用探索性测试在软件测试中有多种应用方式,主要包括以下几个方面:1. 缺陷探索:通过主观的测试技巧和经验,测试人员可以主动发现潜在的缺陷和问题。
他们可以通过随机输入、异常输入、边界值测试等方法,找出软件中隐藏的缺陷。
2. 功能探索:在进行功能测试时,测试人员可以通过探索性测试方法发现更多的功能和用例,以增强对软件功能的全面覆盖。
3. 用户体验探索:测试人员可以通过模拟用户的操作和行为,对软件的用户体验进行全面评估。
他们可以发现潜在的用户体验问题,如交互不友好、操作繁琐等。
4. 性能探索:测试人员可以通过模拟大规模用户同时访问、持续使用等场景,对软件的性能进行探索性测试。
他们可以发现潜在的性能问题,如响应时间慢、负载能力不足等。
5. 安全探索:测试人员可以通过主观地进行安全测试,在软件中寻找潜在的安全漏洞和风险。
探索性测试方法范文探索性测试是软件测试中的一种方法,用于发现未知的错误和问题。
与传统的测试方法相比,探索性测试更加灵活,强调测试人员的创造力和主动性,能够提供更全面的测试覆盖和深入的测试深度。
本文将介绍探索性测试的定义、目标、方法和应用。
一、定义和目标1.定义:探索性测试是一种基于测试人员的经验、知识和直觉,对软件进行自由测试的方法,以发现和提供宽泛的测试覆盖和深入的测试深度。
2.目标:(1)发现未知的错误和问题:通过测试人员的主观判断和主动探索,能够发现传统方法难以发现的潜在错误。
(2)提供全面的测试覆盖:探索性测试能够覆盖传统测试方法无法涵盖的测试场景和路径,提供更全面的测试覆盖。
(3)提供深入的测试深度:通过主观思考和主动分析,能够深入地测试软件的功能、性能、安全性等方面。
二、方法1.理解需求和系统:探索性测试前,测试人员需要深入理解软件的需求和系统架构,以便能够更好地针对系统进行测试。
2.设计测试策略:根据系统的特点和测试目标,测试人员应制定适合的测试策略,确定测试的范围和方向。
3.进行自由测试活动:测试人员自由地测试软件,根据其经验和知识选择测试用例并执行,利用各种测试技术和工具进行测试。
4.记录测试过程和结果:测试人员应记录测试过程中的思考、推断、测试用例和执行结果,以便后续分析和总结。
三、应用1.发现隐藏的错误和问题:探索性测试能够深入测试系统的各个功能模块和边界条件,发现传统方法难以发现的隐藏错误。
2.验证特殊场景和异常情况:探索性测试可以针对系统的各种特殊场景和异常情况进行测试,确保系统能正常处理这些情况。
3.补充传统测试方法的不足:传统的测试方法往往只能进行一些预先设计好的测试用例,而探索性测试能够更加全面地覆盖系统的各个功能点,从而补充传统方法的不足。
4.提高测试覆盖和测试效率:探索性测试能够提供更全面的测试覆盖和深入的测试深度,不仅能发现更多的问题,也能提高测试效率。
总结:探索性测试是一种灵活、主动的测试方法,能够发现传统方法难以发现的问题和错误。
1、探索性测试的定义探索性测试(ET)是敏捷世界里的一种重要测试方法,作为一个研究性的工具,它是用户故事测试和自动化回归集的重要补充。
它是一种经过深思熟虑的测试方式,没有测试脚本,可以使你的测试超出各种明显已经测试过的场景。
探索测试将学习,测试设计和测试执行整合在一起,形成一种测试方法。
探索性测试的最大特色是在对测试对象进行测试的同时学习测试对象并设计测试,在测试过程中运用获得的关于测试对象的信息设计新的更好的测试。
他的典型过程如下图:这相对于传统软件测试过程中严格的“先设计,后执行”来说,是具有很大区别的。
2、探索性测试的基本过程探索性测试的基本过程包括如下:识别软件系统的目的;识别软件系统提供的功能;识别软件系统潜在的不稳定的区域;在探索软件系统的过程中记录关于软件的消息和问题;创建一个测试纲要,使用它来执行测试。
注意:上面的过程是一个循环的过程,并且没有很严格的执行顺序,完全能够先创建测试纲要,执行测试,然后在测试中进修软件系统;也能够先探索软件系统的各个区域,然后再列出需要测试的要点。
探索性测试强调创新的测试思维,在测试过程中不断地出现许多关于测试的新想法,因而就像一把叉,下图就是一个所谓的“探索叉”(exploratory forks)。
探索性测试强调测试过程中要有更多的发散思维,这也是与保守测试方式的最大区别。
保守测试方式强调设想完善的测试用例,测试人员严格按测试用例执行测试,这多少限制了测试人员的测试思维,测试人员往往缺乏主观能动性。
下图展示了一个发散思维的过程,探索性测试强调发散,但并不是盲目地发散,在适当的时候还要收敛回来。
例如,当发觉在一个测试的分支路径上已经花了很长时间也没有找到问题的答案时,则能够考虑先放弃那个区域的探索,因为还有一个主线的测试任务。
探索性测试尤其适合于那些需求不是很明确的测试任务,或者是一名刚刚接手一项新的测试任务的测试人员使用。
3、探索性测试的价值3.1、探索性测试可以用来找到深层次的BUG。
软件测试中的探索性测试方法在软件开发过程中,测试是一个至关重要的环节。
为了保证软件的质量和稳定性,开发人员需要采用多种测试方法。
其中,探索性测试是一种常用的方法之一。
本文将介绍软件测试中的探索性测试方法,并探讨其在测试过程中的优势和应用。
一、探索性测试的概念和原则探索性测试是一种基于经验和直觉的测试方法,相比于传统的计划测试,更加灵活和具有创造性。
其主要原则包括:1. 不受限于测试计划:探索性测试强调对软件进行主动、自由的测试,不受预先制定的测试计划限制。
测试人员可以根据自己的经验和直觉进行测试。
2. 关注异常和边界情况:探索性测试重点关注软件的异常情况和边界情况,挖掘潜在的错误和漏洞。
通过关注这些情况,可以提高软件的鲁棒性。
3. 记录和分享测试经验:探索性测试鼓励测试人员记录测试过程和测试结果,并与团队成员分享经验。
这样可以提高团队的测试效率和质量。
二、探索性测试的步骤和方法探索性测试的具体步骤包括:1. 理解需求和功能:测试人员首先需要对软件的需求和功能进行深入理解,特别是要关注潜在的异常情况和边界情况。
2. 设计测试用例:根据对需求和功能的理解,测试人员设计测试用例,并关注可能存在的错误和漏洞。
测试用例可以通过黑盒测试、边界值分析等方法来设计。
3. 执行测试用例:测试人员根据设计的测试用例,开始执行测试。
在执行过程中,他们可以根据实际情况进行灵活调整,并记录测试结果和发现的问题。
4. 分析和总结:测试人员在测试完成后,需要对测试结果进行分析和总结,找出问题的根源和解决方案,并将这些经验分享给团队成员。
探索性测试的方法包括但不限于以下几种:1. 边界值测试:通过测试软件的输入和输出边界情况,挖掘潜在的错误。
2. 异常处理测试:测试软件对异常情况的处理能力,包括输入错误、网络异常等情况。
3. 随机测试:随机生成输入数据进行测试,以发现软件中不可预见的问题。
4. 接口测试:测试软件与其他系统或模块的接口,包括数据传输、参数传递等。
探索式测试与边界值分析软件测试是保证软件质量的关键环节之一。
在测试过程中,探索式测试和边界值分析是两种常用的测试方法,它们有助于发现潜在的错误和缺陷。
本文将探讨这两种测试方法的原理和应用。
一、探索式测试探索式测试是一种基于经验和直觉的测试方法,通过主观的测试人员在没有明确的测试计划和测试用例的情况下,根据自己的经验和直觉来设计测试用例和执行测试。
探索式测试的核心理念是发现未知的错误和缺陷。
探索式测试的优势在于其灵活性和高效性。
测试人员可以根据自己的经验和直觉,快速设计和执行测试用例,发现潜在的问题。
此外,探索式测试还可以通过不同的测试技术,如边界值分析、等价类划分等,增加测试的全面性和有效性。
然而,探索式测试也存在一些潜在的问题。
由于测试人员主观性的影响,可能会导致测试的不全面和不准确。
因此,在进行探索式测试时,需要测试人员具备一定的测试经验和技能,以确保测试的质量和有效性。
二、边界值分析边界值分析是一种基于输入和输出的测试方法,通过测试输入和输出的边界值,以发现潜在的错误和缺陷。
边界值分析的核心理念是认为在边界值附近的输入和输出可能存在问题。
边界值分析的优势在于其针对性和有效性。
通过测试输入和输出的边界值,可以覆盖不同的情况,从而发现潜在的问题。
此外,边界值分析还可以帮助测试人员确定测试用例的数量,以提高测试的效率。
然而,边界值分析也存在一些潜在的问题。
由于测试人员可能只关注边界值,而忽略其他情况,可能会导致测试的不全面。
因此,在进行边界值分析时,需要测试人员具备一定的测试经验和技能,以确保测试的质量和有效性。
三、探索式测试与边界值分析的结合应用探索式测试和边界值分析可以相互补充,提高测试的全面性和有效性。
在进行探索式测试时,可以结合边界值分析的思想,重点关注输入和输出的边界值,以发现潜在的问题。
同时,通过探索式测试的灵活性和高效性,可以增加测试的全面性,发现其他可能存在的问题。
在进行探索式测试和边界值分析时,需要测试人员具备一定的测试经验和技能。
探索性测试探索性测试是指依据包含测试目标的测试章程同时进行测试设计、测试执行、测试记录和学习,并且是在规定时间内进行的测试。
在测试对象规格说明较少或不完备,且时间压力大的情况下,使用探索性测试可以起到较好的效果。
探索性测试可以作为对其他更为正式和系统化测试的补充,例如:基于需求规格说明的测试。
同时,探索性测试可以用于测试过程的检查,以确保能发现最严重的缺陷。
探索性测试是一个不断交互的过程,根据当前测试执行的结果,调整后续的测试设计和测试执行活动。
在探索性测试的开始,并没有像传统的测试方法那样对所有的测试活动和测试任务进行计划和设计,而是根据测试活动的不断开展,动态调整后面的测试活动和测试任务,测试设计和测试执行是同时进行的。
测试设计和测试执行同时进行并不意味着这两个活动在实际的测试过程中在时间上完全重叠,而是与传统的顺序的测试活动方式相比较而言,这里的测试设计和测试执行并没有严格的顺序关系,各个活动之间互相影响,动态调整。
探索性测试并不是孤立的测试方法,它可以和其他各种测试方法同时进行。
虽然这种方法和传统的测试技术不同,但是在实际的测试过程中,测试人员却是经常不自觉地使用这种测试方法。
☆示例:探索性测试① 当测试人员发现了一个缺陷后,通常会对发现的缺陷进行一系列的调查,以确定重现这个缺陷的前提条件。
同时,适当地对这些前提条件进行改变,来检查在发现该缺陷的区域附近是否存在其他的缺陷。
这是一种典型的探索性测试,测试人员根据已经了解的知识来判断下一步的测试内容。
② 当某个缺陷被开发人员修复后,测试人员要进行相应的确认测试。
但是有经验的测试人员除了进行确认测试以外,还会执行一些额外的测试来检查该缺陷的修复是否对程序的其他地方造成了影响。
这两个例子都是测试人员在测试过程中对探索性测试的应用。
例子中的场景比较简单,涉及的测试管理工作很少,更多的是依赖于测试人员的个人技能。
那么还有哪些情况适用于探索性测试的方法?下面列出了一些常见的场景,在这些场景中可以考虑采用探索性测试的方法:1、对新产品和功能需要在短时间内提供反馈信息。
探索性测试及基本⽤例1 测试决策5要素测试⽬标:所有的重要任务都完成了,⽽剩下没做的事情是⽐较次要的,我们做到这⼀点就可以尽早尽可能地降低发布风险。
测试⽅法:测试是⼀个不断抉择的过程,测试⼈员必须理解运⾏测试⽤例时和分析现有信息所涉及的各种复杂性。
测试决策5要素:⽤户输⼊、状态、代码路径、⽤户数据、执⾏环境。
⽤户输⼊输⼊:环境产⽣的刺激,该刺激导致被测试的应⽤有所响应。
主要分原⼦输⼊(输⼊⼀个数字、按钮)和抽象输⼊(1-25535之间的任何⼀个原⼦输⼊长度值,类似于等价类划分)两类。
考虑各种输⼊之间会相互影响:单独输⼊、混合输⼊。
输⼊值的顺序:组合输⼊。
核⼼功能:接收输⼊、产⽣输出、存储数据、进⾏运算。
[正向测试、逆向测试]错误处理程序[error handler]:输⼊筛选器、输⼊检查、异常处理代码。
常规输⼊[字母和数字]、⾮常规输⼊[⽐如输⼊ctrl+c、shift+c、esc、ctrl键、alt、操作系统的保留字、不同的字符集,本地化的问题]默认输⼊[空格、空⽩、默认值]使⽤输出来指导输⼊。
状态:状态控件中的⼀个点,由所有内部数据结构的取值进⾏决定。
代码路径:⼀连串的代码语句[基于⽩盒]。
⽤户数据:测试数据尽量与上线环境的数据保持⼀致。
执⾏环境:操作系统、当前配置、其他应⽤程序、⽹络拓扑、驱动程序、⽂件系统、⽹络带宽、性能。
2 缺陷检测1.⾃动化测试:通过编写代码来测试⼀个应⽤。
(擅长找到的问题:程序崩溃、系统死机、程序挂起、突发异常、原有能⽤的功能出现问题)2.⼿⼯测试:使⽤程序的⽤户界⾯,⼿⼯输⼊数据进⾏测试。
(缺点:速度慢、没有规律、不可反复使⽤、发现问题也不能重视、⼈员⽔平决定测试质量、使⽤喜欢的测试⽤例⼜缺乏变通)。
测试⽤例的编写不要太使⽤细节的描述,尽量描述⼀些⽤户使⽤场景,同时结合⾃动化测试⼯具进⾏使⽤。
1.需要测试⼈员编写代码。
2.花费太多的时间来开发测试代码,⽽减少了测试项⽬的时间。
探索式软件测试一、局部探索式测试法:1 、用户输入什么是用户输入:由环境产生的一种刺激,该刺激导致被测试的应用程序有所响应。
分成原子输入和抽象输入,如单击按钮,字符串或整数等就是原子输入,抽象输入则是有相互关联的原子输入合并成的输入。
( 1 )合法输入、非法输入原因/目的:1 、正向测试与反向测试,测试要覆盖的基本的东西。
2、大多数开发人员不愿写错误处理代码,从而比较容易导致非法输入的情况会报错或者处理不当。
方式:以开发人员的思路来构造一个非法输入值。
因为开发人员必须要知道什么是合法输入、什么是非法输入,对于他们认为的非法输入值做了什么样的错误处理,这一部分就是我们需要测试的。
如:空值测试、需求规定输入之外的输入、特殊字符、超长字符等。
(2)输入筛选器原因/目的:输入筛选器是用于防止非法的输入值被传递给应用软件的功能代码,输入筛选器就是默默把非法输入排除在外,能传递给应用软件的数据都会被当做正常数据来处理。
测试人员需要测试输入筛选器的功能是否正确实现了、是否可以绕过输入筛选器将值传递给应用软件。
方式:1 、测试内容:如输入面板只可输入整数,则输入筛选器实现只显示整数值的输入,其余的输入都会被忽略。
下拉列表、勾选框也是一种输入筛选器,只提供了合法的输入。
2、输入合法的值,筛选器正确显示。
输入非法值,筛选框正确屏蔽。
即确保开发设(3)输入检查定的输入筛选器范围是正确的。
3、通过某种方法绕过输入筛选器。
如修改前端html 代码,或者使用某种工具跳过js 校验等。
(3)输入检查原因/目的:应用接受一个输入值,如果输入值合法,那么接着运行处理它,否则就产生一条错误消息并中止处理。
并会报警,显示错误信息描述当前状况。
方式:1 、牢牢抓住错误信息,仔细阅读错误信息,检查是否写错了。
错误信息一般会指出当前输入值被认定为非法值的根本原因以及如何修改让它变成合法值。
2、根据错误信息,可以分析那些输入值可以触发其他的错误信息,或者是那些输入值应当导致错误而软件没有报错。
第 1章探索式测试的定义本章给出探索式测试的定义,然后介绍语境驱动测试的7条原则,最后回答一些有关探索式测试的常见问题。
1.1 什么是探索式测试探索式测试(Exploratory Testing )是一种自由的软件测试风格,强调测试人员同时展开测试学习、测试设计、测试执行和测试结果评估等活动,以持续优化测试工作。
考虑到它所具备的即兴发挥、快速实验、动态调整等特征,其思维方法可以追溯到软件开发的最初岁月。
作为一个技术术语,“探索式测试”是测试专家Cem Kaner 博士在1983年提出的,并受到了语境驱动测试学派(Context Driven Testing School 1)的支持。
Cem Kaner 、James Bach 和Bret Pettichord 合著的《软件测试经验与教训》[Kaner01]对语境驱动测试和探索式测试做了精要且深刻的论述。
测试专家James A. Whittaker 曾是Cem Kaner 在佛罗里达工学院(Florida Institute of Technology )的同事,后来1担任过微软测试架构师和Google测试总监。
基于在微软的工作经历,他撰写了《探索式软件测试》一书2,进一步扩展了探索式测试的测试方法。
探索式测试有丰富的内涵,Cem Kaner用如下文字定义了探索式测试的核心。
探索式测试是一种软件测试风格(Style),它强调独立测试人员(Individual Tester)的个人自由和职责(Personal Freedom and Responsibility),为了持续优化其工作的价值(V alue),将测试相关学习(Test-related Learning)、测试设计、测试执行和测试结果分析作为相互支持的活动,在整个项目过程中并行地执行[Kaner08]。
不妨将这段定义分成三个部分进行讨论。
首先,探索式测试是一种软件测试风格(Style),而不是一种具体的软件测试技术(如等价类划分、边界值分析等)。
作为一种思维方法(Approach),探索式测试强调依据当前语境(Context)选择合适的测试技术(Technique),而不局限于特定的测试技术。
测试人员可以在探索式测试中使用任何一种测试技术,也可以将探索式测试应用于任何测试阶段[Kaner09]。
在这种测试风格的指导下,涌现出了一批支持探索式测试的测试技术。
例如,James A. Whittaker在《探索式软件测试》中提出了一套基于系统化错误猜测和测试隐喻的“漫游测试”技术(该测试设计方法将在第3章和第4章中介绍),丰富了探索式测试的手段。
又例如,Jonathan Bach和James Bach发明了基于测程的测试管理(Session-Based Test Management)3,显著地提高了探索式测试在测试组织、汇报、交流和度量上的能力(该测试管理方法将在第8章中介绍)。
再例如,开发工具Microsoft Visual Studio 2010开始支持手工测试和探索式缺陷(Exploratory Bug)4,虽然相关功能略显单薄,但是它体现了软件行业对探索式测试的认可,2 /subject/4818689/3 /sbtm/4 /en-us/library/dd380763.aspx探索式测试实践之路2也表明探索式测试辅助工具和自动化将获得更多的重视与发展(第6章将介绍Visual Studio 2010的相关功能)。
因此,笔者认为术语“探索式测试”5有两层含义。
第一,其内涵是一种软件测试风格和思考方法,不拘泥于具体的测试技术;第二,其外延是一批在这种思考方法指导下发展出来的测试技术,包括测试设计方法、测试管理方法、测试辅助工具等。
为了避免混淆,本书使用“探索式测试”指代探索式测试风格和思考方法,使用特定的测试方法名指代具体的测试技术。
第二,探索式测试强调独立测试人员的自由和责任。
测试人员应该为个人和团队负责,调动所有能量,发挥人的灵活性,在整体上持续优化个人和团队的产出。
测试人员是软件企业的知识工人(Knowledge Worker)。
管理大师Peter Drucker 认为知识工人必须管理自己。
一方面,他建议知识工人自己确立工作目标(根据项目情况去做当前最有价值的工作),通过持续创新、持续学习、持续交流来优化其生产效率和产出质量。
另一方面,他建议企业信任员工,给予充分的授权,并将他们视为企业的资产加以持续投资[Drucker99]。
这两方面可以视为探索式测试对于员工与企业的潜在要求。
第三,探索式测试建议在整个项目过程中,将测试相关学习、测试设计、测试执行和测试结果分析作为相互支持的活动,并行地执行。
实际上,人脑难以并行地执行多项任务。
探索式测试旨在将测试学习、测试设计、测试执行和测试结果分析作为一个循环快速地迭代,以不断收集反馈、调整测试、优化价值。
5 Exploratory Testing通常被翻译为“探索式测试”或“探索性测试”。
本书的作者们选择“探索式测试”是因为这个术语强调了Exploratory Testing是一种测试风格和思考方式,符合该术语的核心思想。
此外,“探索式测试”在字面上与现有的测试术语(如功能性测试、安全性测试、兼容性测试等)有更大的差异,表明它是一种可以应用于任何测试活动的测试方式。
第1章探索式测试的定义 3⏹测试学习:学习任何可以指导测试的知识,可能要学习的内容包括行业背景、领域知识、技术平台、测试技术、产品缺陷、项目风险等。
⏹测试设计:安排测试计划,拟定测试策略,开发测试想法,制作测试支持材料。
⏹测试执行:执行测试并收集结果。
测试可以手工执行,也可以自动执行。
⏹测试结果分析:分析并解读从测试中学到的知识,可能的活动包括判定测试是否通过、理解产品实现、发掘风险区域、评估测试方法是否有效等。
在现实的软件项目中,穷举测试是不可行的。
任何测试都是采样测试,都存在投入测试资源却不能发现缺陷的风险。
随着项目的发展,测试的风险也在持续变化。
对此,探索式测试人员会在项目过程中,随时收集并判读测试情报,优化测试决策和设计,并将它们立即应用于测试执行,通过分析测试结果来评估开发状态和测试风险。
这样的循环有助于最大化测试价值,并降低软件项目的风险。
1.2 语境驱动测试7原则探索式测试的奠基人和积极实践者Cem Kaner和James Bach都支持语境驱动测试[Kaner12]。
语境驱动测试的7条基本原则对于正确理解并应用探索式测试具有重要意义,本节将予以简单讨论。
原则1:任何实践的价值都取决于其语境(Context)。
这条原则几乎是不言自明的。
中国人很早之前就有相似的认识,“南橘北枳”6指相同的种子在不同的环境中会结出不同的果实。
因此古人建议“因地制宜”7,即根据当地的具体情况,采用合适的措施。
然而,软件开发者往往会在无意中忘记这条原则。
开发团队会照搬以往的经6 语出《晏子春秋》,其成书于战国,后经西汉刘向整理。
7语出《吴越春秋》,成书于东汉。
探索式测试实践之路4验,却不考虑经验可能已经过时;会不假思索地采用他人建议的开发方法,却不怀疑南橘北枳的可能;会按照高层的指示亦步亦趋,却不思索指令是否合理。
更糟糕的是,在感觉到情况不妙后,却将错就错,不思变更。
因此,开发团队需要频繁地反思其开发实践是否符合当前的语境,并做出相应调整。
原则2:在特定语境下存在好的实践,但不存在最佳实践。
这条原则看似有些武断,毕竟软件研发已经沉淀出一批公认的实践方法,它们是现代软件开发必不可少的核心实践。
但是,细细一想便会发现这些方法也需要因地制宜。
“持续集成”是公认的最佳实践,但是不同的团队往往有不同的集成频率。
对于小型项目,一次签入(Check-in)会触发一次完整的构建;对于大型项目,开发团队可能每天做一次完整构建;对于超大型项目,做一次完整的构建可能需要几天甚至更长的时间。
不同的构建频率和构建代价自然会导致不同的签入策略和测试方法。
虽然都在实施“持续集成”,但是不同的团队会设计出不同的流程和方法。
对于测试工作者,这条原则表示任何一种测试方法(包括探索式测试)都不是无条件的最佳选择。
测试人员始终要评估当前情况,寻找适合当前语境的测试风格和技术。
原则3:人,在一起工作的人,是项目语境中最重要的部分。
这条原则强调了软件开发的社会学因素。
软件开发专家Tom DeMarco和Tim Lister指出:“本质上,我们工作中的主要问题,与其说是技术问题,不如说是社会学问题”[DeMacro99]。
而社会学因素的根源是“软件开发是一个创造与沟通的协作游戏(Game8)”[Cockburn07]。
在创造与沟通的过程中,一定是个体和他们的交互(Individuals and Interactions)起主要作用。
8 Game也可以翻译为“博弈”。
本书将其翻译为“游戏”是为了突出软件开发的乐趣、协作、沟通与互助。
软件开发团队的对手不是团队成员,而是亟待解决的问题。
第1章探索式测试的定义 5在软件测试中,以下观点反映了人的重要性。
⏹软件开发是具有挑战性的智力活动,开发人员(包括测试人员)的责任感、技能、状态将强烈影响软件实现和代码质量。
因此,招聘、培训、挽留高水平开发人员是软件企业最重要的工作之一。
⏹软件开发是一种创造与沟通的游戏。
软件企业应该营造一种开放、协作的工作环境,使得开发人员能够自如地去思考、去发明、去创造。
⏹软件测试的核心任务是寻找并传递信息。
在寻找信息的过程中,测试人员的能力和相互协作的水平将在很大程度上决定信息的数量和质量。
⏹软件测试提供信息服务。
服务就意味着有客户,测试人员是否成功,主要取决于是否很好地满足了客户的要求和最佳利益[Kaner01]。
也就是说,测试人员的重要任务是理解客户,并与他们展开有效的交流。
以上观点只涉及该庞大主题的一小部分。
笔者建议读者去阅读此领域的经典书籍(请参考本书附录中的“推荐阅读”)以获得更多见解。
原则4:项目的发展往往难以预料。
在一些语境中,项目的发展是可以预料的。
图1.1摘自Steve McConnell所著的《软件估算》,它显示了(对项目范围、代价、功能的)估算值是如何随着项目的进展变得准确的[McConnell06]。
随着时间的推移,项目的不确定性逐渐降低,当项目即将结束时,开发团队能够准确预期项目的结局。
但是,图1.1也提示了在项目的开始阶段,项目的不确定性非常高。
在初始概念(Initial Concept)阶段建立的估算值可能是实际值的4倍。
该原则并不是一个悲观的见解,相反它体现了一种实事求是的态度和对软件风险的成熟认知。
探索式测试有助于快速获得信息,从而降低软件项目的不确定性。
成功的测试团队在整个项目过程中会结合广度优先探索和深度优先探索,在特定的时间选择适合的方法,从而更明智地利用测试资源。