## 一.什么是黑盒测试?
黑盒测试:其实是测试中把我们的被测软件或者系统看成一个不能打开的盒子,在完全不考虑程序内部结构和内部特性的情况下,通过相关暴露出来的[**接口**]程序进行测试。
黑盒测试只检查程序的功能是否按照我们的需求规格说明的规定,能正常的使用;能够有正确的输入输出信息。着眼于程序的外部结构,不考虑程序的内部的逻辑。
一般来说关注对软件的界面和可见的功能。从用户的视角,通过不同的数据或者事件驱动系统,通过输出结果进行判断。
## 二.黑盒测试的优缺点?
A.优点:
1.容易实施,不需要关注内部实现
2.更贴近用户的实用角度
B.缺点:
1.测试覆盖率较低,一般只能覆盖到代码的40%
2.针对黑盒的自动化测试,复用率较低,维护成本较高。
一般我们的软件产品在研发迭代过程中,容易变化的是功能。所以说特别是界面UI的产品,或者[**互联网**]的产品非常频繁的变化,搞个活动,明天搞个升级,变化非常快。所以针对功能的自动化测试,[**测试用例**]重复的利用率较低,功能频繁变,脚本的维护成本代价相对比较大。
## 三.黑盒测试主要测试什么?
1.是否有不正确的或遗漏的功能?
2.在接口上,输入是否能正确的接受?能否输出正确的结果?
3.是否有数据结构错误或者外部信息(例如数据文件)访问错误?
4.性能上是否能满足要求?
## 四.黑盒测试的主要设计方法?
我们在写测试用例的时候,要围绕需求要点,考虑用户不同的复杂场景;用下图的设计测试用例方法,尽可能细致的写出用例。常见的用例设计方法如下图:
![](https://img.kancloud.cn/ef/28/ef28b01ed8f8ef2a8c74bd5baa0411e7_1005x627.png)
## 五.常见的测试方法
### 等价类划分法:
•计算器:到底输入几组数据才算测试完毕?(讨论课题)
•答案:一个一个测试效率低下,一定要分类测试!
•1、整数(在范围内的整数\-99到99)取最大、最小、中间
•2、小数(在范围内的整数\-99到99)
•3、符号(+-/\*,。、!@#¥%……&\*())
•5、汉字
•6、空格
•7、不输入
通过上面的描述,我们发现我们用户所有可能输入的数据,划分成了若干份(或者也可以称为子集),然后从每一个子集当中选取少数具有代表性的数据作为测试用例,这种测试用例我们称为“等价类划分法”。
#### 定义
等价类划分是一种重要的、常用的黑盒测试方法,不需要考虑程序的内部结构,只需要考虑程序的输入规格即可。它将不能穷举的测试过程进行合理分类,从而保证设计出来的测试用例具有完整性和代表性。
【注意】:在有限的测试资源的情况下,用少量有代表性的数据得到比较好的测试效果。
#### 等价类的分类
有效等价类
指符合《需求规格说明书》,输入合理的数据集合
无效等价类
指不符合《需求规格说明书》,输入不合理的数据集合
#### 等价类思考步骤
1、先确定有效和无效等价类
2、有效等价类就是题目条件(两端的极值(边界值)要判断、中间随意一个值也要判断)
3、无效等价类先划分与条件相反的情况,再找到特殊情况(中文、英文、符号、空格、空)
•我们可以把 “有效等价”和“无效等价”用例写在一个Excel表格中(写出来永远比自己脑子里想要好)!
•例:计算 1---100的整数之和(包括1和100)
![](https://img.kancloud.cn/ce/3f/ce3f605c247c971335b931e755e795d6_1086x347.png)
•一般是一个框输入正确的值,一个框输入错误的值,没有两个框都输入错误的值,因为更容易确定到底是哪个框出现错误的值。
#### 等价类分类强化练习
测试要求是:测试QQ账号,账号的要求是 6---10位正整数。
![](https://img.kancloud.cn/f9/6a/f96aa71c5ec01f522f67f53df4680530_425x321.png)
有效的等价类:
1:长度在6—10位之间的整数
无效等价类:
1:长度小于6
2:长度大于10.
3:负数
4:小数
5:英文字母
6:中文
7:空格
8:特殊字符
#### 等价类分类强化练习
某城市电话号码由三部分组成,分别是
地区码:空白或是3位数字
前缀:非‘0’且非‘1’开头的三位数字
后缀:4位数字
例子:1232341234
#### 等价类分类总结
通过上面的案例,我们可以总结一下,当我们在测试文本框
的程序可以考虑如下的情况:
1:文本框要求输入的长度
2:输入的类型
3:组成规则
4:是否为空
5:是否重复---区分大小写,
6:是否去除空格
### **边界值分析法:**
#### 什么是边界?
边界是指对于输入等价类和输出等价类而言,稍高于其边界值及稍低于其边界值的一些特定情况。边界值分析法也是一种常用的黑盒测试方法。
注意: 大量的错误是发生在输入或输出范围的边界上,而不是在输入范围的内部。
**上点**:是指边界上的点,无论此时的域是开区间还是闭区间,开区间的话,上点就是在域外,闭区间的话,上点就是在域内。
**离点**:是指离上点最近的点,这里就跟是闭区间还是开区间就有关系了,**如果是开区间,那么离点就在域内,如果是闭区间,那么离点就在域外**。
**内点**:域内的任意点都是内点。
题目:输入的参数值必须大于0同时小于100的整数,边界条件设置错误:把>写成了>=,把<写成了<=
![](https://img.kancloud.cn/27/76/2776b966e4305c9998235f3e5617a61e_1322x480.png)
【注意】
有效数据和无效数据的分界点,往往作为程序员编写程序的判断点,是程序员容易犯错误的地方,也是测试人员重点测试的内容。
•如何解决这类问题
–找到测试数据的边界点,也就是有效等价类和无效等价类的边界点,对边界点数据专门进行测试。
–一般情况下,需要对边界值(0和100)以及边界值两边的数(\-1和1以及101和99)分别进行测试。
题目:输入的参数值必须大于等于0同时小于等于100的整数
正确代码:
num>-1或num>=0 num<101或num<=100
错误代码:
num>=-1或num>0或num>=1 num<=101或num<100或num<=99
选中了\-1 选中了1 选中了101 选中了99
![](https://img.kancloud.cn/a0/9d/a09d22778f158b325332cc6e83f5d67d_700x364.png)
•确定边界情况(输入或输出等价类的边界)
•选取正好等于、刚刚好大于或刚刚好小于边界值作为测试数据
•边界值的取值依据输入范围区间不同而有所不同,但是都需要把上点值、离点值和内点值取到。(闭两边、开中间)
![](https://img.kancloud.cn/7e/90/7e90f3009906840bb476bbf296d881fe_634x292.png)
#### 边界值方法练习
•练习1:使用边界值的方法设计添加标题的测试用例
标题长度\>0 标题长度<=30
![](https://img.kancloud.cn/15/08/1508434368aabac34797f62ca6727d7a_702x241.png)
•练习2:
输入一个学生成绩n,判断是否及格(0到100整数);
– (1)画流程图;
– (2)确定有效区域和无效区域;
– (3)临界点:0、60、100;
– (4)取值:-1、0、1、59、60、61、99、100、101;
– (5)具体测试用例;
![](https://img.kancloud.cn/88/6f/886fccfdc098456f9b28ec2c9962c259_863x358.png)
![](https://img.kancloud.cn/ed/03/ed0362dc08de9da9351d46ee96fadd80_520x396.png)
•练习3:
修改手机银行登录密码:
密码必须由字母与数字组合
密码长度在8~24之间(包含8和24)
![](https://img.kancloud.cn/71/21/71214774150d177b3b9d5e06ecd79681_668x387.png)
#### 边界值的方法小结
•1、如果输入条件规定了值得范围,则应取刚到到这个范围的边界值,以及刚刚超越这个范围边界的值作为输入数据。
–两位整数加法器数的范围为\-99—99,则应测试\-99,\-100和99,100
•2、输入条件规定了值得个数
–姓名要求1—20个字符,需要测试0、1、2个字符和19、20、21个字符
–某商品信息查询系统,每页最多显示10条商品信息,我们就应该准备商品信息,使能够查询出9、10条、11条、1条、0条商品记录
–边界值和等价类区别:边界值分析不是从某等价类中随便挑一个作为代表,而是这个等价类的每个边界都要作为测试条件
#### 常见边界值
•文本框接收字符个数,比如用户名长度,密码长度等;
•报表的第1行和最后1行;
•数值元素的第1个和最后1个;
•循环的第1次、2次和倒数第1次、2次。
### **错误推测法:**
定义:基于经验和直觉推测程序中所有可能存在的各种错误, 从而有针对性的设计测试用例的方法。列举出程序中所有可能有的错误和容易发生错误的特殊情况
### 因果图法:
•因果图法是一种利用图解法分析输入的各种组合情况,从而设计测试用例的方法,它适合于检查程序输入条件的各种组合情况
•特点:
–考虑输入条件的相互制约及组合关系
–考虑输出条件对输入条件的依赖关系
–等价类划分法和边界值分析方法都是着重考虑输入条件,但没有考虑输入条件的各种组合、输入条件之间的相互制约关系。这样虽然各种输入条件可能出错的情况已经测试到了,但多个输入条件组合起来可能出错的情况却被忽视了。
–如果在测试时必须考虑输入条件的各种组合,则可能的组合数目将是天文数字,因此必须考虑采用一种适合于描述多种条件的组合、相应产生多个动作的形式来进行测试用例的设计,这就需要利用因果图(逻辑模型)。
•因果图法比较适合输入条件比较多的情况,测试所有的输入条件的排列组合。所谓的原因就是输入,所谓的结果就是输出。
–因果图的“因”——输入条件
–因果图的“果”——输出结果
•因果图法要注意考虑:
–所有输入/输出条件的相互制约关系以及组合关系
–输出结果对输入条件的依赖关系,也就是什么样的输入组合会产生怎样的输出结果,即“因果关系”
•通常在因果图中用Ci表示原因,用Ei表示结果,各结点表示状态,可取值“0”或“1”。“0”表示某状态不出现,“1”表示某状态出现。
![](https://img.kancloud.cn/56/d6/56d66fa2f0add5438665082a09384505_618x242.png)
![](https://img.kancloud.cn/c0/ac/c0aca1946ad419b7b7014b42a249db27_609x351.png)
![](https://img.kancloud.cn/90/90/9090f0e5da162f914fe99c42e96ef391_610x366.png)
![](https://img.kancloud.cn/7c/54/7c542721151551db6e827e6f2ac96970_717x420.png)
#### 利用因果图导出测试用例需要经过以下几个步骤:
–① 找出所有的原因,原因即输入条件或输入条件的等价类。
–② 找出所有的结果,结果即输出条件。
–③ 明确所有输入条件之间的制约关系以及组合关系。
•哪些条件不能组合到一起,哪些条件可以组合到一起
–④ 明确所有输出条件之间的制约关系以及组合关系。
•哪些输出结果不能同时输出,哪些输出结果可以同时输出
–⑤ 找出什么样的输入条件组合会产生哪种输出结果
–⑥ 把因果图转换成判定表/决策表。
–⑦ 为判定表/决策表中的每一列表示的情况设计测试用例。
#### 案例:交通一卡通自动充值软件系统需求
![](https://img.kancloud.cn/45/43/4543c6410672276c012aca18b24533bb_458x455.png)
–系统只接收50或100元纸币,一次只能使用一张纸币,一次充值金额只能为50元或100元。
–若输入50元纸币,并选择充值50元,完成充值后退卡,提示充值成功;
–若输入50元纸币,并选择充值100元,提示输入金额不足,并退回50元;
–若输入100元纸币,并选择充值50元,完成充值后退卡,提示充值成功,找零50元;
–若输入100元纸币,并选择充值100元,完成充值后退卡,提示充值成功;
–若输入纸币后在规定时间内不选择充值按钮,退回输入的纸币,并提示错误;
–若选择充值按钮后不输入纸币,提示错误
![](https://img.kancloud.cn/55/8a/558acf2fff9dab9897dc7e784dbb74d6_668x420.png)
![](https://img.kancloud.cn/77/e7/77e72ab1d0dc2560120bfbad1c30700e_713x499.png)
![](https://img.kancloud.cn/7d/eb/7deb3db6bfd9538f5222d1c0cb0991e6_719x426.png)
根据因果图再制作出对应的“表格”
![](https://img.kancloud.cn/40/f1/40f10f3089aa0c97b8ee1c1f9ae2a6d0_543x356.png)
注意:一个图中标识出一个测试用例的情况,因为画在一起根本无法分辨。
![](https://img.kancloud.cn/b7/82/b78288571081f6222d69d3779dd78dd1_574x384.png)
根据因果图再制作出对应的“表格”
![](https://img.kancloud.cn/e6/42/e642832e5ba03de073feed60a10b21e0_518x359.png)
注意:一个图中标识出一个测试用例的情况,因为画在一起根本无法分辨。
![](https://img.kancloud.cn/3c/fb/3cfb2097bc38df37048732ec7a6bf104_610x381.png)
根据因果图再制作出对应的“表格”
![](https://img.kancloud.cn/c4/39/c439775e3fca0871617f07a7b3b3d3f7_528x363.png)
### 判断表驱动法:
•因果图只是一种辅助工具,通过分析最终得到判定表,再通过判定表编写测试用例。但有时画因果图非常麻烦,影响测试效率,可以直接写判定表,进而编写测试用例。
•判定表的组成
–条件桩:问题的所有条件
–动作桩:问题的所有输出
–条件项:针对条件桩的取值
–动作项:条件项的各种取值情况下的输出结果
•1、列出所有的条件桩和动作桩。
•2、填入条件项。
•3、填入动作项。得到初始判定表。
•4、简化判定表(合并相似规则(相同动作))
•怎样称为一个好学生?遵纪守法的前提下,学习成绩好是一个好学生、品德高尚也是一个好学生;(只要违法乱纪就绝对不是一个好学生;成绩和品德有一项,再加遵纪守法也是好学生)
•合并使用“-”代表无关条件,选什么都不影响结果。
![](https://img.kancloud.cn/e8/40/e840ebe17575fa1943e8e212b6f1cad3_726x272.png)
### 流程图法:
•流程分析法主要是针对测试场景类型属于流程测试场景的测试项下的测试子项进行设计,是从白盒测试设计方法中的路径覆盖分析法借鉴过来的一种方法。
–在白盒测试中,路径就是指函数代码的某个分支组合,路径覆盖法需要构造足够的用例覆盖函数的所有代码路径。
–在黑盒测试中,若将软件系统的某个流程看成路径的话,则可以针对该路径使用路径分析的方法设计测试用例。
•第一步:详细了解需求;
•第二步:根据需求说明或界面原型,找出业务流程的各个页面以及各页面之间的流转关系;
•第三步:画出业务流程(产品经理使用Axure软件制作);
•第四步:写用例,覆盖所有的路径分支。
一、详细了解需求;
二、找出业务流程的各个页面以及各页面之间的流转关系
• 1、用户向ATM取款机中插入银行卡……
• 2、用户输入银行卡密码……
• 3、用户输入取款金额……
• 4、系统同步银行主机,点钞票,输出给用户并减去用户卡中相应数目的存款金额……
• 5、用户取款,银行卡退卡……
![](https://img.kancloud.cn/06/be/06befd709f0c6b462f6d37e9e522afc3_694x367.png)
•第四步:用例设计写用例,覆盖所有的路径分支。
–需求描述及流程图中,ATM取款机的提示信息对应于测试用例中的预期输出部分,用户的操作对应测试用例中的测试步骤部分。原则是一条有效路径使用一个测试用例覆盖。
依据业务流程图确定测试路径,即需要测试的业务流程。其主要包含三个方面:
a)正常流程,取款成功(基本流程):对应一次性取款成功;
b)异常流程,取款失败(分支流程):对应取款失败,包括退卡、吞卡;
c)异常流程,取款成功(循环流程):对应取款中间出现意外,比如密码输入错误,但是最终成功取钱的情况。
![](https://img.kancloud.cn/99/f8/99f88f957f1ea99ecc47857602f8e9d6_718x407.png)
流程分析法总结
流程分析法适用于有先后顺序的测试。常用于业务流程测试、安装流程测试等。
流程分析法重点在于测试流程。因此,一般每个流程用一个测试用例验证。
流程测试没有问题并不能说明系统功能没有问题,还需要针对每步功能进行测试。对于包含复杂流程的系统,只有功能点和处理流程都进行测试覆盖,才算是比较充分的测试。
### 猜错法:
• 错误推测法是指利用直觉和经验猜测出出错的可能类型,有针对性列举出程序中所有可能的错误和容易发生错误的情况,它是测试经验丰富的测试人员喜欢使用的一种测试用例设计方法。
•基本思想:
–基本思想是列举出可能犯的错误或错误易发生的清单,然后根据清单编写测试用例;这种方法很大程度上是凭经验进行的,即凭人们对过去所作测试结果的分析,对所揭示缺陷的规律性作直觉的推测来发现缺陷。
采用错误推测法,最重要的是要思考和分析测试对象的各个方面,多参考以前发现的Bug的相关数据、总结的经验,个人多考虑异常的情况、反面的情况、特殊的输入,以一个攻击者的态度对待程序,才能够设计出比较完善的测试用例
### 随机测试法:
随机测试就是没有书面测试用例、记录期望结果、检查列表、脚本或指令的测试。