读《探索式测试实践之路》图书分享

836 阅读12分钟

一、探索式测试的定义

1.1 定义

探索式测试(exploratory testing)是一种自由的软件测试风格,强调测试人员同时开展测试学习、测试设计、测试执行和测试结果评估等活动,以持续优化测试工作。

1.2 定义的核心

首先,探索式测试是一种软件测试风格,而不是一种具体的软件测试技术(如等价类划分、边界值分析等)。作为一种思维方法,探索式测试强调依据当前语境选择合适的测试技术,而不局限于特定的测试技术。测试人员可以在探索式测试中使用任何一种测试技术,也可以将探索式测试应用于任何测试阶段。

其次,探索式测试强调独立测试人员的自由和责任。测试人员应该为个人和团队负责,调动所有能量,发挥人的灵活性,在整体上持续优化个人和团队的产出。

最后,探索式测试建议在整个项目过程中,将测试相关学习、测试设计、测试执行和测试结果分析作为相互支持的活动,并行地执行。旨在将测试学习、测试计划、测试执行和测试结果分析作为一个循环快速地迭代,以不断收集反馈、调整测试、优化价值。

1.3 探索测试和即兴测试的区别

探索式测试与即兴测试都强调“即兴发挥”,即利用直觉和经验,快速地测试软件,并不停地调整策略。

探索式测试是带着“反思”的测试。在探索测试中,测试人员不断地提出假设,用测试去检验假设,并分析测试结果来证实或推翻假设。在此过程中,测试人员持续完善头脑中的产品模型和测试模型,然后利用模型、技能、经验去驱动进一步的测试。

即兴测试往往利用错误猜测、典型风险和常见攻击来快速地试探软件,可以在短时间内发现许多软件错误。但是即兴测试不强调测试的系统性和完整性,测试遗漏的风险很高,也难以发现一些需要深入研究才能发现的缺陷。

二、探索式测试设计概论

2.1 探索式测试的思维模型

image.png

整理(collation):尽最大可能收集关于被测产品的信息,去了解和理解它们。

排序(Prioritization):确定所有测试任务的优先级。

调查(Investigation):对即将执行的测试任务进行仔细的分析并确定测试输入和测试输出。

实验(Experimentation):实际地去测试,验证我们的预测是否正确,检查我们在整理阶段获取到的信息是否正确。根据实验结果,测试人员将收集更多的信息,并调整测试任务的优先级。

2.2 测试过程

1、测试过程需要考虑的因素

image.png

2、探索式测试就像对一个人进行面试,测试人员需要向面试对象提出高质量的问题(一个问题类似于一个测试想法),并根据面试对象的回答提出更好的问题。为了提高发问的水平,测试人员需要着重培养如下的能力和技巧:

  • 提出有用的问题(目的驱动问题)
  • 观察什么事情正在发生
  • 描述自己能够感觉到或看到的东西
  • 对于自己的所知进行批判性的思考
  • 组织和管理业务上的规则
  • 能够提出假设和进行试验验证
  • 尽管已经了解,但仍然进行深入思考
  • 分析其他人的思考方式
  • 根据因果关系进行推导

3、根据以下因素对产品、需求和模块进行测试分析:

  • 产品和项目风险
  • 测试覆盖
  • 测试先知
  • 资源和限制
  • 价值和成本
  • 已存在的缺陷

4、在试验的过程中,测试人员可能遇到令人困惑的问题,这时可以考虑使用以下方法来解除疑惑

  • 简化自己的测试思路
  • 保留测试现场并寻求帮助
  • 不断重复执行自己的操作
  • 返回到一个已确认过的状态
  • 一次只考虑一个因素,一次只修改一个因素
  • 做出精确的观察

2.3 测试覆盖

第一、结构覆盖。测试人员分析产品是如何构成的,然后用测试去覆盖产品的重要组成部分,主要关注的是产品的内部结构。

第二、功能覆盖。测试人员要分析产品包含哪些功能,然后用测试去覆盖功能点,主要关注的是产品的功能或事特性。

第三、数据覆盖。测试人员要分析产品会处理什么数据、传输什么数据、输出什么数据,并用测试覆盖这些内容,主要关注的是产品使用过程中的数据处理。

第四、平台覆盖。测试人员要分析产品依赖于什么平台及平台特性,并用测试覆盖这些平台和特性,主要关注的是的是产品所依赖的环境和第三方软硬件产品。

第五、操作覆盖。测试人员要分析用户是如何使用产品的并用测试覆盖使用流程和操作,主要关注的是产品的使用场景,考察稳定性、可用性、安全性、可扩展性、性能、可安装性、兼容性、可测性、可维护性和本地化等因素。

第六、时间覆盖。测试人员要分析产品受什么时间因素的影响,并用测试去覆盖有风险的因素,主要关注产品使用是否受时间影响。

三、单个特性的测试方法

功能测试基本层次图 image.png

3.1 联想输入模型

image.png

image.png

image.png

image.png

3.2 互联网测试模型

3.2.1 多线程并发模型

image.png

1、多线程创建、更新、删除某类数据,以多线程方式(同时打开多个页面或浏览器或使用工具模拟)来操作数据并检查数据的完整性。

2、同时使用多个浏览器或一个浏览器的多个标签页进行测试,考虑cookie值的变化是否影响后续的操作。

3.2.2 页面安全测试模型

image.png

1、在功能测试中,需要考虑URL的安全问题和XSS漏洞。

2、在测试页面中输入框的校验时,考虑该页面上是否存在XSS漏洞,可以使用安全测试手段来做更多安全性测试。

3、在URL中加入一些JS代码从而实现页面URL跳转错误。考虑URL里面的参数名称和数据库中相应字段的对应关系,或修改URL参数以尝试访问某些本应不可操作的功能。

举例:

URL:www.foo.com/xss.php?id=…

进行XSS 测试,将如下payloads 分别添加到id=1中:

image.png

3.3.3 功能操作异常模型

image.png

1、编辑前后数据的变化,不仅检查页面,还要检查数据库中字段值的变化

2、进行新增、更新、发布等管理操作时,操作成功后考虑刷新页面或取消提交,或考虑使cookie失效,或使会话(session)数据没有更新,或密切观察第一次提交时是否存在异常

3、一系列操作后,考虑更新后的数据是否对其他页面的功能有影响

4、操作功能,检查功能执行的响应速度(消耗的内存空间)来判断功能是否正确执行完成,或是执行过程中有什么异常

3.3.4 搜索查询异常模型

image.png

1、进行搜索或查询时,多考虑特殊字符,如空格、&、/、等等

2、大数据量时的查询是否会有超时的问题

3、搜索功能,查看搜索查询传入的参数的正确性和完整性,以及和搜索结果的对应关系

4、先是查询项中存在数据获取的,在查询一个不存在的任何记录的情况后,再次查看该查询项的数据获取是否正确,考虑页面缓存,也同样需要考虑搜索结果中含有边界属性值的情况

四、交互特性的测试方法

4.1 场景操作模型

image.png

下面是对各种方法的说明:

1、插入步骤-增加更多数据。在基础场景的基础上增加有意义的数据,比如购物车功能,基础场景要求在购物车中加入某一件商品,新的场景要求不仅仅加入那件商品,还需要加入更多的商品。

2、插入步骤-使用附加输入。需要了解哪些附加功能和基础场景提到的功能有关联,然后去输入和选择相关的值。

3、插入步骤-访问新的界面。在基础的场景上触发一些新的界面、对话框等。

4、删除步骤-删除部分步骤。在基础场景上,每次删除一个步骤,直到或得一个最短的测试用例,查看功能在缺少信息或从属功能时的正确性。

5、替换步骤-替换部分步骤。比如输入名称来搜索换成输入ID来搜索,鼠标点击触发操作换成键盘触发操作。

6、重复步骤--重复部分步骤。比如入库第一次选择A标签,重复此素材入库,选择B标签,查看数据正确性

7、替换数据-替换部分数据。主要是分析场景使用了什么数据源,数据源有哪些不同的选择,数据源数据量大小等,确保数据源间的切换是稳定可靠的,验证在不同环境下运行的兼容性

8、替换环境-替换硬件。在不同的机器上运行该场景,如内存较小的机器、32位或64位操作系统、单核或多核CPU。

9、替换环境-替换容器。在不同操作系统、浏览器、运行平台或插件配置等的行为。

4.2 漫游探索模型

image.png

1、地标测试法

访问淘宝网的首页,首先确定关键特性,也就是该测试法中的地标,包括搜索商品、查看商品详情页面、提交评价信息、确认订单页面、付款等。测试人员有顺序地探索这些关键特性(地标),如从第一个地标(搜索商品)漫游到最后一个地标(付款),沿途进行各种测试。其中,可以考虑地标之间的关系,从而探索和观察这些地标交互操作后的效果。

2、快递测试法

访问淘宝网首页,登录后,进入账号管理页面,再进入收货的地址页面,查看在哪里新增收获地址,修改收货地址、删除收货地址。分析哪些功能特性使用到收货地址,如确认下单页面,物流管理页面、账号管理页面。通过新增、修改和删除收货地址,测试这些与收货地址紧密相关的功能。主要是检查交互时需要变化的数据是否正确。

3、遍历测试法

访问淘宝首页,卖家会员登录后,进入商品管理页面。测试人员对商品管理的功能进行分组,如罗列出商品的状态类型;下架、无法搜索到、上架、正常、不可售、编辑等。然后,测试人员遍历访问商品状态类型,如将一个商品下架,编辑该商品的属性,再将商品修改为上架状态,最后将商品出售。主要关注的是相似的、有顺序关系的功能特性之间的交互。

4、博物馆测试法

测试人员查看代码库和程序集文件 ,找到遗留代码,针对最近被修改过的遗留代码进行测试。主要是关注老功能特性。因为老代码或修改后的代码在新环境中运行很容易发生失效的情况。

5、上一版测试法

之前是用邮箱进行会员注册,随着系统升级,要求用户用手机号进行注册,测试即要保证新注册功能正常,页要保证之前邮箱注册的可以正常使用。如果新版本重新实现或是删除了一些功能,测试人员应选择新版本定义的方法来输入数据和使用软件,并检查产品没有遗漏必须的功能。

6、深巷测试法

使测试人员关注用户较少使用的功能特性。测试人员页可以把最流行和最不流行的特性放在一起混着测,有时会发现一些意想不到的问题。

7、长路径测试法

长路径测试法使测试人员关注哪些执行路径较长的功能特性。测试人员要访问那些离应用程序开始点尽可能远的特性,找到需要多次输入才能被用到的特性,需要找到那些经过最多界面才能访问到的特性。(员工能力追踪或是推送案例)

漫游测试法在一定程度上可以快速地保证测试的质量和覆盖率。测试人员熟悉了这些测试方法,就可以在需求细节未明确的情况下进行更有效的探索式测试,从而弥补前期在需求测试和评审中的不足。当然,测试人员在需求阶段的参与是非常重要的,应该基于需求的测试法来进行需求规格的分析和测试,从而最大限度地保证需求的正确性和完整性。