软件测试用例设计方法-错误推测

前言

从输入、输出、数据结构、文件系统方面,进行错误推测设计。

错误推测方法的基本思想: 根据经验、知识、直觉,列举出程序中所有可能有的错误和容易发生错误的特殊情况,根据他们选择测试用例。

1.1 测试若干原则

(1) 测试不仅验证软件正确,还要攻击软件,发现错误;

(2) 测试要时刻保持怀疑的态度,具有缺陷预防意识;

(3) 测试要寻求系统设计、功能设计的弱点;

(4) 设计负面的、异常的测试,如考虑错误的或者异常的输入,往往可以发现更多的软件缺陷;

1.2 什么是错误推测

错误推测是从上面测试原则出发来设计用例的方法,为了发现软件更多的错误和缺陷。在测试程序时,人们可以根据经验或直觉推测程序中可能存在的各种错误,从而有针对性的编写检查这些错误的测试方法。错误推测也叫故障模型。面试时问用哪些方法设计编写用例,场景法、等价类、边界值、决策表、错误推测方法。用错误推测,不用故障模型,每家公司的故障模型不一样。

错误推测分类:

(1) 输入数据测试方面;

(2) 输出数据测试方面;

(3) 数据结构测试方面;

(4) 文件系统方面;

1.3 输入数据方面的错误推测

输入数据错误推测包括输入非法、默认值、特殊字符、合法数据非法组合、复制粘贴强制输入

1.3.1 输入非法数据

与无效等价类有点类似,所以会存在交叉重复的地方,设计时将他们融合在一起使用,有重复的,一个地方使用即可,减少冗余。

输入非法数据一般用于键盘输入数据时。输入非法数据通常用于补充无效等价类测试点。

1.3.1.1 测试方法

1. 输入非法类型;

比如,输入数字却输入字符,输入整数却输入小数等。

2. 输入非法范围、长度;

(1) 比如,输入ABCD中的一个,却输入F;

(2) 比如,输入1到10的整数,却输入11;

(3) 比如,输入10个以内的字符,却输入11个字符;

3. 输入非法格式;

(1) 比如,年月日20250322,却输入250322;

(2) 比如,输入小数3.14是正确的,输入3.1.4就是非法小数了;

1.3.1.2 注意事项

  1. 错误信息的检查:需要额外考虑错误提示信息的内容;

提示内容需要恰当。比如,人被石头绊倒,就不能说跑的太快了。

2. 错误信息和错误要对应一致;

比如,明明是姓名没填,却说性别没填;

3. 错误信息不能为空;

4. 错误信息的内容不能只是错误代码,不能包含开发信息;

5. 错误信息不能中英文混合;

1.3.1.3 案例

软件测试用例设计-错误推测法1

对上面输入框,使用非法数据验证,考虑无效情况。

  1. 年龄,假设范围为[18,40]的整数。非法数据如下:

非法类型:字符、小数;

非法范围:<18、>40;

  1. 两位以内的整数,范围为[-99,99]的整数。非法数据如下:

非法类型:字符、小数;

非法范围:<-99、>99

  1. 文件名,windows文件名[0,255]个字符。非法数据如下:

非法长度:0、>255

非法格式:文件路径连接符//、文件后缀不写

  1. 日期,现在和将来的日期,格式X年X月X日,间隔符用-。非法数据如下:

非法类型:字符、小数

非法范围:

(1) 过去的日期

(2) 月份不在[1,12]、日期不在[1,31]

(3) 月份和日期不匹配,如2月30日

非法格式:

(1) 不是年月日这种格式

(2) 间隔符不是-

1.3.2 输入默认值

软件测试用例设计-错误推测法2

word2000进入索引和目录窗口,点击“目录-选项”,进入“目录选项”窗口,什么都不修改,点击“确定”,然后与最开始的目录窗口比较,红框部分的“显示级别”不见了,标题错乱了。

上面的操作属于使用默认值方法测试。适用于有默认值的地方。

测试方法:

(1) 接受软件的默认值;即什么都修改,直接点确认;

(2) 键入空值;即删除原有的默认值;

(3) 将默认值改为另外一个值;

(4) 将默认值改为另外一个值,再改为空;验证多次赋值是否正确;

1.3.3 输入特殊字符集

适用于不能输入有特殊含义的字符时。

1.3.3.1 测试方法

准备一个特殊字符清单,然后和开发确认。

(1) 根据被测软件所属的操作系统、程序设计语言、后台数据库以及具体业务等信息列出表格,进行讨论,标明哪些需要测试,哪些需要剔除。

(2) 了解具体行业知识,具体问题具体分析。

1.3.3.2 案例1

在2008操作系统上面,文件命名不能使用下列特殊字符(33个):

不能使用: \ /<>|“:*?,com0-com9,lpt0-lpt9,prn、aux、nul、 con。

思考

用户名有哪些特殊字符?

windows系统(可能):admin、administrator;

linux系统(可能):root;

数据库(可能):

系统用户:sa、system;

1. SQL注释【必测】

(1) 减减--;(Oracle、SQLServer)

(2) 空格减减--、#;(MySQL)

2. 字符串定界符【必测】

(1) 单引号’;(Oracle、SQLServer)

(2) 单引号’、双引号”;(MySQL)

3. 测试方法:

(1) 单引号减减;(Oracle、SQLServer)

(2) 单引号空格减减;(MySQL)

(3) 双引号空格减减;(MySQL)

(4) 单引号#;(MySQL)

(5) 双引号#;(MySQL)

比如,登录后台语句检查用户名和密码:

SELECT * FROM USER WHERE NAME=’张三’ AND PWD=’123’;

现在用单引号减减“'--”测试,用户名设置为张三’--,查询语句为:

SELECT * FROM USER WHERE NAME=’张三’--' AND PWD=’123’;

而—是注释,导致后面的语句都不执行,存在很大风险。

1.3.3.3 案例2

QQ昵称、聊天内容有哪些特殊字符?

QQ昵称:国家领导名字;

聊天内容:金钱、脏话;

1.3.4 输入合法数据的非法组合

适用于输入值之间存在依赖关系时。

测试方法:输入可能是出现问题的组合值。

案例:

软件测试用例设计-错误推测法3

天津不存在海淀区,单独看天津市和海淀区没问题,组合在一起就有问题。

通常在前端联动处理。

比如,身份证倒数第2位奇数表示男,偶数表示女。现在有个身份证输入框,输入的身份证倒数第2位位1表示男,再有个性别单选框,选择女,此时应该报错。当然,一般不会有这种程序,只是个合法数据的非法组合的例子。

1.3.5 通过复制粘贴强制输入程序不允许输入的数据

比如,密码输入框,通常不能复制粘贴。

1.4 输出数据方面的错误推测

输出数据错误推测包括:一种输入多种输出,不能遗漏,数据库也得检查。

1.4.1 同一个输入产生多种输出

案例

输入:一个电话打来

输出:

(1) 状态1:等待接听。

(2) 状态2:占线。

(3) 状态3:停机。

(4) 状态4:无法接通。

(5) 状态5:关机。

(6) 状态6:空号。

测试方法:

(1) 详细测试每一种输出,不要有遗漏。

(2) 熟悉被测软件业务知识,阅读各种程序文档,明确输入可能产生的输出,列出关于程序输入输出的一个列表,然后进行测试。

思考:微信中有没有类似的测试?

微信视频:

(1) 接受;

(2) 拒绝;

(3) 超时;

(4) 关闭微信;

1.4.2 验证输出结果的正确性

软件测试用例设计-错误推测法4

比如,上图的月工作天数写32,点击“保存”后,成功保存到数据库。这是一个缺陷,因为一个月最多31天。

测试方法:

  1. 不仅测试输入的正确性,还要检查结果的正确性

检查前端和后端数据库。

2. 测试人员要尽可能多的学习所涉及问题的领域。

1.5 数据结构方面的错误推测

数据结构的错误推测包括变量、数组的溢出,计算结果溢出,操作数与操作符不符合。

1.5.1 数据结构溢出

适用于程序中存在变量、数组等数据结构时。

测试方法:

1. 变量

(1) 上溢:值太大。

(2) 下溢:值太小。

比如,java的byte范围[-128,127],存129或-130。

2. 数组

(1) 上溢:数据量太多。

(2) 下溢:数据量太少。

比如,java的byte数组a[]=new byte[5],赋值a[5]=1,a[-1]=2,下标越界,下标范围[0,4]。

思考

QQ中有相关案例吗?

QQ好友数量上限为1000。测试添加第1001个好友。删除全部好友后再测试删除好友。

1.5.2 计算结果溢出

案例

软件测试用例设计-错误推测法5

比如,第一个和第二个数,范围[-99,99],结果数据类型为java的byte,范围[-128,127],那么,-99-99和99+99将不在[-128,127]范围。

测试方法:输入非法值或很大与很小数据,强制结果产生上溢或下溢

1.5.3 操作数和操作符不符

案例

是否是缺陷?

软件测试用例设计-错误推测法6

如果是缺陷,开发人员修改成什么样的结果,你作为测试人员会确认这个缺陷已经被修复?

适用于需要进行数值计算程序和图形操作程序的测试时,如加、减、乘、除等。

测试方法:找到程序中容易引起操作数和操作符不符的计算、表达式等。

1.6 文件系统方面的错误推测

文件系统的错误推测包括:空间不足、访问权限不足、介质损坏不可用。

1.6.1 使文件系统超载

适用于数据存储到硬盘中时。

案例

假设“软件测试工程师管理系统”要保存1万个工程师信息,则保存时engineer.txt文件可能会有20M大小,如果此时磁盘只有10M可用空间了,“软件测试工程师管理系统”会如何动作呢?提示空间不足,要保存的数据不丢失。

测试方法

(1) 创建满容量或近乎满容量的文件系统,然后强制执行各种通过输入或输出访问文件系统的操作。

(2) 打开足够多的文件,文件打开时会强制创建备份副本,从而占用双倍的存储空间。

(3) 使用工具Canned Heat,模拟文件系统超载。

1.6.2 更改文件访问权限

适用于对文件进行读写的程序。

测试方法

  1. 不同的用户对相同的文件具有不同的访问权限,需要考虑同一台机器的多个用户操作相同文件的权限问题。

(1) 打开一个文件,在操作系统中修改该文件的访问权限。有些操作系统允许权限高的用户控制一般用户已经打开的文件。

  1. 两个应用程序打开,关闭同一个文件。

(1) 把同一应用程序的不同版本安装在同一机器上,在不同版本的应用程序中打开和关闭同一文件。

(2) 试着在某个应用程序中打开在另一个程序中已打开的文件,这可能会导致文件访问权限上出现冲突。

1.6.3 使介质忙或不可用

适用于应用程序的运行需要消耗大量内存或运行时需要其他相关软件同时运行的情况。

大多数操作系统能同时运行多个应用程序,但相互切换时会有延时,但是没有对错误响应。

测试方法

(1) 通过启动大量应用程序,强制它们都打开并保存文件来使文件系统处于忙的状态;或者同时下载大量文件也可以使后台拥挤。

(2) 使用一些测试工具来模拟磁盘的状况。

1.6.4 介质损坏

使用场合:损坏的介质可能使操作系统传回错误代码,这些错误代码可能没有在应用程序中编程使用。

测试方法

(1) 损坏介质的方法使用不多,只有少数公司采用,大多是开发操作系统、设备驱动程序以及以安全为主的应用程序的公司会采用这种测试方法。确定是否使用该方法,主要考虑数据对用户的重要性。

(2) 该方法可以使用实际损坏了的介质。检查应用程序对错误的处理能力,应用程序可以对错误进行处理或者将问题告诉用户,并且要确保用户数据文件不丢失、不损坏。

(3) 通过软件模拟。

1.7 错误推测总结

错推测测试也叫迫使出错测试。

(1) 输入非法类型。

(2) 输入非法范围(数值)。

(3) 输入非法长度(个数)。

(4) 输入非法格式。

(5) 输入默认值。

(6) 输入特殊字符。

(7) 输入合法数据的非法组合。

(8) 一个输入多个输出不要遗漏。

(9) 输出结果(含数据库)要正确。

(10) 上溢、下溢(含结果)。

(11) 操作数与操作符不符。

(12) 文件超载。

(13) 文件权限不足。

(14) 介质忙或不可用。

(15) 介质损坏。