测试方法-白盒/黑盒
黑盒测试和白盒测试的区别?
- 白盒测试也称为结构测试,是根据代码逻辑来设计的,主要用于检测软件编码过程中的错误。程序员的编程经验、对编程软件的掌握程度、工作状态等因素都会影响到编程质量,导致代码错误。
特点:代码覆盖率高;覆盖所有代码路径难度大;业务功能可能覆盖不全;测试开销大;
- 黑盒测试又称为功能测试,是根据业务需求来设计的,主要检测软件的每一个功能是否能够正常使用。在测试过程中,将程序看成不能打开的黑盒子,不考虑程序内部结构和特性的基础上通过程序接口进行测试,检查程序功能是否按照设计需求以及说明书的规定能够正常打开使用。
编写测试用例的方法?
白盒测试用例设计方法包括逻辑覆盖法、路径测试法。
一、逻辑覆盖法
(1)定义:是通过对程序逻辑结构的遍历实现程序的覆盖。
举例:程序代码
int test(int x,int y,int magic){
if(x>0 && y>0){
A=x+y+10; //语句块1
}else{
A=x+y-10; //语句块2
}
if(magic<0){
A=0; //语句块3
}
return A; //语句块4
}
程序流程图:
1.语句覆盖法:设计测试用例,使得程序中每条语句至少被执行一次。
缺点:不能准确的判断出运算中的逻辑关系错误。
2.判定覆盖法:也叫分支覆盖,设计测试用例使得程序中的每个判定的“真”和“假”都至少被执行一次。既:程序中的每个分支至少执行一次。
注:只要满足了判定覆盖标准就一定满足语句覆盖标准。
根据上代码设计测试用例:(100%判定覆盖)
3.条件覆盖:设计测试用例,使得判定中每个条件至少取一次真值,取一次取假值。
上述代码中有两个判定,有三个条件。
4.判定条件覆盖:设计测试用例,使得被测试程序中的每个判定本身的判定结果(真假)至少满足一次,同时,每个判定中的条件的可能值(真假)也至少被满足一次。即同时满足100%判定覆盖和100%条件覆盖的标准。
判定条件覆盖率:
- 案例代码中有2个判定,3个条件,4个判定结果,6个条件结果
- 设计测试用例执行了3个判定结果,5个条件结果,判定条件覆盖率为(3+5)/(4+6)=80%
5.条件组合覆盖:设计测试用例,使得被测试程序中的每个判定中条件结果的所有可能组合至少执行一次。
条件组合覆盖能满足判定覆盖(也就满足了语句覆盖),条件覆盖,判定条件覆盖。
条件组合覆盖率:
- 案例代码中有2个判定,3个条件(判定1中有2个条件,判定2中有1个条件),判定1的条件组合为4个,判定2的条件组合为2个
- 设计测试用例执行了5个条件组合,覆盖率为5/(4+2)=83%
- 设计用例时,条件之间需要组合,判定之间不需要
6.路径覆盖法:设计测试用例,覆盖程序中所有可能的路径。
例如:
- 案例代码中总共有4条路径
- 设计测试用例执行了3条路径,路径覆盖率为3/4=75%
黑盒测试用例设计方法包括等价类划分法、边界值分析法、判定表法、因果图法、场景图法、错误推测法、正交试验设计法、功能图法、等。
1.等价类法
(1)定义:依据需求将输入划分为若干等价类,从等价类中选定一个测试用例,如果该测试用例通过,则表明整个等价类通过测试。
(2)适用场景:对于等价类这个方法,一般适用于有无限多种输入,我们不可能完成穷举测试,等价类可以使我们用较少的测试用例尽可能多的将功能覆盖。
(3)有效等价类和无效等价类
一般划分为:有效等价类、无效等价类
有效等价类:有意义的输入构成的集合,对于需求规格说明书是合法的;
无效等价类:不满足需求的集合。
(4)按等价类划分设计测试用例的原则:
- 分析需求,确定输入数据类型。
- 使用规则划分有效和无效等价类。
- 设计一个新的测试用例,使其尽可能多地覆盖尚未被覆盖的有效等 价类,重复这一步,直到所有的有效等价类都被覆盖为止。
- 设计一个新的测试用例,使其仅覆盖一个尚未被覆盖的无效等价类, 重复这一步,直到所有的无效等价类都被覆盖为止。
(5)案例:某地区座机电话号码由两部分组成,地区码(3/4位)+电话号码(7/8位)。
1.分析需求,确定输入数据类型。
输入 | 输入 | 数据类型 |
座机电话号码 | 地区码 | 3/4位的数字 |
电话号码 | 7/8位的数字 |
2.使用规则划分有效和无效等价类。
输入 | 输入 | 长度 | 集合 | 组成规则 |
固定电话号码 | 地区码 | 3/4位 | 数字 | 以0开头 |
电话号码 | 7/8位 | 数字 | 以非0非1开头 |
输入 | 输入 | 有效等价类 | 无效等价类 |
固定电话号码 | 地区码 |
1.以0开头的3位数字 2.以0开头的4位数字 |
3.以0开头的小于3位的数字 4.以0开头的大于4位的数字 5.以0开头的包含非数字的3位字符串 6.以非0开头的3位字符串 |
电话号码 |
7.以非0非1开头的7位数字 8.以非0非1开头的8位数字 |
9.以非0非1开头的小于7位的数字 10.以非0非1开头的大于8位的数字 11.以非0非1开头的包含非数字的7位字符串 12.以0开头的7位数字 13.以1开头的7位数字 |
3.编写测试用例,覆盖有效等价类。
4.编写测试用例,覆盖无效等价类。
输入 | 有效用例 | 无效用例 |
测试用例 |
012 3267765 覆盖1、7 1234 23495827 覆盖2、8 |
01 5678453 覆盖3 01234 4567345 覆盖4 0h1 4675347 覆盖5 h34 7834758 覆盖6 012 234233 覆盖9 012 878734265 覆盖10 012 2sd2390 覆盖11 012 0123456 覆盖12 012 1234565 覆盖13
|
2.边界值法
(1)定义:边界值法是对输入数据的边界测试,是一种黑盒测试方法;一般来说边界值法是对等价类划分后的补充
(2)使用场景:容易在输入或输出范围的边界上发生错误,而不是在输入范围的内部。
(3)例:对于设定密码的测试,要求密码必须为6-15位
分析过程:有效等价类为>=6 && <=15 无效等价类为:<6 || >15
上点:6,15
离点:5 ,16(不用在测7、14,因为是闭区间,所以 7、14和6、15的性质是一样的)
内点:10
设定边界值:5、6、10、15、16
边界值选定解释:
A. 6和15作为有效等价类中的内容,又是边界值,可以判定有效等价类的内容是否满足要求
B. 但是6和15又很特殊,它不仅代表了有效等价类,还代表了边界值,所以我们选定一个普通的有效等价类作为一个测试用例,如:10
C. 5和16作为无效等价类中的内容,又是边界值(比4或者17更具有代表性),可以判定无效等价类的内容
(4)按边界值划分设计测试用例的原则:
- 分析需求,确定输入数据类型。
- 使用规则划分有效和无效等价类。
- 确认上点离点和内点。
- 设计一个新的测试用例,使其尽可能多地覆盖尚未被覆盖的有效等 价类,重复这一步,直到所有的有效等价类都被覆盖为止。
- 设计一个新的测试用例,使其仅覆盖一个尚未被覆盖的无效等价类, 重复这一步,直到所有的无效等价类都被覆盖为止。
3.判定表法
(1)定义:判定表,也叫决策表。是对多种输入条件下软件系统执行不同动作的分析工具,它可以把复杂的逻辑关系和多种组合的情况表达得具体明确。
(2)判定表的组成元素:
1.判定表通常由条件桩、条件项、动作桩、动作项组成。
2.条件桩: 被测对象的所有输入。
3.条件项:被测对象的输入取值。
4.动作桩:被测对象可能采取的操作/表现。
5.动作项:在各个条件项的组合下,被测对象所采取的动作/表现。
例:三好学生中,思想品质、身体、学习对应的是条件桩。成为三好学生和没成为三好学生 便是动作桩。
(3)使用判定表法设计测试用例
- 定义条件桩与动作桩
- 设计优化判定表(全组合)
- 填写动作项
- 简化合并判定表
- 抽取用例(一条规则编写一个测试用例)
(4)案例:支付宝个人账户注册,第一项要求输入手机号作为账户名,第二项要求输入验证码,两项都验证成功后填写账户信息,但如果第一项校验不正确,则报错h(输入手机号格式错误),如果第二项验证不正确,则报错m(验证码输入错误)。
1 | 2 | 3 | 4 | ||
条件桩 | 第一项输入手机号 | 1 | 1 | 0 | 0 |
第二项输入验证码 | 1 | 0 | 1 | 0 | |
动作项 | 填写账户信息 | true | |||
报错h | true | true | |||
报错m | true | true |
4.因果图法
(1)定义:是一种利用图解法分析输入的各种组合情况,从而设计测试用例的方法,它适合于检查程序输入条件的各种组合情况。
(2)因果图法:因果图法是一种适合于描述对于多种输入条件组合的测试方法,根据输入条件的组合、约束关系和输出条件的因果关系,分析输入条件的各种组合情况,从而设计测试用例的方法,它适合于检查程序输入条件涉及的各种组合情况。因果图法一般和判定表结合使用,通过映射同时发生相互影响的多个输入来确定判定条件。因果图法最终生成的就是判定表,它适合于检查程序输入条件的各种组合情况。采用因果图法能帮助我们按照一定的步骤选择一组高效的测试用例,同时,还能指出程序规范中存在什么问题,鉴别和制作因果图。
(3)因果图法和判定表法之间的区别:判定表法是将条件之间所有的组合形式都列举出来,即规则数为2的n次方(n为条件数),而因果图法则是先考虑输入/输出条件之间的关系,在根据分析的关系来转化为判定表的规则,所以采用因果图法整理出来的规则数是小于等于采用判定表法整理出来的规则数,也可以理解为因果图法是基于判定表法的。
5.错误推测方法
(1)定义:基于经验和直觉推测程序中所有可能存在的各种错误,从而有针对性的设计测试用例,列举出程序中所有可能有的错误和容易发生错误的特殊情况,根据他们选择测试用例. 例如, 在单元测试时曾列出的许多在模块中常见的错误. 以前产品测试中曾经发现的错误等,。还有, 输入数据和输出数据为0的情况。输入表格为空格或输入表格只有一行. 这些都是容易发生错误的情况。可选择这些情况下的例子作为测试用例.总之,就是进行错误的操作。
(2)例:
1. 例如,输入数据和输出数据为0的情况;输入表格为空格或输入表格只有一行。这些都是容易发生错误的情况。可选择这些情况下的例子作为测试用例。
2. 例如,前面例子中成绩报告的程序,采用错误推测法还可补充设计一些测试用例:
1) 程序是否把空格作为回答
2) 在回答记录中混有标准答案记录
3) 除了标题记录外,还有一些的记录最后一个字符即不是2也不是3
4) 有两个学生的学号相同
5) 试题数是负数
3. 例如,测试一个对线性表(比如数组)进行排序的程序,可推测列出以下几项需要特别测试的情况:
1) 输入的线性表为空表;
2) 表中只含有一个元素;
3) 输入表中所有元素已排好序;
4) 输入表已按逆序排好;
5) 输入表中部分或全部元素相同。
4. 例如,测试手机终端的通话功能,可以设计各种通话失败的情况来补充测试用例:
1) 无SIM 卡插入时进行呼出(非紧急呼叫)
2) 插入已欠费SIM卡进行呼出
3) 射频器件损坏或无信号区域插入有效SIM卡呼出
4) 网络正常,插入有效SIM卡,呼出无效号码(如1、888、333333、不输入任何号码等)
5) 网络正常,插入有效SIM卡,使用“快速拨号”功能呼出设置无效号码的数字
6.场景图法
(1)定义:
(2)场景图法的组成:
(3)场景组合:
按上图组合多个不同的场景:
场景1:基本流
场景2:基本流 备选流1
场景3:基本流 备选流1 备选流2
场景4:基本流 备选流3
场景5:基本流 备选流3 备选流1
场景6:基本流 备选流3 备选流1 备选流2
场景7:基本流 备选流4
场景8:基本流 备选流3 备选流4
(4)用例设计步骤:
- 分析需求,确定出软件的基本流和各项备选流。
- 依据基本流和各项备选流,生成不同的场景。
- 针对生成的各场景,设计相应的测试用例。
- 重新审核生成的测试用例,去掉多余的部分,并针对最终确定出的测试用例,设计测试数据。
(5)下面是场景法的基本设计步骤:
- 根据说明,描述出程序的基本流及各项备选流
- 根据基本流和各项备选流生成不同的场景
- 对每一个场景生成相应的测试用例
- 对生成的所有测试用例重新复审,去掉多余的测试用例,测试用例确定后,对每一个测试用例确定测试数据值