探索性测试方法有哪些(简介这13种测试方式)

探索性测试方法有哪些(简介这13种测试方式)

出品|51Testing软件测试网

什么是局部探索性测试

局部探索性测试是James A. Whittaker提出的探索性测试方法中的一种(包括:局部探索性测试、全局弹缩性测试),通过该方法测试人员可以不必了解许多的测试信息(比如:项目环境信息、产品元素等等)就可以完成测试任务。

局部探索性测试的重点是指导测试人员结合自身经验、专业知识,以及软件在具体操作下的响应情况进行测试设计和执行测试。

#用户输入

用户输入简而言之就是输入是程序外部引发的,并且使得软件执行了某些代码。

设想一下:假如存在一个简单的输入框,可以接受字母和0-10000范围内的数字,那么可以存在多少种输入?至少是26*10000种(其中还不包括区分大小写字母)。

由此可见,对于软件来说,仅仅是一个小功能,都存在太多的输入或输入的组合,而测试人员想要穷尽所有的输入进行测试几乎是不可能的。

1)如何测试用户输入

James A. Whittaker建议我们可以参考以下几个方面测试用户输入。

合法输入和异常输入

对于开发人员而言,合法输入即是能够使程序正常运行的值,而非法输入即是输入值进入程序后会触发错误代码处理。

开发人员通常通过输入筛选器、输入检查和使用异常三种方式定义错误处理程序。从测试人员角度,对于这三种输入方法的检查,可以考虑以下方面:

常规输入和非常规输入

常规输入指的是程序定义的、开发人员计划中的输入,也是用户经常使用的输入。非常规输入可以是那些使用极少的输入,或在开发人员计划之外的输入。

例如:常见的输入测试来说,非常规输入可以试试特殊字符@¥%&等。

默认输入和用户自定义输入

开发人员必须设定一些默认输入(可以是定义的参数或者NULL参数),这些输入测试人员在测试时可以不做什么操作,选择使用默认值。用户自定义输入是用户忽略开发人员预置的输入,输入自己想要的内容。

从测试人员角度,可以从以下方面考虑:

使用输出来指导输入

列出程序可能的输出结果,选择感兴趣的结果逆推得到可能的输入组合。把输入和输出配对是常用的一种手段,可以保证所有有趣的场景都被测试覆盖到。

2)小结

局部探索性测试关于用户输入的测试点建议,总结如下图所示:

#状态

设想一个场景:安装一个软件,初次安装和再次安装是不是能完全等同?答案肯定是不能。因为初次安装和再次安装,环境配置、资源初始情况是不同的。

初次安装可能需要设定一些环境变量,而再次安装时这些环境变量可能因为卸载时未被清理而保留下来,因此不需要设定。

再者,初次安装硬件资源(内存、磁盘容量)和再次安装肯定是有所差异的,再次安装有可能会因为初次安装卸载后的残留文件占用硬件资源,导致再次安装失败(假设硬件资源紧张情况下)。

而这些,由于输入造成的累积效应或程序内部变量数值发生的变化,称作状态的改变。

1)如何测试软件状态

可以从以下方面考虑:

使用状态信息来帮助寻找相关输入

如果两个或多个输入存在某种关联,那么他们应该放在一起测试。

而在测试过程中,我们需要观察状态信息对结果的影响,以此来确定需要输入的组合。例如:安装某个软件,需要设定所需磁盘空间大小,但需要大于128MB,而 硬件空间只剩余500MB。

此时,设计软件安装测试时,超过500MB由于磁盘空间不足安装失败,则应该考虑到硬件软件配置范围应在128MB到500MB之间。

使用状态信息来辨识重要的输入序列

当一个输入导致状态信息变更时,多次同样的输入会导致一串状态变化。如果这些变化累加起来,就需要考虑是否会导致溢出。

例如:对软件接口进行压力测试时,内存等资源消耗会逐渐上升,试着观察加压持续一段时间后,软件内存释放是否及时,是否导致了内存溢出。

2)小结

局部探索性测试关于状态的测试点建议,总结如下图所示:

代码路径

一个程序有很多条代码路径,测试人员需要了解不同的输入在程序内部运行构成的路径。

如何测试代码路径

例如:测试人员可以使用UML流程图工具,如visustin绘制出代码路径。

在测试过程中,画出代码路径图,使用最短路径法、长路径法等进行测试,观察程序在运行过程中的状态或输入数据的变化。

#用户数据

测试人员有时可能会面临这样一种情况:为什么我们测试时没有发现的故障,使用真实数据测试时故障就出现了。

这是因为真实数据通常包含了测试人员不了解的相互关系和结构,而且测试人员也无法凭空推测出真实数据的相互关系和结构。那么应该如何测试用户数据呢?

1)如何测试用户数据

测试用户数据时,需要考虑到真实数据的几个特点:量大、隐私性、安全性。

随着用户数据库不断被增删修改,长年累月积累下来的数据量会非常大。而量大时就会引发存储问题。

例如:我们测试环境模拟数据量大小为10GB,而真实数据量大小为100GB,这就会引发大体量问题下的存储、运算、处理等问题,而这些问题可能在我们测试环境中不容易被触发。

此外,用户数据的隐私和安全问题也是测试时必须考虑的。当我们测试使用真实数据时,需要保护真实数据不被篡改、增删,且真实数据中的隐私(例如用户账号、密码等)不被暴露或恶意窃取。

2)小结

局部探索性测试关于用户数据的测试点建议,总结如下图所示:

#运行环境

当我们把软件安装到一个崭新且它从来没见过的环境中时,可能会失败。为什么呢?因为环境本身也是一种输入源。所以测试人员在产品发布前应尽量尝试各种各样的环境。

1)如何测试运行环境

运行环境包括什么呢?总体来说,就是使用的操作系统和当前配置,以及同一操作系统上可能会和软件交互的其他程序,还包括网络连接情况、带宽、性能等因素。

运行环境测试可以从兼容性方面考虑,如:软件兼容性、硬件兼容性、系统兼容性、网络兼容性、接口兼容性等。

软件兼容性

指的是当前软件与其他竞品和非竞品软件的兼容性,是否可以同时运行。

硬件兼容性

指的是指多个独立的硬件设备能否在操作系统的统一调度下协调工作发挥性能互不排斥。

例如:不同的服务器生产厂商对内存、硬盘等插槽都有设定,要求符合响应规格的内存条或硬盘才能在其服务器上使用。这就是硬件兼容性的要求和体现。

系统兼容性

系统兼容性大家并不陌生,指的是对操作系统特定的要求。系统兼容性又可以分为:相同操作系统不同版本兼容性,以及不同操作系统兼容性。

网络兼容性

查看软硬件在不同网络类型(如热点、WIFI、2G/3G/4G/5G)下的运行情况。

例如:5G推广后,某些早前的手机不支持5G网络使用。

接口兼容性

接口兼容性在软件测试中也时常触及,软件接口兼容通常表现在接口参数的兼容性。

例如:某个程序对外查询接口V1版本需要传入2个参数,而V2版本需要传入3个参数,而这种改变会影响其他调用该程序接口的应用。因此该程序在涉及或处理时需要考虑到接口兼容性。如其他应用不传入第3个参数时,该程序提供默认值。

2)小结

局部探索性测试关于运行环境的测试点建议,总结如下图所示:

总结

测试本身是个很复杂的工作,需要测试人员结合自身经验、知识、技能等方面,才能有效地进行。

本文讲述了James A. Whittaker《探索式软件测试》一书中关于局部探索性测试的5个方面,及相应的某些启发点。最后总结为下图:

……

本文为51Testing软件测试网

第六十四期51测试天地内容

发表评论

登录后才能评论