任何一个软件公司发布的产品都有缺陷,所以软件测试是产品开发过程中必不可少的一部分。经过长期的发展,软件测试方法不断完善,探索式测试方法也是其中的一种。本文将结合实际工作谈谈对探索式测试方法的理解。
探索式测试方法主要分为两类:
局部探索式测试法针对测试人员在运行任何一个测试用例时所需要作出的细微决定;
全局探索式测试法针对测试人员在编制测试计划和测试用例设计时所需要考虑的广泛的战略性问题。
一、局部探索式测试法
1 输入:合法输入、非法输入
1)输入筛选器
第一,开发是否正确的实现了该功能?
第二,是否可以绕过屏蔽器?或者当输入值进入系统后还可以修改?
2)输入检查
测试时必须仔细阅读每一条错误信息,检查该信息是否写错了,错误信息还可以透漏开发编程时的一些想法。
3)异常处理
如果测试看到一个通用出错信息,建议测试再反复测试同一段函数,继续使用刚才引发异常的输入数据,或稍微修改一下,看看会不会导致出错。尝试运行其他一些要调用该函数的测试用例,看看会发生什么情况。
4)常规输入和非常规输入
和Ctrl、Alt、Esc按键组合的字符,操作系统、编程语言、浏览器和运行时环境的特定保留词或按键。
5)使用输出来指导输入选择
①首先确定希望程序产生的输出结果,然后考察所有用户场景,来确定输入;
②先观察输出结果,再选择新的输入,使新的输出为重新计算后的结果。
2 状态
软件的一个状态就是状态空间中的一个点,它由所有内部数据结构的取值来唯一确定。
①使用状态信息来帮助寻找相关的输入,如果两个或更多个输入在某种程度上关联,那么它们应该放在一起测;
②使用状态信息来辨识重要的输入序列,当一个输入导致状态信息被更新时,紧接着再多次使用同样的输入会导致一连串的状态变化。
对数据库中的表进行多次更新,查看数据是否会溢出。
3 代码路径
测试需明确知道代码的所有选择结构,并理解哪些输入会导致软件走这条分支而不走另一条。
4 用户数据
①如何模仿真实的用户数据
②使用真实的用户数据时,应考虑如何解决“隐私问题”。
5 执行环境
是指测试使用的操作系统及其当前的配置,还包括运行在同一操作系统上会和被测试软件进行交互的其他一些应用程序,以及会间接或直接影响被测试软件本身或影响被测试软件运行的任何驱动程序、代码、文件、设置等,还包括软件当前连接的网络情况、网络的可用带宽、性能等。
二、全局探索式测试法(漫游测试)
在软件测试中,我们可以把整个测试过程比喻成游客在城市中旅游的过程,测试类型对应城市中的不同区域,针对每个区域制定不同的游览路线。以下将结合实际测试过程中的案例,来简单阐述全局探索式测试法的应用。
1 商业区测试类型(软件的重要功能模块)
1)指南测试法:
测试严格遵照用户手册的建议执行操作。在测试一个全新的软件之前,测试人员需要详细阅读需求文档或使用手册,积极与开发人员沟通以充分了解产品功能;在测试产品的新版本之前,查看jira中的新特性描述、新的需求文档以及之前版本存在bug的用例。
2)地标测试法:
通过指南测试法确定关键的软件特性(地标),再确定地标的前后顺序,然后从一个地标执行到另一个地标来探索应用程序,直到访问了所有的地标。在这个过程中,需要记录已经使用过哪些地标。
在BC-ETL的某次测试过程中,需要测试数据流中的多个流程,此时每个流程都作为一个地标,通过多次调换、添加或删除流程的来测试整个数据流能否顺利执行。
3)极限测试法
也称找麻烦测试法,即故意设置各种障碍来观察软件如何反应。
在罗网项目某次迭代中,测试基站查询模块,选择使用基站名称查询,在搜索框中输入覆盖范围很大的区域名称(如:南通)进行查询,页面因加载时间过长导致卡死。
4)深夜测试法
当下班之后软件执行各种维护任务,将数据归档,备份文件等,程序不自动执行的时候,测试人员强制程序执行。
2 历史区测试类型
指遗留的代码,或是在前几个版本就已经存在的软件特性,也指那些用于修复已知bug的代码。
1)恶邻测试法
某个区域代码bug很多,建议对邻近区域进行详细的测试,以此来验证那些修复已知bug的代码没有引入新的缺陷。
2)博物馆测试法
找出遗留代码和老的可执行文件,并确保它们在测试中受到和新代码同样的待遇。在实际测试过程中,可以理解为对新版本中没有改动的功能进行回归冒烟测试。
在罗网项目的某次回归冒烟测试中,测试研判模型的多案时空碰撞模块,正确创建分析任务,在任务列表中查看分析结果,页面右上角提示出错,无法查看。
3 娱乐区测试类型(辅助特性)
1)配角测试法
鼓励测试专注于某些特定功能,特别是紧邻主要功能的辅助功能。
罗网项目的主要功能为通过研判模型对各类案件及人员进行分析,然而每次审批几乎都离不开新建工单的过程,所以测试时对研判模型的每个模块都增加了许多新建工单的用例。
2)通宵测试法
即使程序长时间运行,不去关闭,观察程序是否会发生异常。
4 旅游区测试类型(快速访问软件的各种功能)
1)收藏家测试法
收集软件的输出,越多越好。确保能观察到软件能生成的任何一个输出。此方法庞大,通常以小组为单位进行。
在广西上网行为分析项目中,为确保接收到的数据格式和内容都正确,需提前造出大量用户数据,模拟实际的运行环境批量发送数据,批量查看输出结果。
2)超模测试法
在采购部供应链大数据平台的某次测试中,由于前端页面没有设置按比例缩放,导致页面在小屏幕上无法显示完全。
5 旅馆区测试类型(经常被忽略或者在测试计划中较少描述的次要及辅助功能)
1)取消测试法
启动操作然后停止它。可以对任何提供取消功能或者需要较长时间才能完成的功能做同样的操作。如果没有取消按钮,对于在浏览器中运行的程序可以试着按Esc键或是程序中的回退按钮。
2)懒汉测试法
测试人员做尽量少的实际工作。接受所有默认值,保持输入字段继续为空,在表单中尽可能少填数据,在进入下一个界面时不点击任何按钮或者输入任何数据等等。
传统的手工测试方法需要提前编写测试用例,然后严格地依次执行每一个用例,引入探索式测试方法可以在测试过程中更及时地发现问题并补充用例,两种方法相结合才能更有效地把控产品的质量。
如果未来开发技术大幅进步,也许会有一天,测试人员不再是必需的了。这当然是软件厂商和用户的福音,但是在可预见的未来,检测软件缺陷的最好方法还是使用测试技术,而不是开发技术。原因很简单,太多的不确定因素,太多的场景,可能导致自动化测试失效的情况太多了,无法一一跟踪。这一切都需要“人脑”的介入,现在如此,下个十年不会变,再过几十年可以依然如此。
作者介绍
孙小霞 中国移动苏州研发中心 大数据产品部 技术总监
王均 中国移动苏州研发中心 大数据产品部 测试工程师
周煜澄 中国移动苏州研发中心 大数据产品部 测试工程师