黑盒测试:是一种常用的软件测试方法,它将被测软件看作一个打不开的黑盒,主要根据功能需求设计测试用例,进行测试。
几种常用的黑盒测试方法有等价类划分法、边界值分析法、因果图法、决策表法。在实际运用中要选择合适的方
等价类划分法是一种典型的黑盒测试用例设计方法。采用等价类划分法时,完全不用考虑程序内部结构,设计测试用例的唯一依据是软件需求规格说明书。
等价类中任意一个输入数据对于揭露程序中潜在错误都具有同等效果。
等价类:某个输入的集合,集合中每个输入条件都是等效的,如果其中一个输入无法发现问题,集合中其它输入也是无效的
有效等价类:合理的输入数据
无效等价类:不合理的输入数据
所谓等价类,是输入条件的一个子集合,该输入集合中的数据对于揭示程序中的错误是等价的。等价类又分为有效等价类和无效等价类。有效等价类代表对程序有效的输入,而无效等价类则是其他任何可能的输入(即不正确的输入值)。
有效等价类和无效等价类都是使用等价类划分法设计用例时所必须的,因为被测程序若是正确的,就应该既能接受有效的输入,也能接受无效输入的考验。
等价类划分的原则
等价类划分法设计测试用例步骤
驾驶证年龄新规
对于小型手动(C1驾驶证)、自动(C2驾驶证)、残疾人专用自动挡载客汽车(C5驾驶证)的,驾考的年龄为18—70周岁。
有效等价类:驾驶人年纪18~70整数
无效等价类:年纪<18;年纪>70
网易邮箱注册
账号限制条件
6~18个字符,可以使用字母、数字、下划线、需以字母开头
实战案例一
微信红包,可以发送的金额范围
边界值分析法是一种补充等价划分的测试用例设计法则,它不是选择等价类的任意元素,而是选择等价类边界的测试用例。
从方法论上可以看出来,边界值分析是对等价类划分的补充,所以这两种测试方法经常结合起来使用。
实战案例二
学生管理系统中,可以录入考试成绩,成绩范围在0~100,考试成绩合格分是60分。
为了测试这个输入框,当然不会从0100挨个测试,根据需求可知,059任意整数,60~100任意整数可以看做是等价的,都可以揭露输入框潜在的缺陷。
在059之间和60100之间随机抽取整数验证,就成为”有效等价类”。
显然如果输入的成绩是负数,或是大于100的数,都成为”无效等价类”。
因此,测试用例的设计:
有效等价类
无效等价类
边界值分析法
我们继续看学生信息系统中“考试成绩”的例子,选取的边界值数据应该包括:-1,0,1,59,60,61,99,100,101。
等价类划分法和边界值分析方法都是着重考虑输入条件,而不考虑输入条件的各种组合、输入条件之间的相互约束关系。
如果输入之间有关系,例如,约束关系、组合关系,这种关系用等价类划分和边界值分析是很难描述的,测试效果难以保障,因此必须考虑使用一种适合于描述对于多种条件的组合,产生多个相应动作的测试方法,因果图正是在此背景下提出的。
比如注册功能,填写地区信息,条件一输入了北京地区,条件二的输入只能是昌平、海淀、朝阳等等信息,这就是种约束关系。
因果图(逻辑模型)是一种适合描述多种条件的组合、产生多种相应动作的测试方法,这就需要用因果图。
因果图-判定表
判定表通常由四个部分
分析输入条件与输出条件
输入1与输入2的数值区间:
输出信息
判定表绘制
从”用户登录”谈起
用户登录,是我们耳熟能详的基本功能,基本上你接触到的网站都需要登录,我们只需要输入用户名和密码,然后点击登录按钮,查看页面是否登录。这就是最基本,最典型的一种测试用例。
作为测试工程师,你的目标是要保证系统在各种应用场景下的功能是符合设计要求的,所以你需要考虑的测试用例就需要更多、更全面。
在具体的用例设计时,首先需要搞清楚每一个业务需求所对应的多个软件功能需求点,然后分析出每个软件功能需求点对应的多个测试需求点,最后再针对每个测试需求点设计测试用例。
面试官可能会问:”一个登陆页面,你给我设计一些测试用例吧。”
新人测试工程师的思路
现在,针对“用户登录”功能,基于等价类划分和边界值分析方法,我们设计的测试用例包括:
经验丰富测试工程师的思路
上面所有的测试用例设计都是围绕显式功能性需求的验证展开的,换句话说,这些用例都是直接针对“用户登录”功能的功能性进行验证和测试的。
但是,一个质量过硬的软件系统,除了显式功能性需求以外,其他的非功能性需求即隐式功能性需求也是极其关键的。
显式功能性需求(Functional requirement)
非功能性需求(Non-functional requirement)
安全性测试用例
用户密码后台存储是否加密;
用户密码在网络传输过程中是否加密;
密码是否具有有效期,密码有效期到期后,是否提示需要修改密码;
不登录的情况下,在浏览器中直接输入登录后的URL地址,验证是否会重新定向到用户登录界面;
密码输入框是否不支持复制和粘贴;
密码输入框内输入的密码是否都可以在页面源码模式下被查看;
用户名和密码的输入框中分别输入典型的“SQL注入攻击”字符串,验证系统的返回页面;
用户名和密码的输入框中分别输入典型的“XSS跨站脚本攻击”字符串,验证系统行为是否被篡改;
连续多次登录失败情况下,系统是否会阻止后续的尝试以应对暴力破解;
同一用户在同一终端的多种浏览器上登录,验证登录功能的互斥性是否符合设计预期;
同一用户先后在多台终端的浏览器上登录,验证登录是否具有互斥性。
性能压力测试用例
单用户登录的响应时间是否小于3秒;
单用户登录时,后台请求数量是否过多;
-高并发场景下用户登录的响应时间是否小于5秒;
高并发场景下服务端的监控指标是否符合预期;
高集合点并发场景下,是否存在资源死锁和不合理的资源等待;
长时间大量用户连续登录和登出,服务器端是否存在内存泄漏。
兼容性测试用例
不同浏览器下,验证登录页面的显示以及功能正确性;
相同浏览器的不同版本下,验证登录页面的显示以及功能正确性;
-不同移动设备终端的不同浏览器下,验证登录页面的显示以及功能正确性;
不同分辨率的界面下,验证登录页面的显示以及功能正确性。
可见,一个普通的登录功能,在不同的考虑场景下,居然涵盖如此多的测试用例,一个优秀的测试工程师必须具有很宽广的知识面,能够对被测系统的深入理解,明白安全攻击基本原理,掌握性能测试基本方法,才能设计出有的放矢的测试用例
穷尽测试
尽管我们提出了如此多的测试用例,一定还会有未涉及到的所有测试方法。
穷尽测试指的是包含了软件输入值和前提条件所有的可能的组合的测试方法,完成穷尽测试的系统中不该残留任何未知的软件缺陷,因为必须去做更多的测试去找到他们。
但是在绝大多数软件中,测试受到时间和经济成本的影响,不可能完成穷尽测试,而是基于风险驱动模式,侧重的设计测试用例,寻求缺陷和研发成本的平衡。
在软件测试的面试中,经常会碰到类似的问题,比如:如何测试一个杯子,或者如何测试一只笔。
要求你设计20个以上的测试用例。
这类的面试题目,是考察面试者是否熟悉各种软件测试方法,设计test case的能力。
回答这类问题的思路, 应该从软件测试的各种不同方法来联想,具体如下
功能测试角度
能否盛水
能否装其他液体,如雪碧,醋,硫酸,茶叶
杯子的容量
杯子的材质,纸质,玻璃,塑料
杯子是否有异味
….
界面测试
杯子客户是小孩,还是老人,还是年轻人,杯子封面设计
杯子颜色
杯子形状
….
安全性测试
杯子材料是否通过了可食用
是否结实,摔在地板上,水泥地,土地,是否会坏
是否容易破损,缺口是否会伤人
是否能够微波
….
性能测试
是否耐热
是否耐寒
如果纸质的,盛水几天后会漏水
杯子上的图案多久会掉色
…
易用性测试
杯子是否烫手
杯子把手是否好拿
杯子是否防滑
杯子是否容易喝到