黑盒测试用例设计方法及应用场景(超适合新手的黑盒测试用例设计方法)
黑盒测试用例设计方法及应用场景(超适合新手的黑盒测试用例设计方法)某程序规定:"输入三个整数 a 、 b 、 c 分别作为三边的边长构成三角形。通过程序判定所构成的三角形的类型,当此三角形为一般三角形、等腰三角形及等边三角形时,分别作计算 … "。用等价类划分方法为该程序进行测试用例设计。(三角形问题的复杂之处在于输入与输出之间的关系比较复杂。)1.3等价类划分实例有效等价类:对程序规格有意义、合理地输入数据集合,程序接收到有效等价类数据,可以正确执行、计算。无效等价类:对程序规格无意义、不合理地输入数据集合,程序接收到无效等价类数据,应该给出错误提示,或者根本不让用户输入。设计测试用例时,要同时考虑这两种等价类,因为,软件不仅要能接收合理的数据,也要能经受意外的考验。这样的测试才能确保软件具有更高的可靠性。
等价类划分法1.1概念
等价类划分法就是把程序的输入域划分成若干个部分(子集),然后从每个部分中选取少数代表性数据作为测试用例。每一类的代表性数据在测试中的作用等价于这一类中的其他值。
1.2应用
等价类是指某个输入域的子集合。等价类划分可有两种不同的情况:有效等价类和无效等价类。
有效等价类:对程序规格有意义、合理地输入数据集合,程序接收到有效等价类数据,可以正确执行、计算。
无效等价类:对程序规格无意义、不合理地输入数据集合,程序接收到无效等价类数据,应该给出错误提示,或者根本不让用户输入。
设计测试用例时,要同时考虑这两种等价类,因为,软件不仅要能接收合理的数据,也要能经受意外的考验。这样的测试才能确保软件具有更高的可靠性。
1.3等价类划分实例
某程序规定:"输入三个整数 a 、 b 、 c 分别作为三边的边长构成三角形。通过程序判定所构成的三角形的类型,当此三角形为一般三角形、等腰三角形及等边三角形时,分别作计算 … "。用等价类划分方法为该程序进行测试用例设计。(三角形问题的复杂之处在于输入与输出之间的关系比较复杂。)
分析题目中给出的和隐含的对输入条件的要求:
(1)整数 (2)三个数 (3)非零数 (4)正数
(5)两边之和大于第三边 (6)等腰 (7)等边
如果 a 、 b 、 c 满足条件( 1 ) ~ ( 4 ),则输出下列四种情况之一:
1)如果不满足条件(5),则程序输出为 " 非三角形 " 。
2)如果三条边相等即满足条件(7),则程序输出为 " 等边三角形 " 。
3)如果只有两条边相等、即满足条件(6),则程序输出为 " 等腰三角形 " 。
4)如果三条边都不相等,则程序输出为 " 一般三角形 " 。
列出等价类表并编号
覆盖有效等价类的测试用例:
a b c 覆盖等价类号码
3 4 5 (1)–(7)
4 4 5 (1)–(7),(8)
4 5 5 (1)–(7),(9)
5 4 5 (1)–(7),(10)
4 4 4 (1)–(7),(11)
覆盖无效等价类的测试用例:
边界值分析法概念
边界值分析法就是对输入或输出的边界值进行测试的一种黑盒测试方法。 所谓边界条件,是指输入和输出等价类中那些恰好处于边界、或超过边界、或在边界以下的状态。
应用
采用边界值分析测试的基本思想是:故障往往出现在输入变量的边界值附近。
通常情况下,软件测试所包含的边界检验有几种类型:
数字、字符、位置、质量、大小、速度、方位、尺寸、空间等
相应地,以上类型的边界值应该在:
最大/最小、首位/末位、上/下、最快/最慢、最高/最低、最短/最长、 空/满等情况下 。
边界值分析法与等价类分析法的区别:
1)边界值分析不是从某等价类中随便挑一个作为代表,而是使这个等价类的每个边界都要作为测试条件。
2)边界值分析不仅考虑输入条件,还要考虑输出空间产生的测试情况。
例:测试计算平方根的函数
–输入:实数
–输出:实数
–需求说明:当输入一个0或比0大的数的时候,返回其正平方根;当输入一个小于0的数时,显示错误信息"平方根非法-输入值小于0"并返回0;库函数Print-Line可以用来输出错误信息。
A.等价类划分:
I.可以考虑作出如下划分:
a、输入 (i)<0 和 (ii)>=0
b、输出 (a)>=0 和 (b) Error
II.测试用例有两个:
a、输入4,输出2。对应于 (ii) 和 (a) 。
b、输入-10,输出0和错误提示。对应于 (i) 和 (b) 。
B.边界值分析:
划分(ii)的边界为0和最大正实数;划分(i)的边界为最小负实数和0。由此得到以下测试用例:
a、输入 {最小负实数}
b、输入 {绝对值很小的负数}
c、输入 0
d、输入 {绝对值很小的正数}
e、输入 {最大正实数}
注:能用边界值测试的时候,一般都可以用等价值测试。
错误推断法概念
基于经验和直觉推测程序中所有可能存在的各种错误 从而有针对性的设计测试用例的方法。
应用
基本思想:列举出程序中所有可能有的错误和容易发生错误的特殊情况 根据他们选择测试用例。
例如,测试手机终端的通话功能,可以设计各种通话失败的情况来补充测试用例:
1)无SIM 卡插入时进行呼出(非紧急呼叫)
2)插入已欠费SIM卡进行呼出
3)射频器件损坏或无信号区域插入有效SIM卡呼出
4)网络正常,插入有效SIM卡,呼出无效号码(如1、888、333333、不输入任何号码等)
5)网络正常,插入有效SIM卡,使用“快速拨号”功能呼出设置无效号码的数字
因果图法概念
因果图法是一种利用图解法分析输入的各种组合情况,从而设计测试用例的方法,它适合于检查程序输入条件的各种组合情况。
应用
因–原因,输入条件
果—结果,输出结果
用图形的方式,来分析软件 输入和输出的对应关系
边界值分析和等价类划分的一个弱点是未对输入条件的组合进行分析。对输入组合进行测试并不是简单的事情,因为即使对输入条件进行了等分,这些组合的数量也是天文数字。如果在选择输入条件的子集时没有采用一个系统的方法,很可能选择出一个任意的输入条件子集,这样会使测试没有什么成效。
因果图介绍
1)4种符号分别表示了规格说明中的4种因果关系。
2)因果图中使用了简单的逻辑符号,以直线联接左右结点。左结点表示输入状态(或称原因),右结点表示输出状态(或称结果)。
3)C1表示原因,通常置于图的左部;e1表示结果,通常在图的右部。C1和e1均可取值0或1,0表示某状态不出现,1表示某状态出现。
因果图涉及的概念
1)关系
恒等:若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。“与”也可有任意个输入。
2)约束
输入状态相互之间还可能存在某些依赖关系,称为约束。例如 某些输入条件本身不可能同时出现。输出状态之间也往往存在约束。在因果图中 用特定的符号标明这些约束。
输入条件的约束有以下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。
总结:当有输入数据的时候,可以把需求中要求的每一个输入项当做一个条件
判定表驱动概念
判定表是分析和表达多逻辑条件下执行不同操作的情况的工具。
判定表驱动法
判定表的优点
能够将复杂的问题按照各种可能的情况全部列举出来,简明并避免遗漏。因此,利用判定表能够设计出完整的测试用例集合。
判定表(因果图)也是考虑控件组合,但是组合数量较少(一般不会超过20种),而且测试全面
正交试验法概念
依据Galois理论 从大量的(实验)数据(测试例)中挑选适量的 有代表性的点(例) 从而合理地安排实验(测试)的一种科学实验设计方法.类似的方法有:聚类分析方法 因子方法方法等。
应用
正交表:一种特制的表,一般正交表记为:Ln(m^K)
n是表的行数,也就是需要测试组合的次数
K是表的列数,表示控件的个数(因素的个数,或因子个数)
m是每个控件包含的取值个数(因因素的水平数,即因素的状态数)
功能图法概念
功能图由状态迁移图和布尔函数组成.状态迁移图用状态和迁移来描述.一个状态指出数据输入的位置(或时间) 而迁移则指明状态的改变.同时要依靠判定表或因果图表示的逻辑功能。
场景法概念
现在的软件几乎都是用事件触发来控制流程的,事件触发时的情景便形成了场景,而同一事件不同的触发顺序和处理结果就形成事件流。这种在软件设计方面的思想也可以引入到软件测试中,可以比较生动地描绘出事件触发时的情景,有利于测试设计者设计测试用例,同时使测试用例更容易理解和执行。
测试用例设计综合策略Myers提出了使用各种测试方法的综合策略:
1)在任何情况下都必须使用边界值分析方法,经验表明用这种方法设计出测试用例发现程序错误的能力最强。
2)必要时用等价类划分方法补充一些测试用例。
3)用错误推测法再追加一些测试用例。
4)对照程序逻辑,检查已设计出的测试用例的逻辑覆盖程度,如果没有达到要求的覆盖标准,应当再补充足够的测试用例。
5)如果程序的功能说明中含有输入条件的组合情况,则一开始就可选用因果图法。
测试用例的设计步骤
1)构造根据设计规格得出的基本功能测试用例;
2)边界值测试用例;
3)状态转换测试用例;
4)错误猜测测试用例;
5)异常测试用例;
6)性能测试用例;
7)压力测试用例。
优化测试用例的方法
1)利用设计测试用例的8种方法不断的对测试用例进行分解与合并;
2)采用遗传算法理论进化测试用例;
3)在测试时利用发散思维构造测试用例;