1、黑盒测试概念
黑盒测试法也称功能测试或数据驱动测试,它是在已知产品所应具有的功能,通过测试来检测每个功能是否都能正常使用,在测试时,把程序看作一个不能打开的黑盒子,在完全不考虑程序内部结构和内部特性的情况下,测试者在程序接口进行测试,它只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当地接收输入数锯而产生正确的输出信息,并且保持外部信息(如数据库或文件)的完整性。
黑盒测试主要发现以下类型的错误:
- 基于规格说明的功能错误
- 基于规格说明的构件或系统行为错误
- 基于规格说明的性能错误
- 面向用户的使用错误
- 黑盒接口错误
2、黑盒测试特点
“黑盒”法着眼于程序外部结构、不考虑内部逻辑结构、针对软件界面和软件功能进行测试。“黑盒”法是穷举输入测试,只有把所有可能的输入都作为测试情况使用,才能以这种方法查出程序中所有的错误。实际上测试情况有无穷多个,人们不仅要测试所有合法的输入,而且还要对那些不合法但是可能的输入进行测试。
黑盒测试注重于测试软件的功能性需求,也即黑盒测试使软件工程师派生出执行程序所有功能需求的输入条件。黑盒测试并不是白盒测试的替代品,而是用于辅助白盒测试发现其他类型的错误。
总体来说,黑盒测试有以下特点:
- 对于更大的代码单元来说(子系统甚至系统级)比白盒测试效率要高;
- 测试人员不需要了解软件的实现细节,包括特定的编程语言;
- 从用户的视角进行测试,很容易被理解和接受;
- 有助于暴露任何规格不一致或有歧义的问题;
- 没有清洗和简明的规格,测试用例很难设计;
- 不能控制内部执行路径,会有很多内部程序路径没有被测试到;
- 不能直接针对特定的程序段,这些程序可能非常复杂(因此可能隐藏更多的问题)
3、黑盒测试方法
3.1、等价类划分法
等价类划分法是把程序的输入域划分成若干部分(子集),然后从每个部分中选取少数代表性数据作为测试用例。每一类的代表性数据在测试中的作用等价于这一类中的其他值。
3.1.1、等价类划分法的应用
等价类划分法将程序所有可能的输入数据(有效的和无效的)划分成若干个等价类。然后从每个部分中选取具有代表性的数据当做测试用例进行合理的分类,测试用例由有效等价类和无效等价类的代表组成,从而保证测试用例具有完整性和代表性。利用这一方法设计测试用例可以不考虑程序的内部结构,以需求规格说明书为依据,选择适当的典型子集,认真分析和推敲说明书的各项需求,特别是功能需求,尽可能多地发现错误。等价类划分法是一种系统性的确定要输入的测试条件的方法。
由于等价类是在需求规格说明书的基础上进行划分的,并且等价类划分不仅可以用来确定测试用例中的数据的输入输出的精确取值范围,也可以用来准备中间值、状态和与时间相关的数据以及接口参数等,所以等价类可以用在系统测试、集成测试和组件测试中,在有明确的条件和限制的情况下,利用等价类划分技术可以设计出完备的测试用例。
3.1.2、有效等价类划分
有效等价类指对于程序规格说明来说,是合理的、有意义的输入数据构成的集合。利用有效等价类可以检验程序是否实现了规格说明预先规定的功能和性能。有效等价类可以是一个,也可以是多个,根据系统的输入域划分若干部分,然后从每个部分中选取少数有代表性数据当做数据测试的测试用例,等价类是输入域的集合。
3.1.3、无效等价类划分
无效等价类和有效等价类相反,无效等价类是指对于软件规格说明而言,没有意义的、不合理的输入数据集合。利用无效等价类,可以找出程序异常说明情况,检查程序的功能和性能的实现是否有不符合规格说明要求的地方。
3.1.4、等价类划分的方法
按区间划分:在输入条件规定的取值范围或值的个数的情况下,可以确定一个有效等价类和两个无效等价类。
按数值划分:在规定了输入数据的一组值中(假定有n个值),并且程序要对每个输入值分别处理的情况下,可以确定n个有效等价类和一个无效等价类。
按数值集合划分:在规定输入数据必须遵守的规则的情况下,可以确定一个有效等价类和若干个无效等价类。
按限制条件或规划划分:在输入条件规定了输入值的集合或规定了“必须如何”的条件下,可以确定一个有效等价类和一个无效等价类。
按处理方式划分:在确定已划分的等价类中各元素在程序处理中的方式不同的情况下,则应将该等价类进一步地划分为更小的等价类。
3.1.5、等价类划分的原则
1、依据常用的原则划分等价类
2、为每一个等价类规定唯一的编
3、设计一个新的测试用例,使其尽可能多的覆盖尚未被覆盖的有效等价类,重复这一步,直到所有有效等价类都被覆盖为止。
4、设计一个新的测试用例,使其覆盖一个尚未被覆盖的无效等价类,重复这一步,直到所有的无效等类都被覆盖为止。
3.1.6、等价类划分实例
假设要输入一个日期,日期限定在1990年1月~2049年12月,并规定日期由6位数字字符组成,前4位表示年,后2位表示月。现用等价类划分法设计测试用例,来测试程序的”日期检查功能”。
1)划分等价类并编 ,下表等价类划分的结果
输入等价类 |
有效等价类 |
无效等价类 |
日期的类型及长度 |
①6位数字字符 |
②有非数字字符 ③少于6位数字字符 ④多于6位数字字符 |
年份范围 |
⑤在1990~2049之间 |
⑥小于1990 ⑦大于2049 |
月份范围 |
⑧在01~12之间 |
⑨等于00 ⑩大于12 |
2)设计测试用例,以便覆盖所有的有效等价类在表中列出了3个有效等价类,编 分别为①、⑤、⑧,设计的测试用例如下:
测试数据 | 期望结果 | 覆盖有效等价类 |
200211 | 输入有效 | ①、⑤、⑧ |
3)为每一个无效等价类设计一个测试用例,设计结果如下:
测试数据 | 期望结果 | 覆盖无效等价类 |
95June | 无效输入 | ② |
20036 | 无效输入 | ③ |
2001006 | 无效输入 | ④ |
198912 | 无效输入 | ⑥ |
200401 | 无效输入 | ⑦ |
200100 | 无效输入 | ⑨ |
200113 | 无效输入 | ⑩ |
3.2、边界值分析法
3.2.1、概念
边界值分析法就是对输入或输出的边界值进行测试的一种黑盒测试方法。通常边界值分析法是作为对等价类划分法的补充,这种情况下,其测试用例来自等价类的边界。
3.2.2、边界值分析法应用
根据大量的测试统计数据,很多错误是发生在输入或输出范围的边界上,而不是发生在输入/输出范围的中间区域。因此针对各种边界情况设计测试用例,可以查出更多的错误。
使用边界值分析方法设计测试用例,首先应确定边界情况。通常输入和输出等价类的边界,就是应着重测试的边界情况。应当选取正好等于,刚刚大于或刚刚小于边界的值作为测试数据,而不是选取等价类中的典型值或任意值作为测试数据。
3.2.3、边界值分析法与等价值划分法的区别
边界值分析使用与等价类划分法相同的划分,只是边界值分析假定错误更多地存在于划分的边界上,因此在等价类的边界上以及两侧的情况设计测试用例。
边界值分析法与等价类分析法的区别:
1、边界值分析不是从某等价类中随便挑一个作为代表,而是使这个等价类的每个边界都要作为测试条件。
2、边界值分析不仅考虑输入条件,还要考虑输出空间产生的测试情况。入条件,还要考虑输出空间产生的测试情况。
3.2.4、边界值分析
通常情况下,软件测试所包含的边界检验有几种类型:数字、字符、位置、重量、大小、速度、方位、尺寸、空间等。相应地,以上类型的边界值应该在:最大/最小、首位/末位、上/下、最快/最慢、最高/最低、 最短/最长、 空/满等情况下。利用边界值作为测试数据.
项 |
边界值 |
测试用例的设计思路 |
字符 |
起始-1个字符/结束+1个字符 |
假设一个文本输入区域允许输入1个到255个 字符,输入1个和255个字符作为有效等价类;输入0个和256个字符作为无效等价类,这几个数值都属于边界条件值。 |
数值 |
最小值-1/最大值+1 |
假设某软件的数据输入域要求输入5位的数据值,可以使用10000作为最小值、99999作为最大值;然后使用刚好小于5位和大于5位的 数值来作为边界条件。 |
空间 |
小于空余空间一点/大于满空间一点 |
例如在用U盘存储数据时,使用比剩余磁盘空间大一点(几KB)的文件作为边界条件。 |
3.2.5、内部边界值
在多数情况下,边界值条件是基于应用程序的功能设计而需要考虑的因素,可以从软件的规格说明或常识中得到,也是最终用户可以很容易发现问题的。然而,在测试用例设计过程中,某些边界值条件是不需要呈现给用户的,或者说用户是很难注意到的,但同时确实属于检验范畴内的边界条件,称为内部边界值条件或子边界值条件。
内部边界值条件主要有下面几种:
1、数值的边界值检验:计算机是基于二进制进行工作的,因此,软件的任何数值运算都有一定的范围限制。
项 |
范围或值 |
位(bit) |
0 或 1 |
字节(byte) |
0 ~ 255 |
字(word) |
0~65535(单字)或 0~4294967295(双字) |
千(K) |
1024 |
兆(M) |
1048576 |
吉(G) |
1073741824 |
2、字符的边界值检验:在计算机软件中,字符也是很重要的表示元素,其中ASCII和Unicode是常见的编码方式。如下列出了一些常用字符对应的ASCII码值。
字符 |
ASCII码值 |
空 (null) |
0 |
空格 (space) |
32 |
可输入的字符 |
33~126 |
0~9 |
48~57 |
A~Z |
65~90 |
a~z |
97~122 |
3、其它边界值检验:在不同的行业应用领域,依据硬件和软件的标准不同而具有各自特定的边界值。如下列出部分手机相关的边界值:
硬件设备 |
范围或值 |
手机锂电池电压 |
工作电压:3.6~4.2V; 保护电压:2.5~3V不等 |
手机正常使用温度 |
-25°C~+60°C |
3.2.6、边界值分析原则
1、如果输入条件规定了值的范围,则应取刚达到这个范围的边界值,以及刚刚超越这个范围边界的值作为测试输入数据。
2、如果输入条件规定了值的个数,则用最大个数,最小个数,比最小个数少1,比最大个数多1的数作为测试数据。
3、根据规格中每个输出条件,使用原则1,如果输出条件规定了值的范围,则应取刚达到这个范围的边界值,以及刚刚超越这个范围边界的值作为测试输入数据。
4、根据规格中每个输出条件,使用原则2,如果输出条件规定了值的个数,则用最大个数、最小个数,比最小个数少1,比最大个数多1的数作为测试数据。
5、如果程序中使用了一个内部数据结构,则应当选择这个内部数据结构的边界上的值作为测试用例。
6、分析规格说明,找出其他可能的边界条件。
3.3、错误推测法
3.3.1、概念
错误推测法是指:在测试程序时,人们可以根据经验或直觉推测程序中可能存在的各种错误,从而有针对性地编写检查这些错误的测试用例的方法。
错误推测方法的基本思想: 列举出程序中所有可能有的错误和容易发生错误的特殊情况,根据他们选择测试用例. 例如, 在单元测试时曾列出的许多在模块中常见的错误. 以前产品测试中曾经发现的错误等, 这些就是经验的总结。还有, 输入数据和输出数据为0的情况。输入表格为空格或输入表格只有一行. 这些都是容易发生错误的情况。可选择这些情况下的例子作为测试用例.
总之,就是进行错误的操作。
3.3.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卡,使用“快速拨 ”功能呼出设置无效 码的数字
3.3.3、 上常见的用例参考
功能测试用例库 |
|
1.输入验证 |
|
输入验证主要包括:数字输入验证、非法字符输入验证、输入长度验证、必填项验证和信息提示 |
1.数字输入验证:分别输入数字(正数、负数、零值、单精度、双精度)、字符串、空白值、空值、临界数值。不合法的输入,系统给出必要的判断提示信息 |
2.字符输入验证:分别输入单字节字符、双字节字符、大小写字符、特殊字符、空白值、空值。不合法的输入,系统给出必要的判断提示信息 |
|
3.日期、时间输入验证:分别输入任意字符、任意数字、非日期格式的数据、非正确日期(错误的闰年日期)、空值、空白值。不合法的输入,系统给出必要的判 断提示信息。注:有些系统会不让输入当日以后或者以前的日期、时间;有些系统会通过JavaScript来自动填写日期时间,这时需要注意是否能否人工主 观填写输入 |
|
4.多列表选择框:测试是否能否多选,列表框中的数据是否能否显示完全。当列表框的数据过多时,需要对数据有一定格式的排序 |
|
5.单列表下拉框:测试是否能否手工输入,下拉框中的数据是否能否显示完整。当下拉框的数据很多时,需要对数据有一定格式的排序。如果下拉框数据值过多时,下拉框可能会超出IE显示范围,此种情况不能够被接收 |
|
6.大文本输入框(textArea):虽然它能够满足大数据量的输入,但最好能够显示地标明输入字符的长度限制,并且应该结合“字符输入验证”进行。需要注意的是,应该允许标点的存在 |
|
7.文件输入框输入验证:该输入框主要用做文件上传操作。在测试过程中,应该注意输入文件的扩展名。从测试角度来看,要求开发人员必须对扩展名进行输入限 制,并且在适当的地方输入格式提示。当输入是空值等不合法的输入时,系统给出必要的判断提示信息。另外,对于上传的文件大小应该做限制,不宜太大 |
|
8.输入字符长度验证:输入字符的长度是否超过实际系统接收字符长度的能力。当输入超出长度时,系统给出必要的判断提示信息 |
|
9.必填项验证:输入不允许为空的时候,系统需要有提示用户输入信息功能 |
|
10.格式、规则输入验证:当输入需要一定的格式时,系统需要有提示用户输入信息功能。比如身份证 码可以输入18位或者15位,部分身份证最后一位为字母,身份证上生日与身份证 码有一定规则 |
|
11.系统错误定位的输入验证:当输入存在问题时,被系统捕获到,此时页面上的光标能够定位到发生错误的输入框 |
|
12.单选框、多选框的输入验证:单选框需要依次验证单选框的值是否都有效;多选框需要依次验证多选框的值是否都有效 |
|
13.验证码验证:做验证码输入验证时,先结合“字符输入验证”进行测试,然后注意的地方是,当利用IE回退或者刷新时,显示的验证码应该和实际系统验证码一致。如果验证码以图片形式显示,但图片由于其他原因(如 络)不能看到或者显示不完整,系统应该允许进行重新获取,最好不要做整个页面刷新 |
|
2.操作验证(CZ) |
|
该用例库主要针对页面操作 |
1.页面链接检查:每一个链接是否都有对应的页面,并且页面之间切换正确 |
2.相关性检查:删除/增加一项会不会对其他项产生影响,如果产生影响,这些影响是否都正确 |
|
3.检查按钮的功能是否正确:如增、删、改、查等功能是否正确 |
|
4.重复提交表单:一条已经成功提交的记录,用IE回退后再提交,看看系统是否做了处理 |
|
5.多次IE回退:检查多次使用IE回退的情况,在有回退的地方,回退,回到原来页面,再回退,重复多次,看是否出错 |
|
6.快捷键检查:是否支持常用快捷键,如Ctrl+C、Ctrl+V、Backspace等,对一些不允许输入信息的字段,如选人、选日期对快捷方式是否也做了限制 |
|
7.回车键检查:在输入结束后直接回车键,看系统处理如何,能否 错 |
|
8.上传下载文件检查:上传下载文件的功能是否实现,上传文件是否能打开,对上传文件的格式有何规定,系统是否有解释信息,并检查系统是否能否做到 |
|
9.其他验证:在页面上图片的大小不宜太大,需要第三方软件支持时,应该给出必要的信息,比如需要jre的支持,但用户机器还没有安装jre,那么此时在页面上应该有显著的标志来提醒用户进行安装 |
|
3.登录模块测试用例 |
|
该用例库主要针对登录模块。需要结合“访问控制验证(FWKZYZ)”用例库 |
1.登录名输入:进行“输入验证”。需要注意登录名是否区分大小写和空格 |
2.密码输入:进行“输入验证” |
|
3.提交操作:结合“访问空值验证(FWKZYZ)”。当输入正确的登录名和密码后,该用户能够进入到指定的正确页面。当输入的登录名和密码有误时,系统限制其登录,并且给出适当的提示信息。当遇到错误时,应该进行“错误页面测试” |
|
4.重设操作:当进行重设操作时,当前页面上所有输入项被清空 |
4.增加操作测试用例(ZJ) |
|
该用例库主要针对增加操作 |
1.添加输入内容,进行“输入验证” |
2.应该限制重复增加,具体操作:利用 络传输以及服务器的延迟,多次单击“增加”按钮,经常在数据库发现重复提交的数据 |
|
3.当增加成功或者失败后,应该有必要的信息提示 |
|
4.文件数据的增加:有些增加包含了数据库数据的增加,和一些文件的增加,此时的数据会保存在两个地方,所以测试时,需要对相关的数据做全面的验证 |
|
5.文件数据验证:进行“输入验证”值“文件输入框输入验证”。注意:当上传的文件为中文文件名时,上传到服务器后,可能会出现乱码现象。现在一般的做法是将原文件名替换成字母和数字的组合,以克服汉字文件名的弊端,另外,可以增加文件的安全性 |
|
5.删除操作测试用例(SC) |
|
该用例库主要针对删除操作 |
1.选择需要删除的数据字段。有时候系统会根据ID来删除,有时候系统会根据名称来删除,测试的时候应该多注意,一般要求按照ID来删除,因为根据名称来删除,名称可能会存在重名问题 |
2.应该限制重复删除。具体操作:利用 络传输以及服务器的延迟,多次单击“删除”按钮,经常在数据库中发现重复提交的数据 |
|
3.当删除的数据还有文件时,西药去验证存在数据库中的数据,以及硬盘下的文件是否都被同时删除 |
|
4.当数据被删除成功或者失败后,要有响应的信息提示 |
|
5.进行“操作验证” |
|
6.修改操作测试用例(XG) |
|
该用例库主要针对修改操作 |
1.打开需要修改的数据页面,注意与增加页面相比,只能修改部分数值,例如关键字等是不能被修改的,并且二者数据应该是一致的 |
2.增加页面上的输入限制与修改页面的输入限制应该一致 |
|
3.修改成功或者失败后,应该有相应的信息提示 |
|
7.查询操作测试用例(CX) |
|
该用例库主要针对查询操作 |
1.条件输入查询,先进行条件输入框的“输入验证” |
2.条件组合查询,将多个条件进行组合查询,结果可以通过数据库验证。需要注意的是,整个数据查询和条件查询数据结果条数要一致,另外,如果遇到某天的查询时间段,有的数据库认为一天不包括零点零分,有的数据库认为包括 |
|
3.所有查询结果,必须进行一定顺序的排列,可以按照ID或按照名称来排列 |
|
4.当查询成功或者失败后,系统应给出必要的信息提示 |
|
8.翻页操作测试用例(FY) |
|
该用例库主要针对翻页操作 |
1.当数据量很大的时候,需要进行分页显示,每页显示的行数最好不要超过20行,每页列表上最好有序 标识,行与行之间颜色要有一定区分,这样有利于用户的查找 |
2.翻页按钮应该包括:首页、前一页、后一页、尾页、当前X页、共X页,这些常用按钮和显示,并且按钮都能正常翻页 |
|
3.翻页按钮的每页显示的数据要准确,确保没有查不出来的数据,最好的做法就是和数据库结合起来验证 |
|
4.页面太多,翻页数据不能全部显示时,系统应该有完善的应对机制,比如值显示当前页的前三页和该页的后三页的页数码 |
|
5.当翻到某页时,系统应该有明显的标识,标出该页面所处的页码 |
|
9.错误页面测试(CW) |
|
错误页面是在遇到系统异常的情况产生的友好界面 |
1.当系统遇到致命错误时,不能将服务器的调试信息出现在页面上,因为这样做会带来不安全,应该给出一个合适的提示信息 |
2.由于系统繁忙,无法及时给出正确信息时,系统可以给出友好的错误页面,如:“请用户稍后再试”等提示信息 |
3.4、因果图
3.4.1、概念
等价类划分法和边界值分析方法都是着重考虑输入条件,但没有考虑输入条件的各种组合、输入条件之间的相互制约关系。这样虽然各种输入条件可能出错的情况已经测试到了,但多个输入条件组合起来可能出错的情况却被忽视了。
如果在测试时必须考虑输入条件的各种组合,则可能的组合数目将是天文数字,因此必须考虑采用一种适合于描述多种条件的组合、相应产生多个动作的形式来进行测试用例的设计,这就需要利用因果图(逻辑模型)
3.4.2、因果图涉及的概念
1、因果图的介绍
1) 4种符 分别表示了规格说明中向4种因果关系。
2) 因果图中使用了简单的逻辑符 ,以直线联接左右结点。左结点表示输入状态(或称原因),右结点表示输出状态(或称结果)。
3) C1表示原因,通常置于图的左部;e1表示结果,通常在图的右部。C1和e1均可取值0或1,0表示某状态不出现,1表示某状态出现
2、因果图的关系
- 恒等:若c1是1,则e1也是1;否则e1为0。
- 非:若c1是1,则e1是0;否则e1是1。
- 或:若c1或c2或c3是1,则e1是1;否则e1为0。“或”可有任意个输入。
- 与:若c1和c2都是1,则e1为1;否则e1为0。“与”也可有任意个输入。
3、因果图的约束
输入状态相互之间还可能存在某些依赖关系,称为约束。例如, 某些输入条件本身不可能同时出现。输出状态之间也往往存在约束。在因果图中,用特定的符 标明这些约束。
(1)、输入条件的约束有以下4类:
- E约束(互斥):a和b中至多有一个可能为1,即a和b不能同时为1。
- I约束(包含):a、b和c中至少有一个必须是1,即 a、b 和c不能同时为0。
- O约束(唯一);a和b必须有一个,且仅有1个为1。
- R约束(要求):a是1时,b必须是1,即不可能a是1时b是0。
- M约束(屏蔽):表示若a是1是,b必须为0,既不可出现a=1且b=1的情况。
(2)、输出条件约束类型
输出条件的约束只有M约束(强制):若结果a是1,则结果b强制为0。
3.4.3、因果图的应用
因果图在软件测试用例设计过程中,用于描述被测对象输入与输入、输入与输出之间的约束关系。因果图的绘制过程,可以理解为用例设计者针对因果关系业务的建 模过程。根据需求规格,绘制因果图,然后得到一个盘点表进行用例设计,通常理解因果图为判定表的前置过程,当被测对象因果关系较为简单时,可以直接使用判 定表设计用例,如若不然可使用因果图与判定表结合的方法设计用例。
3.4.4、因果图测试用例设计方法
1) 分割功能说明书
分析需求规格说明书,将输入条件分成若干组,然后分别对每个组使用因果图,这样可以减少输入条件组合的数目。
2)识别“原因”和“结果”,并加以编 。
“原因”是指输入条件或输入条件的等价类;“结果”是指输出条件或系统变换,如更新主文件就是一种系统变换。
每个原因和结果都对应与因果图中的一个结点,当原因或结果成立(或出现)时,相应的节点的值记为1,否则记为0.
3)根据功能说明中规定的原因和结果之间的关系画出因果图。
因果图的基本符 如下图所示:
图中左边的结点表示原因,右边的结点表示结果。原因和结果之间的关系有恒等、非、或、与,其含义如下。
在画因果图时,原因在左,结果在右,由上向下排列,并根据功能说明中规定的原因和结果之间的关系,用上述符 连接起来,必要时,可在因果图中加入一些中间结点。
4)根据功能说明在因果图中加上约束。
因果图中表示约束条件的符 如下所示:
5)根据因果图画出判定表
列出满足约束条件的所有原因组合,写出各种原因组合下的结果,必要时可在判定表中加上中间点,如下表所示:
原因 |
允许的原因组合 |
中间结点 |
各种原因组合下中间结点的值 |
结果 |
各种原因组合下的结果值 |
6)根据判定表设计测试用例
为上面判定表的每一列设计一个测试用例。
3.4.5、实例
饮料自动售货机允许投入5角和1元的硬币,用户可通过“橙汁”和“啤酒”按钮选择饮料,售货机中无零钱找时提示灯亮。当用户投入5角硬币并押下“橙汁”或“啤酒”按钮后,售货机送出相应的饮料。当用户投入1元硬币并押下“橙汁”或“啤酒”按钮后,如果售货机有零钱找,则送出相应的饮料,并退还5角硬币;如果售货机没有零钱找,则饮料不送出,并且退还1元硬币。
(1)、分析规格说明,列出原因和结果
根据规格说明,反映原因的输入条件有:投入1元硬币,投入5角硬币,押下“橙汁”按钮,押下“啤酒”按钮。反映结果的输出条件有:退还1元硬币,退还5角硬币,送出“橙汁”饮料,送出“啤酒”饮料。由于“售货机有零钱找”是在投入1元硬币时判断是否能找零钱的依据,所以也可把它看作是一个输入条件,即原因。与之对应的结果是售货机指示灯亮(或暗)。
因此,本例的原因和结果如下:
原因:
1——售货机有零钱找
2——投入1元硬币
3——投入5角硬币
4——押下橙汁按钮
5——.押下啤酒按钮
结果:
21——售货机〖零钱找完〗灯亮
22——退还1元硬币
23——退还5角硬币
24——送出橙汁饮料
25——送出啤酒饮料
(2)、所有原因节点列在左边,结果结点列在右边,画出因果图,如下图所示:
其中中间结点的含义如下:
结点11表示投入1元硬币且押下饮料按钮。
结点12表示押下“橙汁”或“啤酒”按钮。
结点13表示应找5角硬币且售货机有零钱找。
结点14表示钱已付清。
(3)、在因果图中加上约束条件
由于原因2和3不能同时发生,原因4和5也不能同时发生,所以需加约束条件E,如上图。
(4)、根据因果图画出判定表
根据因果图画出判定表如下:
其中阴影部分表示不可能出现的原因条件组合,此外当原因2,3,4,5均为0时,表示既没有投硬币也没有押按钮,此时表示售货机处于无人使用状态,因此也不必为他们设计测试用例。
(5)、为判定表的每个有意义的列设计一个测试用例。
3.5、判定表/决策表驱动法
3.5.1、判定表驱动法概念
判定表是黑盒测试的方法之一,判定表是把作为条件的所有输入的各种组合值以及对应输出值都罗列出来而形成的表格。它能够将复杂的问题按照各种可能的情况全部列举出来,简明并避免遗漏。
因此,利用判定表能够设计出完整的测试用例集合。在一些数据处理问题当中,某些操作的实施依赖于多个逻辑条件的组合,即:针对不同逻辑条件的组合值,分别执行不同的操作。判定表很适合于处理这类问题。
3.5.2、判定表的组成
1) 条件桩(Condition Stub):列出了问题得所有条件。通常认为列出的条件的次序无关紧要。
2) 动作桩(Action Stub):列出了问题规定可能采取的操作。这些操作的排列顺序没有约束。
3) 条件项(Condition Entry):列出针对它左列条件的取值。在所有可能情况下的真假值。
4) 动作项(Action Entry):列出在条件项的各种取值情况下应该采取的动作。
5) 规则: 任何一个条件组合的特定取值及其要执行的相应操作。在判定表中贯穿条件项和动作项的一列就是一条规则。
3.5.3、优点缺点
优点:它能把复杂的问题按各种可能的情况一一列举出来,简明而易于理解,也可避免遗漏。
缺点:不能表达重复执行的动作,例如循环结构。
3.5.4、适用条件
B. Beizer 指出了适合使用判定表设计测试用例的条件:
- 规格说明以判定表形式给出,或很容易转换成判定表。
- 条件的排列顺序不会也不影响执行哪些操作。
- 规则的排列顺序不会也不影响执行哪些操作。
- 每当某一规则的条件已经满足,并确定要执行的操作后,不必检验别的规则。
- 如果某一规则得到满足要执行多个操作,这些操作的执行顺序无关紧要。
B. Beizer提出这5个必要条件的目的是为了使操作的执行完全依赖于条件的组合。其实对于某些不满足这几条的判定表,同样可以借以设计测试用例,只不过尚需增加其它的测试用例罢了。
3.5.5、判定表的建立步骤
- 确定规则的个数.假如有n个条件。每个条件有两个取值(0,1),故有 clip_image006种规则。
- 列出所有的条件桩和动作桩。
- 填入条件项。
- 填入动作项。得到初始判定表。
- 简化判定表(合并相似规则(相同动作)),如下表所示,左侧的两列均可以合并为右侧一列
规则 选项 |
1 |
2 |
合并1、2 |
3 |
4 |
合并3、4 |
条件1 |
Y |
Y |
Y |
Y |
Y |
Y |
条件2 |
Y |
N |
– |
Y |
– |
– |
条件3 |
N |
N |
N |
N |
N |
N |
动作4 |